Stringgrid, Textdatei einlesen Trennung Felder



  • Hallo,

    ich benötige mal euere Hilfe, ich habe da mal eine Frage zu den StringGrid.

    Ich lesen eine .txt-Datei in ein StringGrid ein, das funktioniert auch alles.

    Das StringGrid trennt die Felder aus der Text-Datei mit "Leerzeichen" oder auch mit ",".

    Kann man das Trennen mit den Leerzeichen unterbinden oder einstellen?

    z.B. Text-Datei:

    abcd,aass,aaa,ddefdf,

    -> funktioniert, aber mit Leerzeichen werden ein neues Feld genommen.

    aasd ddsdf,wweer ewresd,aswdswsd wer,

    -> Beim leerzeichen wirde das ddsdf in ein neues Feld geschrieben und das soll das StringGrid nicht machen.

    Mfg

    Carsten



  • Dann zeige mal etwas Code. Wie befüllst du das StringGrid?

    Benutzt du eine TStringList? Dann setze mal StrictDelimiter auf 'true'.



  • Das sieht so aus:

    StringGrid1->Cells[0][0]="Datum";
    StringGrid1->Cells[1][0]="F";
    StringGrid1->Cells[2][0]="A";
    StringGrid1->Cells[3][0]="S";
    StringGrid1->Cells[4][0]="B";

    TStringList *list1 = new TStringList();
    list1->LoadFromFile("datei.txt");

    StringGrid1->RowCount = list1-> Count+1;
    for (int y = 0; y < list1 ->Count; y++)
    StringGrid1->Rows[y+1]->CommaText = list1->Strings[y];
    delete list1;

    Wie schaltet man den StrictDelimiter ein?
    Ich kann das nicht finden?



  • Ich probiere gerade, aber funktioniert noch nicht::

    StringGrid1->Cells[0][0]="Datum";
    StringGrid1->Cells[1][0]="Firma";
    StringGrid1->Cells[2][0]="Auftrag";
    StringGrid1->Cells[3][0]="Status";
    StringGrid1->Cells[4][0]="Bemerkung";

    TStringList *list1 = new TStringList();

    TStringList *line = new TStringList();
    line->Delimiter = ',';

    list1->LoadFromFile("Ahlmann.txt");
    StringGrid1->RowCount = list1-> Count+1;
    for (int y = 0; y < list1 ->Count; y++)
    StringGrid1->Rows[y+1]->CommaText = list1->Strings[y];

    delete list1;
    delete line;



  • Warum hast du im letzten Code jetzt 2 verschiedene StringLists?

    Nimm nur eine und setze dann StrictDelimiter dort (s.a. Delimiter und Leerzeichen)!

    PS: Bitte verwende demnächst Code-Tags bei deinen Beiträgen.



  • Das war nur mal zum Testen.

    Aber leider funktioniert die Sache immer noch nicht.

    Das StringGrid macht den Umbruch ins neue Feld immer noch beim Leerzeichen.

    Das sieht jetzt so aus:

    [code]

    StringGrid1->Cells[0][0]="Da";
    StringGrid1->Cells[1][0]="F";
    StringGrid1->Cells[2][0]="Au";
    StringGrid1->Cells[3][0]="Sta";
    StringGrid1->Cells[4][0]="Bem";

    TStringList *list1 = new TStringList();

    list1->Delimiter = true;
    list1->Delimiter = ' ';

    list1->LoadFromFile("Ahl.txt");

    StringGrid1->RowCount = list1-> Count+1;
    for (int y = 0; y < list1 ->Count; y++)
    StringGrid1->Rows[y+1]->CommaText = list1->Strings[y];

    delete list1;



  • Hallo,

    könnt ihr mir mal bitte helfen, ich bekomme das nicht hin.

    __fastcall TForm1::TForm1(TComponent* Owner)
    	: TForm(Owner)
    {
     StringGrid1->Cells[0][0]="Datum";
     StringGrid1->Cells[1][0]="Firma";
     StringGrid1->Cells[2][0]="Auftrag";
     StringGrid1->Cells[3][0]="Status";
     StringGrid1->Cells[4][0]="Bemerkung";
    
    TStringList *list = new TStringList();
       list -> LoadFromFile("Ahlmann.txt");
       for (int y = 0; y < list->Count; y++)
       {
    	 StringGrid1->Rows[y]-> Delimiter = ',';
    	 StringGrid1->Rows[y]-> DelimitedText = list -> Strings[y];
       }
       delete list;
     }
    


  • Du setzt die Eigenschaft StrictDelimiter doch gar nicht. Hast du das mal ausprobiert?



  • Jetzt funktioniert es endlich.

    StrictDelimiter hatte ich bereits drin.

    Der Fehler lag in der Txt-Datei, durch das ganze probieren hatte ich vergessen, dass da noch ein';' drin stand. Ich hatte immer auf ',' abgefragt.

    Der Code sieht jetzt so aus:

    StringGrid1->Cells[0][0]="Da";
     StringGrid1->Cells[1][0]="Fi";
     StringGrid1->Cells[2][0]="Auf";
     StringGrid1->Cells[3][0]="Stat";
     StringGrid1->Cells[4][0]="Be";
    
    TStringList *list = new TStringList();
       list -> LoadFromFile("Ahl.txt");
       for (int y = 1; y < list->Count; y++)
       {
    	 StringGrid1->Rows[y]->StrictDelimiter = ';';
    	 StringGrid1->Rows[y]-> DelimitedText = list -> Strings[y];
       }
       delete list;
    


  • Die Eigenschaft StrictDelimiter ist ein bool 🙄
    Gut dass ; implizit zu true konvertiert wird. Beheben solltest du das trotzdem.


Log in to reply