Theodorl Skrevet 22. oktober 2008 Del Skrevet 22. oktober 2008 Hei! Jeg har en vanlig .txt fil med en del info.. Jeg ønsker å lese filen fra linje (f.eks) 5 til 20. How to do this? Lenke til kommentar
BlueEAGLE Skrevet 22. oktober 2008 Del Skrevet 22. oktober 2008 Litt avhengig av hvor stor filen er totalt sett. Hvis den ikke er mer en en 40-50 linjer så ville jeg brukt file() og array_slice(). Alternativet er fopen() og så lese med fgets() og kaste bort de 5 første linjene og da lese inn og ta vare på de neste 15. Det er mer kode men bruker mindre minne. Lenke til kommentar
Jonhoo Skrevet 29. oktober 2008 Del Skrevet 29. oktober 2008 (endret) Dette er utestet kode, men tror det skal fungere...: <?php /** * Tar med de $length neste linjene fra og med $start fra filen $file */ function readLines ( $file, $start, $length = false ) { $fh = fopen($file, 'r'); $lines = array(); $lineNum = 0; while ( !feof( $fh ) ) { if ( ++$lineNum >= $start && ( $length === false || count( $lines ) < $length ) { $line = ""; do { $char = freadc( $fh ); if ( $char == "\r" && fpeek ( $fh ) == "\n" ) { // Windows har linjeendinger som er to tegn, vi stripper derfor vekk neste char freadc ( $fh ); break; } else if ( in_array ( $char, array ( "\r", "\n" ) ) { break; } else { $line .= $char; } } $lines[] = $line; } } return $lines; } function fpeek ( &$fh ) { $curpos = ftell ( $fh ); if ( feof ( $fh ) ) { return false; } $char = fgetc ( $fh ); fseek ( $fh, $curpos ); return $char; } ?> Endret 29. oktober 2008 av Jonhoo Lenke til kommentar
BlueEAGLE Skrevet 12. november 2008 Del Skrevet 12. november 2008 Dette er utestet kode, men tror det skal fungere...: Lær en mann å fiske... Men her er også utestet (og et par linjer færre) kode. <?php function ReadLines($filename, $start, $length=false) { $file_array = file($filename); if($length!=false) { $end=sizeof($file_array); } else { $end=$start+$length; } $extract = array_slice($file_array, $start, $end); return($extract); } ?> Alternativt med fopen <?php function ReadLines($filename, $start, $length=false) { $file_handle = fopen($filename, 'r') if(!file_handle) { return(false) } for($cnt=0; $cnt<$start) { fgets($file_handle); } if($length==false) { while(!feof($file_handle)) { $lines[]=fgets($file_handle); } } else { $for($cnt=0; $cnt<$length; $cnt++) { if(!feof($file_handle)) { $lines[]=fgets($file_handle) } } } return($lines); } ?> Det kan være at fgetc() er mer binær eller tråd-sikker enn fgets og at det er derfor du valgte den. Lenke til kommentar
Jonhoo Skrevet 14. november 2008 Del Skrevet 14. november 2008 Greia var at han ikke ville lese inn hele filen tror jeg, så da er array_splice ikke noe å gå for.. Husker ikke helt hvorfor jeg brukte fgetc istedenfor fgets, men fgets er jo antageligvis en bedre løsning ( pluss at det blir mye mindre kode ^^ ) =) Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå