000
30.04.2004, 14:19 Uhr
Pamela3
|
Hallo Ihr,
bin C-Anfängerin und kommen gerade nicht wirklich weiter. Es geht um das einlesen einer Datei: Die einzulesende Datei hat folgendes Format:
1. Zeile besteht aus einem Header der gelesen und verworfen werden soll (das klappt auch) 2. Anschließend möchte ich folgende Struktur zeilenweise einlesen:
Jede Zeile sieht folgendermaßen aus:
Wert1<space>Wert2<space>Wert3<space>Wert4<space><space>Text im Binärmodus
Wert1 bis Wert4 ist immer vorhanden. Die Länge des Text im Binärmodus ist unterschiedlich lang, genauso die Anzahl der Zeilen jeder Datei.
Meine Versuche enden jedoch immer so, das nur die 1.Zeile eingelesen wird oder das alles in einer Endlos-Schleife endet.
C++: |
int number = 0; char line_buffer[1024]; int static rett = 0; long msgType; long msgSize; short runMode; long timeStamp; long fp_pos; FILE* fp; // .... // .... // Header wurde schon gelesen und verworfen
fp_pos = ftell(fp); // aktuelle Position ermitteln
// Hier soll nun zeilenweise eingelesen werden if((fscanf(fp, "%ld %ld %hd %ld", &msgType, &msgSize, &runMode, &timeStamp)) == 4) // kann ich diese Zeile nicht weglassen? { number = ftell(fp) - fp_pos + 1; // fuer die Funktion fgets fseek(fp, fp_pos, SEEK_SET); while(fgets(line_buffer, number, fp) != NULL) { number = ftell(fp) - fp_pos + 1; fseek(fp, fp_pos, SEEK_SET);
if(fgets(line_buffer, number, fp)) { rett = sscanf(line_buffer, "%ld %ld %hd %ld", &msg_type, &msg_size, &run_mode, &time_stamp); if(rett == 4) { fseek(fp, ftell(fp) + 2, SEEK_SET); ret = fread (message_buffer, msg_size, 1, fp); if (ret == 1) recv_cb (message_buffer, msg_size, msg_type, time_stamp, -1, true); // eine Funktion die ich verwenden muß und die die eingelesenen Werte benötigt! } fp_pos = ftell(fp); fseek(fp, fp_pos, SEEK_SET); } }
|
Ist es nicht möglich, in einer while-Schleife jede einzelne Zeile zu lesen? Mit fscanf möchte ich nicht arbeiten. Für jede Hilfe bin ich echt dankbar und vielen Dank schon im voraus. Dieser Post wurde am 30.04.2004 um 14:21 Uhr von Pamela3 editiert. |