Bestimmte Zeile einer .txt datei auslesen (C)
Hallo Leute,
ich hab da mal einen Code geschrieben, mit dem ich die gesamte Textdatei auslese also alle Zeilen. Ich möchte aber alle Zeilen nacheinander auslesen also zum Beispiel mit einer for Schleife. Wie mache ich das am besten?
Code:
include include define LAENGE 50int main() { FILE *f; char Text[LAENGE]; char Dateiname[] = "C:\c\Woerter.txt";
f = fopen(Dateiname,"r");
if(f==NULL) { printf("Fehler beim Oeffnen! Bitte ueberpruefe deinen Pfad!\n"); } printf("\nDas ist der Text der in der Datei ( \"%s\" ) steht:\n\n",Dateiname); while( fgets(Text, sizeof(Text), f) !=0 ) fputs(Text, stdout); printf("\n");
system("PAUSE"); return 0; }
2 Antworten
Hallo ultrabrot123,
so, wie du dir das vielleicht vorstellst, ist das nicht ganz möglich. Du musst vom Anfang weg Zeile für Zeile auslesen und immer prüfen, ob das dann die richtige Zeile ist (oder die ganze Datei auf einmal einlesen).
(Das ist nicht nur bei Java so, sondern generell bei jeder Programmiersprache.)
Und bevor du mehrmals die komplette Datei durchsuchst, besser einmal in ein Array etc. einlesen.
Eine Verschnellerung wäre nur möglich, wenn jede Zeile gleich viel Byte hat. Da Namen/Berufsbezeichnungen etc. aber verschieden lang sind.
Mit indexOf und substring könnte man die einzelnen (;-getrennten) Teile ermitteln. Wenn man alle Teile braucht ist split schneller.
Aber, je nach Programm, wäre es vielleicht am sinnvollsten, die Zeilen schon beim Einlesen zu trennen.
Eine Zeile einlesen, mit split an den ; auftrennen.
Schau hier mal nach:
https://www.tutorials.de/threads/mit-java-eine-bestimmte-zeile-einer-txt-datei-auslesen.385680/
Ist sehr gut beschrieben und leicht zu analysieren.
Mfg
SimmFire
Die Frage war aber C und nicht Java ;)
Trotzdem bleibt die Kernaussage die gleiche: Du kannst nicht direkt sagen, erst ab Zeile x einlesen. C bietet die Funktion "fseek", mit der man an eine bestimmte Stelle der Datei springen kann. Dazu braucht man aber den Offset in Bytes. Und damit kann man nur an einen bestimmten Zeilenanfang springen, wenn man die Zeilenlängen davor bereits weiß
Der Code schaut natürlich so aus:
include include define LAENGE 50int main()
{
FILE *f;
char Text[LAENGE];
char Dateiname[] = "C:\c\Woerter.txt";
f = fopen(Dateiname,"r");
if(f==NULL)
{
printf("Fehler beim Oeffnen! Bitte ueberpruefe deinen Pfad!\n");
}
printf("\nDas ist der Text der in der Datei ( \"%s\" ) steht:\n\n",Dateiname);
while( fgets(Text, sizeof(Text), f) !=0 )
fputs(Text, stdout);
printf("\n");
system("PAUSE");
return 0; }
Danke :)