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?
-
Hallo
was soll daran lustig sein ?
Debuggen ist ein sehr wichtiges Hilfsmittel
Wenn jemand damit nicht umgehen kann, hat er echt ein ProblemMfG
Klaus