Lesen aus einer Datei Spaltenweise in C
-
Hallo,
ich hänge seit Tagen an einer Aufgabe fest, hoffe ihr könnt mir helfen.
Und zwar soll ich aus folgender Textdatei Daten auslesen : ( Hier ein Auschnitt )
0.015300 66.680000 67.400002 67.059998 66.940002
0.035300 66.680000 67.519997 66.940002 66.940002und die Daten folgendermaßen ausgeben.
5 0.015 66.68 67.40 67.05 66.94
5 0.035 66.68 67.51 66.94 66.94Es wurden 2 Zeilen eingelesen.
Die 5 in der ersten Spalte atellt die Anzahl der erfolgreich gelesen Werte da.
Zum Anfang wäre ein Typ ganz gut wie ich die Zahlen Spaltenweise einlesen formatieren und ausgeben kann ?
danke schon einmal
-
-
Was damit gemeint ist, ist, dass du hier erstmal Code anbieten sollst, bevor dir konkretere Hinweise gegeben werden.
-
Ja habe schon etwas probiert , hier mit fscanf und printf.
Nur leider druckt er mir zwar 5 Spalten aber völlig falsche Zahlen und es gibt
kein Endeint main(void) {
FILE *fp;int zeit;
int v1, v2, h1, h2;fp = fopen("CanProbe.dat", "r");
if (fp == 0)
{
printf("Datei kann nicht geoeffnet werden\n");
return (-1);
}while (fscanf(fp, " %7.6d %8.6d %8.6d %8.6d %8.6d\n", &zeit, &v1, &v2, &h1, &h2) != EOF)
{printf(" %4.3d %4.2d %4.2d %4.2d %4.2d\n", zeit, v1, v2, h1, h2);
}fclose(fp);
return (0);
}
-
Schau dir das mit den Formaten bei scanf und printf noch mal an
-
Als was würdest du denn die Zahlen in der Datei einstufen: Ganzzahlen (Integer) oder Fließkommazahlen (double)?
Und nimm bitte für den Code die cpp-Tags (Code markieren und auf den C/C++ Button unter den
klicken).
-
Vorschlag:
#include <stdio.h> #include <string.h> int main(void) { FILE* fp = fopen("CanProbe.dat", "r"); if (fp == 0) { printf("Datei kann nicht geoeffnet werden\n"); return -1; } char buffer[200]; char buffer1[200]; char* zeile = buffer; int lines; for (lines=0;fgets(zeile,200,fp);++lines) { char *pos; strcpy (buffer1,buffer); // Kopie für strtok; // Anzahl der Spalten ermitteln int columns; for (columns = 1,pos = zeile; (pos = strchr (pos,' ')); ++columns) ++pos; /* 1. Möglichkeit: strchr */ printf ("strchr: %i ",columns); char* z; for (z = zeile; (pos = strchr (z,' '));z = pos+1) { if (pos) *pos = 0; printf ("%.5s ",z); } printf ("%.5s\n",z); /* 2. Möglichkeit: strtok */ printf ("strtok: %i ",columns); char* token = strtok(buffer1, " ,\t\n"); while (NULL != token) { printf( "%.5s ", token ); token = strtok( NULL, " ,\t\n" ); } puts ("\n"); // Zwei (!) Zeilenvorschübe } printf ("Es wurden %i Zeilen eingelesen\n",lines); fclose(fp); return 0; }
viele grüße
ralph
-
Danke für die Antworten , jetzt sollte es klappen