Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Datei lesen mit fgets

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
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.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
30.04.2004, 21:18 Uhr
Pablo
Supertux
(Operator)


Wenn jede Zeile das gleiche Format hat, dann benutze strtok
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: