Daten aus einer Textdatei in ein Edit laden



  • Hallo Leute,

    ich brauch mal ein wenig Hilfe.

    Ich möchte DAten aus einer Textdatei in eine Edit Komponente laden. Die Textdatei sieht so aus:

    1x1,5 0,31 0,26 0,11
    2x2,5 0,22 0,33 0,44

    Über eine ComboBox wird eine Zeile ausgewählt, z.B. die mit 1x1,5 und die Werte dahinter, die 0,31 , 0,26 , 0,11 sollen dann in ein Edit1, Edit2 , Edit3 geladen werden.

    Das Öffnen der Textdatei ist alles kein Problem, aber wie kann ich die Zeile1 bzw. diesen String in die Edit Komponenten laden.

    mfg

    ahl



  • Was benutzt du denn für das Edit? Welche GUI Lib? WinAPI? MFC? VCL? Oder gar eine Unabhängige lib?

    BR
    evilissimo



  • ich benutze Borland Builder 5.0, vcl.h



  • falsches forum:)



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum VCL/CLX (Borland C++ Builder) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Doppelpost...



  • void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    TStringList *li=new TStringList();
    li->LoadFromFile("text.txt");
    li->Delimiter =' ';
    li->DelimitedText = li->Text;
    TEdit *edits[3]={Edit1,Edit2,Edit3};
    int pos=0;
    while(pos<li->Count&&li->Strings[pos]!=ComboBox1->Text) pos+=4;
    if(pos<li->Count)
    {
       for(int i=0;i<3;i++)
       {
          edits[i]->Text = li->Strings[pos+1+i];
       }
    }
    delete li;
    }
    


  • Mit dem delimerte bekomme ich folgende Fehlermeldung

    [C++ Fehler] Unit1.cpp(160): E2316 'Delimiter' ist kein Element von 'TStringList'

    [C++ Fehler] Unit1.cpp(161): E2316 'DelimitedText' ist kein Element von 'TStringList'

    [C++ Fehler] Unit1.cpp(164): E2096 Ungültige Strukturoperation



  • Hallo

    Dann vermute ich, das du den BCB5 hast, in dem sind diese Methoden noch nicht vorhanden.
    Dann must du den Text selber auseinandertrenne, mit den AnsiString-Methoden Pos und SubString

    bis bald
    akari



  • Ja ist richtig borland 5.0.



  • akari schrieb:

    Dann must du den Text selber auseinandertrenne, mit den AnsiString-Methoden Pos und SubString

    Womit wir auf dem Stand des anderen Threads angekommen sind...

    Grüße Joe_M.



  • Hast recht,

    gebe zu, ich bin zu blöd dieses so zu machen.

    Also fallst noch Jemand eine Tipp hätte, dann bitte Antworten



  • Probier mal das hier:

    ListBox1->Clear();
    int x = 0;
    int y = 0;
    String SubStr;
    while (x < Edit1->Text.Length())
            {
             SubStr = Edit1->Text.SubString(x,1);
             if (SubStr == " ")
                    {
                     ListBox1->Items->Add(Edit1->Text.SubString(y,x - y));
                     x = x + 1;
                     y = x;
                    }
             x = x + 1;
            }
    ListBox1->Items->Add(Edit1->Text.SubString(y,x - y + 1));
    


  • String explode(String &source,char del,int pos)
    {
       int i=1,lp=1;
       while(i<=source.Length()&&pos)
       {
          if(source[i]==del)
          {
             pos--;
             if(pos) lp=i+1;
          }
          i++;
       }
       if(i>source.Length())i++;
       return source.SubString(lp,i-lp-1);
    }
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    TStringList *li=new TStringList();
    li->LoadFromFile("text.txt");
    TEdit *edits[3]={Edit1,Edit2,Edit3};
    int pos=0;
    while(pos<li->Count&&explode(li->Strings[pos],' ',1)!=ComboBox1->Text) pos++;
    if(pos<li->Count)
    {
       for(int i=0;i<3;i++)
       {
          edits[i]->Text = explode(li->Strings[pos],' ',i+2);
       }
    }
    delete li;
    }
    


  • Ich habe Probleme an dieser Stelle:

    while(pos<li->Count&&explode(li->Strings[pos],' ',1)!=ComboBox1->Text) pos++;

    undefinierte Funktion expolde

    Ich benutze Borland C++Builder5.0, diesen Befehl gibt es nicht.



  • HAb es jetzt mal so gemacht, sehr sehr primitiv, aber funktioniert fast:

    void __fastcall TForm1::ComboBox4Change(TObject *Sender)
    {
    if (ComboBox4->Text=="NYY 4x 1,5mm²"){Rw=14.47 ;XL=0.115 ;}
    else if (ComboBox4->Text=="NYY 4x 2,5mm²"){Rw=8.71 ;XL=0.110 ;}
    else if (ComboBox4->Text=="NNY 4x 4,0mm²"){Rw=5.45 ;XL=0.107 ;}
    else if (ComboBox4->Text=="NYY 4x 6,0mm²"){Rw=3.62 ;XL=0.100 ;}
    else if (ComboBox4->Text=="NYY 4x 10mm²") {Rw=2.16 ;XL=0.094 ;}
    else if (ComboBox4->Text=="NYY 4x 16mm²") {Rw=1.36 ;XL=0.090 ;}
    else if (ComboBox4->Text=="NYY 4x 25mm²") {Rw=0.836 ;XL=0.086 ;}
    else if (ComboBox4->Text=="NYY 4x 35mm²") {Rw=0.627 ;XL=0.083 ;}
    else if (ComboBox4->Text=="NAYY 4x 35mm²") {Rw=1.055 ;XL=0.083 ;}
    else if (ComboBox4->Text=="NYY 4x 50mm²") {Rw=0.463 ;XL=0.083 ;}
    else if (ComboBox4->Text=="NAYY 4x 50mm²") {Rw=0.772 ;XL=0.083 ;}
    else if (ComboBox4->Text=="NYY 4x 70mm²") {Rw=0.321 ;XL=0.082 ;}
    else if (ComboBox4->Text=="NAYY 4x 70mm²") {Rw=0.534 ;XL=0.082 ;}
    else if (ComboBox4->Text=="NYY 4x 95mm²") {Rw=0.232 ;XL=0.082 ;}
    else if (ComboBox4->Text=="NAYY 4x 95mm²") {Rw=0.386 ;XL=0.082 ;}
    else if (ComboBox4->Text=="NYY 4x 120mm²"){Rw=0.184 ;XL=0.080 ;}
    else if (ComboBox4->Text=="NAYY 4x 120mm²") {Rw=0.305 ;XL=0.080 ;}
    else if (ComboBox4->Text=="NYY 4x 150mm²"){Rw=0.150 ;XL=0.080 ;}
    else if (ComboBox4->Text=="NAYY 4x 150mm²") {Rw=0.249 ;XL=0.080 ;}
    else if (ComboBox4->Text=="NYY 4x 185mm²"){Rw=0.1202 ;XL=0.080 ;}
    else if (ComboBox4->Text=="NAYY 4x 185mm²") {Rw=0.198 ;XL=0.080 ;}
    else if (ComboBox4->Text=="NYY 4x 240mm²"){Rw=0.0922 ;XL=0.079 ;}
    else if (ComboBox4->Text=="NYY 4x 300mm²"){Rw=0.0745 ;XL=0.079 ;}
    else if (ComboBox4->Text=="NYY 5x 1,5mm²"){Rw=14.47 ;XL=0.115 ;}
    else if (ComboBox4->Text=="NYY 5x 2,5mm²"){Rw=8.71 ;XL=0.110 ;}
    else if (ComboBox4->Text=="NYY 5x 4mm²") {Rw=5.45 ;XL=0.107 ;}
    else if (ComboBox4->Text=="NYY 5x 6mm²") {Rw=3.62 ;XL=0.100 ;}
    else if (ComboBox4->Text=="NYY 5x 10mm²") {Rw=2.16 ;XL=0.094 ;}
    else if (ComboBox4->Text=="NYY 5x 16mm²") {Rw=1.36 ;XL=0.090 ;}

    //TStringList *list = new TStringList();
    //AnsiString line;
    //Memo2->Lines->LoadFromFile("H:\\Kabel.txt");
    //line=Memo2->Lines->Strings[i];

    Edit18->Text=RW;
    Edit19->Text=XL;

    //delete list;
    }

    Das Problem ist nun, dass der angezeigte Werte in der Edit17,18 , nun teilweise falsch angezeigt werden, z.B. XL=0.110 angezeigt wird 0.10999;

    Muß mal suchen, woran das noch liegt oder hat Jemand eine Idee



  • soviel zur effizienten programmierung

    und was machste, wenn der user sich verschreibt??



  • ja ich weiss. Dann gib mir mal einen Tipp



  • ahl schrieb:

    Ich habe Probleme an dieser Stelle:

    while(pos<li->Count&&explode(li->Strings[pos],' ',1)!=ComboBox1->Text) pos++;

    undefinierte Funktion expolde

    Ich benutze Borland C++Builder5.0, diesen Befehl gibt es nicht.

    Die Fehlermeldung sagt dir doch, das er die Funktion nicht kennt.
    Hast du die Funktion explode vor dem Aufruf bekanntgemacht ?



  • btw. dies ist die Funktion:

    String explode(String &source,char del,int pos) 
    { 
       int i=1,lp=1; 
       while(i<=source.Length()&&pos) 
       { 
          if(source[i]==del) 
          { 
             pos--; 
             if(pos) lp=i+1; 
          } 
          i++; 
       } 
       if(i>source.Length())i++; 
       return source.SubString(lp,i-lp-1); 
    }
    

Anmelden zum Antworten