Crowz Geschrieben 21. August 2009 Teilen Geschrieben 21. August 2009 Hallo alle miteinander, :new ich habe ein kleines problem mit fopen und fgets. Ich möchte in meinem php skript eine textdatei zeilenweise einlesen. Dies kann man logischerweise mit fopen (um die datei zu öffnen) und fgets (für zeilenweise auslese der datei). Dies gelingt mir aber nur zum teil. Hier ein Bsp: Folgende textdatei. Zeile 1 bzw. 0?: test Zeile 2: test2 Zeile 3: test3 Zeile 4: test4 Zeile 5: test5 Ich schaffe es mit dem unten geschrieben php code die erste zeile auszulesen, wenn ich jedoch die werte verändere bekomme ich nicht die andere gewollte zeile. Also ich schaffe es nicht zeile 2 oder 5 auszulesen aus welchem grund auch immer. Hier der php code: <?PHP $buffer = fgets($Username); echo $buffer; // hier kann man hinter der variable $buffer ein komma setzen und hinter dieses kommata ein wert wie 4096 hineinsetzten. // fclose ($Username); ?> [/PHP] Naja hoffe ihr versteht mein problem und könnt mir helfen...... ich glaube es liegt daran das man nicht die genaue Zeile ausgeben kann sondern nur die bits aber kp^^ need einfach help :confused: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
carstenj Geschrieben 21. August 2009 Teilen Geschrieben 21. August 2009 Hi, wenn du welchen Wert veränderst? Wenn du die gesamte Datei auslesen möchtest, hilft dir die Doku schon ganz gut weiter: PHP: fgets - Manual Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Crowz Geschrieben 21. August 2009 Autor Teilen Geschrieben 21. August 2009 hey, erstmal danke für die antwort. Ich möchte nciht die ganze datei auslesen sondern nur einzelne zeilen. in der doku schreiben sie hinter buffer den wert 4096, ich weiß es nciht mehr genau. Wenn man diesen wert angibt bekommt man die erste zeile. Wenn man diesen wert allerding weglässt bekommt man auch die erste Zeile was ja schwachsinn ist ^.- Meine frage ist ja, wie muss ich diesen Wert (4096) verändern das nicht die erste zeile angezeigt wird sondern z.b die 3te oder 5te. Den wert schreibt man direckt hinter: $ver = 'data.txt'; $buffer = fopen ( $ver, 'r' ); $zahl = fgets ( $buffer, hier muss ein wert eingetragen werden wie bsp: 4096) ); fclose ( $buffer ); $zahl++; echo $zahl; [/PHP] Gruß Crowz Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
carstenj Geschrieben 21. August 2009 Teilen Geschrieben 21. August 2009 Hi, dann musst du alles einlesen und in ein Array schreiben, was du hinterher entsprechend auslesen kannst: <?php $i=0; $handle = @fopen("/tmp/inputfile.txt", "r"); if ($handle) { while (!feof($handle)) { $buffer[$i] = fgets($handle, 4096); $i++; } fclose($handle); } // Gibt Zeile 6 aus, weil das Array bei 0 anfängt... echo $buffer[5]; ?>[/PHP] Wenn man diesen wert allerding weglässt bekommt man auch die erste Zeile was ja schwachsinn ist ^.- Ob du beurteilen kannst, dass das Schwachsinn ist, lass ich mal im Raum stehen. Warum das so ist, hättest du gewusst, wenn du den entsprechenden Text gelesen hättest. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Crowz Geschrieben 21. August 2009 Autor Teilen Geschrieben 21. August 2009 Ob du beurteilen kannst, dass das Schwachsinn ist, lass ich mal im Raum stehen. Warum das so ist, hättest du gewusst, wenn du den entsprechenden Text gelesen hättest. warum ist es denn dann so? Gbit doch keinen sinn wenn man 4096 als wert angibt und das gleiche ergebniss bringt wie 0?! TROTZDEM vielen dank für deine Hilfe denke ich bekomme das jetzt hin schreibe es aber nochmal mit dem richtigen code wenn es klappt =) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Crowz Geschrieben 21. August 2009 Autor Teilen Geschrieben 21. August 2009 Soooooooo, also klappt jetzt alles super Vielen Dank so sollte es sein Der code war perfekt nur den array wert ändern um spezifisch die Zeilen auszulesen. Danke Carsten :uli Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
carstenj Geschrieben 21. August 2009 Teilen Geschrieben 21. August 2009 Hi, wenn du keinen Wert angibst, wird 1024 angenommen, was heisst, dass nur bis zu 1024 Zeichen eingelesen werden. Es könnte jetzt aber sein, dass du nur 3 Bytes lesen möchtest, dann gibst du eine 3 an. Nur weil das in einem Fall nicht zum Tragen kommt, kann es durchaus Szenarien geben, in denen das sinnvoll ist. In einer Schleife wie der oben kommt merkt man das natürlich auch nicht, weil die läuft, bis das Dateiende erreicht ist. Natürlich liest sie pro Durchlauf immer entweder die Anzahl der angegeben Bytes auf einmal, oder eben 1024 ein. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.