Datenblöcke aus Datei lesen



  • Hallo,

    Bitte um Hilfe

    ich habe eine Textdatei die die einzelnen Datenblöcke durch
    Leerzeichen trennt.
    zb: 12345 678919 abdcder ertwfde2[CR][LF]
    345346 zhg564refr3 765 zz65[CR][LF]
    usw.

    Ich möchte auf die einzelnen Blöcke zurück greifen und dann in den jeweiligen
    Block in eine Cell eines StringGrid eintragen.
    Habe schon mit infile, fread, fgetc usw. probiert.

    Ich dachte, ich zähle die einzelnen Zeichen bis zum Leerzeichen und setze dann den Dateizeiger auf die gelesene Anzahl von Zeichen zurück und lese dann den kompletten String (Länge variabel) in meine meine entspr. Cell der StringGrid.
    Geht aber alles nicht so wie ich dachte.

    Welche Lösung ist einfacher?? um die Datenblöcke zu lesen???

    danke



  • 1. wenn textdatei nicht zu gross ist in eine stringliste laden
    2. in einer schleife alle daten der stringliste durchgehen
    3. in einer weiteren schleifen den jeweiligen string in substrings zerlegen (SubString()) (mit Pos() auf Leerzeichen prüfen, Delete() zum Löschen des Teilstrings
    4. teilstring in StringGrid eintragen



  • nur so theoretisch geht vielleicht auch das vielleicht auch mit getline()....

    als dritten Parameter einfach ein ' ' als Delimiter angeben, dann ließt er jeweils bis zum nächsten Leerzeichen... glaub ich zumindest 😉



  • Sieh dir in der FAQ mal die Beispiele zum Speichern/Einlesen des StringGrid-Inhaltes an.

    Wenn du das Textformat selbst definieren kannst würde ich dir empfehlen, die Leerzeichen durch Kommas zu ersetzen, das erleichtert den Einsatz von StringLists (Stichwort CommaText). Ggf. lässt sich das Ersetzen natürlich auch nachträglich vornehmen (StringReplace()).



  • ich komme hier nicht weiter

    char gelesen = 0;
    int  laenge = 0;
    char zbuff[10]; //Platz für die einzelnen Datensätze
    fpos_t filepos; //Dateicursor
    FILE *infile;
    int z = 0;
    
    infile = fopen(OpenDialog1->FileName.c_str(), "rb");// Open binary
    do{
        gelesen = fgetc( infile );
         if (gelesen == ' ')// auf Leerzeichen prüfen
          {
           //Cusorpos ermitteln
             fgetpos(infile,  &filepos);
           // Länge der gelesenen Bytes ermitteln
             laenge =   ftell(infile);
           // Cusor wieder setzen
             fseek (infile, -laenge, SEEK_CUR);
           // Bytes lesen die in Länge ermittelt wurden
             fread(&zbuff, laenge, 1 , infile);
           // Auswahl welcher Datensatz als nächstes geschrieben wird
    
                switch (z)
                  {
                     case 0:   {
                                 StringGrid1->Cells [1][2] = (zbuff);
                                 z++;
                                 break;
                               }
                     case 1:   { 
                                 StringGrid1->Cells [1][3] = (zbuff);
                                 z++;   // in zbuff steht immer noch der Wert
                                 break; // vom 1. Datenblock, 
                               }        // Wie kann ich zbuff wieder freigeben?
                     default:    break;
                   }
              }
    }
         while  (gelesen != EOF);
    fclose(infile);
    


  • Schonmal mit simplem debuggen versucht?

    -junix



  • Original erstellt von junix:
    **Schonmal mit simplem debuggen versucht?

    -junix**

    wie lustig?


  • Mod

    Hallo

    was soll daran lustig sein ? 😃

    Debuggen ist ein sehr wichtiges Hilfsmittel
    Wenn jemand damit nicht umgehen kann, hat er echt ein Problem

    MfG
    Klaus


Anmelden zum Antworten