C: Zeilenweise aus einer Datei einlesen

FoH

Grünschnabel
20:45:07 **** Incremental Build of configuration Debug for project test ****
make all
Building file: ../src/test.c
Invoking: GCC C Compiler
gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/test.d" -MT"src/test.d" -o "src/test.o" "../src/test.c"
Finished building: ../src/test.c
Building target: test
Invoking: GCC C Linker
gcc -o "test" ./src/test.o
Finished building target: test

20:45:07 Build Finished (took 363ms)

___________________________

#include <stdio.h>
#include <stdlib.h>

int main (void)
{

FILE *text = fopen("/home/ip/Schreibtisch/BLZ.txt", "r");
char tmp[256];
while(fscanf(text, "\n%[^\n]", tmp) && !feof(text))
printf("Read \"%s\"\n", tmp);
return 0;
}

_________________

Beim Ausführen kommt nichts, und ja die Datei ist am richtigen Ort und ist nicht leer, denn wenn ich es so ausführe

int blz;
char bank[30];
FILE *text = fopen("/home/ip/Schreibtisch/BLZ.txt", "r");

while(!feof(text))
{
fscanf(text,"%d;%[^\n]\n",&blz,bank);
printf("%d - %s",blz,bank);
}

kommt wenigstens etwas raus, also er gibt über die ganze "bank" den ganzen Text als String aus.


50090607 - apoBank Frankfurt Main
51220800;Banco do Brasil Frankfurt
10020500;Bank f�r Sozialwirtschaft
66090800;BBBank Karlsruhe
.......
.....
...
 

cwriter

Erfahrenes Mitglied
Beim Ausführen kommt nichts, und ja die Datei ist am richtigen Ort und ist nicht leer, denn wenn ich es so ausführe

//fscanf(text,"%d;%[^\n]",&blz,bank);
//printf("%d - %s",blz,bank);

kommt wenigstens etwas raus, also er gibt über die ganze "bank" den ganzen Text als String aus
Das ist ja nicht im Code. Woher soll ich wissen, wie dein Code aussieht?

Und mein Code funktioniert bei mir problemlos, auch wenn du eine Datei angibst.

Was gibt dieser Code aus? Bitte die Ausgabe 1 zu 1 kopieren.
C:
#include <stdio.h>
#include <stdlib.h>

int main (void)
{

    FILE *text = fopen("/home/ip/Schreibtisch/BLZ.txt", "r");
    if(!text)
    {
        perror("Die Datei existiert nicht");
        return -1;
    }
    fseek(text, 0, SEEK_END);
    printf("Die Datei ist %ld Bytes gross\n", ftell(text));
    rewind(text);

    char tmp[256];
    while(fscanf(text, "\n%[^\n]", tmp) && !feof(text))
        printf("Read \"%s\"\n", tmp);


    system("cat /home/ip/Schreibtisch/BLZ.txt");
    return 0;
}

cwriter
 

FoH

Grünschnabel
Dieser Code gibt nichts aus, es passiert gar nichts, es ist auch keine Endlosschleife, denn das Programm gestoppt direkt. Der Compiler gibt auch keine Error oder Warnings aus.

Schau oben mal nach, ich habe eben meinen Beitrag noch bearbeitet gehabt.
 

FoH

Grünschnabel
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (void)
{

FILE *text = fopen("/home/ip/Schreibtisch/BLZ.txt", "r");
char tmp[256];
while(fscanf(text, "\n%[^\n]", tmp) && !feof(text))
printf("Read \"%s\"\n", tmp);
return 0;
}

_____

Hier wird nichts ausgegeben.
 

cwriter

Erfahrenes Mitglied
Beim Ausführen kommt nichts, und ja die Datei ist am richtigen Ort und ist nicht leer, denn wenn ich es so ausführe

int blz;
char bank[30];
FILE *text = fopen("/home/ip/Schreibtisch/BLZ.txt", "r");

while(!feof(text))
{
fscanf(text,"%d;%[^\n]\n",&blz,bank);
printf("%d - %s",blz,bank);
}

kommt wenigstens etwas raus, also er gibt über die ganze "bank" den ganzen Text als String aus.
Bitte die Codetags [code=c][/code] verwenden.

Ok, das nehme ich auf mich, es sollte so aussehen:
fscanf(text,"\n%d;%[^\n]",&blz,bank);

(das erste \n überpringt das letzte Zeilenende, da es ein Whitespace ist, aber consumed werden muss. Warum es nicht auch umgekehrt geht: Weiss der Geier.)

Dann hat deine Datei zusätzlich aber das falsche Format:
50090607 - apoBank Frankfurt Main
Da ist kein Semikolon...

Bitte schreibe nicht mehrere kurze Beiträge hintereinander. Macht alles mühsamer zu lesen.

Hier wird nichts ausgegeben.
Windows Newlines?
Hänge die Datei mal an, damit ich es mir anschauen kann.

cwriter
 

cwriter

Erfahrenes Mitglied
Sehr wahrscheinlich
Macintosh Line Endings.
Also entweder du ersetzt alle "\n" im Code durch "\r" oder du reparierst die Datei selbst oder du nimmst die angehängte Datei. (Die Sonderzeichen wurden natürlich völlig verdreht, aber wen interessiert's schon.

cwriter
 

Anhänge

  • BLZ.txt
    1,7 KB · Aufrufe: 2

FoH

Grünschnabel
Dann hat deine Datei zusätzlich aber das falsche Format:
Da ist kein Semikolon...
C:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (void)
{

       int blz;
       char bank[30];
       FILE *text = fopen("/home/ip/Schreibtisch/BLZ.txt", "r");

       while(!feof(text))
       {
           fscanf(text,"\n%d;%[^\n]",&blz,bank);
           printf("%d - %s",blz,bank);
       }

}


hier wegen dem printf passiert das. In der erste Zeile bis zum Semikolon macht er es richtig, dann aber gibt er den ganzen restlichen Text aufeinmal in dem %s aus, daher sind die restlichen Zeilen alle mit ";". Das bedeutet, er hört nicht auf am Ende der Zeile weiter zu lesen.
 

FoH

Grünschnabel
C:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (void)
{
       int blz;
       char bank[30];
       FILE *text = fopen("/home/ip/Schreibtisch/BLZ.txt", "r");

       while(!feof(text))
       {
           fscanf(text,"\r%d;%[^\r]",&blz,bank);
           printf("%d - %s\n",blz,bank);
       }
}

50090607 - apoBank Frankfurt Main
51220800 - Banco do Brasil Frankfurt
10020500 - Bank f�r Sozialwirtschaft
66090800 - BBBank Karlsruhe
.......

Vielen dank! Mein Gott, seit 3 Tagen versuche ich das Problem zu lösen, und dann lag es nicht mal an mir :( \r ich hasse MAC USER!