Ich möchte aus einer Datei bestimmte Zeilen lesen, z.B. Zeile 3-5. Mit fgets() kann man ja Zeilenweise lesen. Aber wie kann ich auf Zeile 3 vorspringen. Mit der Fkt. fseek() kann man nur Byteweise vorspringen, leider ist jede Zeile unterschiedlich lang, so das mir das wenig hilft.
naja z.b. entweder jedes zeichen einzeln durchlesen bis du 3 newlines findest
C++:
FILE fp*=fopen(.......); int line=0; while(line<3)if(fgetc(fp)=='\n')++line; //jetzt sollte fp auf das erste zeichen der 4.zeile zeigen...
eventuell kann man sowas auch einfach mit fgets basteln wenn man weiss wie lang die längste zeile ist... gibt bestimmt noch massenweise andere möglichkeiten...
Bearbeitung:
äh sorry ist ja php *grins* naja in php gehts bestimmt genauso ist ja relativ c ähnlich
-- ...fleißig wie zwei WeißbroteDieser Post wurde am 16.02.2004 um 21:11 Uhr von Windalf editiert.
gute Idee, weisst du zufällig wie lange so ne Operation wie fgetc dauert. Eine Zeile hat zwíschen 50 und 150 Byte. Wenn ich jetzt 1000 Zeilen vor springen will, ist das dann noch sinnvoll?Dieser Post wurde am 16.02.2004 um 21:33 Uhr von AlfameisterT editiert.
hm ich weiss das leider auch nicht aber ich würde mal vermuten das es sinnvoller ist immer mehrere zeichen in einen buffer zu lesen und dann das array durchzugehen... würde behaupten das ist schneller als die ständigen dateizugriffe...wobei das vermutlich insbesondere davon abhängt wie die funktionen (fread, fgetc usw.) implementiert sind... vermutlich eignet sich fgets hierfür am besten... einfach immer z.b. versuchen 1024 bytes einzulesen.. ist das letzte zeichen kein newline dann ist das zeilenende noch nicht erreicht und so lange weiter fgets verwenden bis das zeilenende erreicht ist und dann den linezähler ein hochsetzen und weiterzählen...
allerdings wenn du was bestimmtes aus eine so langen datei lesen willst hört sich das für mich verdammt nach nem datenbankersatz an... wenns dir da auf performance ankommt bietet sich bei php dann mysql an -- ...fleißig wie zwei Weißbrote