Avatar billede sesam Nybegynder
19. juni 2003 - 15:32 Der er 20 kommentarer og
2 løsninger

Læse file med fread indtil ; forekommer?

Jeg læser en fil med dette:
<?php
$log_file = "tekst.txt";
$fp = fopen($log_file, "r");
        while (!feof ($fp)) {
    $data = fread ($fp, 255);
    echo $data;
    }
fclose ($fp);
?>
Jeg vil gerne ha koden til at læse fra filen indtil ; tegnet forekommer første gang...

Er sprg. forstået?
Avatar billede sesam Nybegynder
19. juni 2003 - 15:55 #1
kan det ikke lade sig gøre?
Avatar billede 2-maz Nybegynder
19. juni 2003 - 16:04 #2
<?php
$log_file = "tekst.txt";
$fp = fopen($log_file, "r");
    while (!feof ($fp)) {
    $data = fread ($fp, 255);
    echo $data;
    if(strpos($data, ";")) { exit while; }
    }
fclose ($fp);
?>

ved ikke om det virker
Avatar billede 2-maz Nybegynder
19. juni 2003 - 16:06 #3
<?php
$log_file = "tekst.txt";
$fp = fopen($log_file, "r");
    while (!feof ($fp)) {
    $data = fread ($fp, 255);
    echo $data;
    if(strpos($data, ";")) { break; }
    }
fclose ($fp);
?>
Avatar billede sesam Nybegynder
19. juni 2003 - 16:09 #4
Læser stadigvæk videre altså alle 255 karatere...
Avatar billede jakoba Nybegynder
19. juni 2003 - 16:14 #5
det her er et af de steder hvor et objekt kan være nyttigt.

<?php
class LaesFil {
    var $fildata;

    function LaesFil( $filnavn ) {  // indlæser filen til $fildata.
        if ( file_exists( $filnavn ) ) {
            $this->fildata = file_get_contents( $filnavn )
        } else {
            $this->fildata = "";
            // måske en fejlmelding istedetfor
        }
    } //end conscructor

    function cread( $endtoken ) {
        $temp = strstr( $this->fildata, $endtoken );
        if ( $temp === false ) {  // ikke flere forekomster. laes resten
            $res = $this->fildata;
            $this->fildata = "";
        } else {
            res = substr( $this->fildata, 0, $temp );
            $this->fildata = substr( $this->fildata, $temp+strlen($endtoken);
        }
        return $res;
    } //end cread

    function ceof( ) {
        return ( $this->fildata == "" );
    } //end ceof

} //endclass LaesFil

// den klassse kan du så bruge til at læse på den nåde du ønsker:

$fil = new LaesFil( "filduvillaese.txt" );

while ( ! $fil->ceof() ) {
    $stump = $fil->cread(";");  // laes indtil næste semikolon
    echo "<p>\$stump indeholder: " .$stump;
}

?>

egentlig indlæser vi alle fildata med det samme, men de er gemt af vejen i klassen så den nye cread funktion kan føles somom vi 'læser hen ad vejen' med en almindelig læs_fra_fil funktion.

mvh JakobA
Avatar billede jakoba Nybegynder
19. juni 2003 - 16:20 #6
der er fejl i begge linier i else delen af cread. der skal stå:
            $res = substr( $this->fildata, 0, $temp );        // $ indsat forrest
            $this->fildata = substr( $this->fildata, $temp+strlen($endtoken) ); // ) tilføjet forenden
Avatar billede sesam Nybegynder
19. juni 2003 - 16:20 #7
Får en parse error i denne linie: $this->fildata = substr( $this->fildata, $temp+strlen($endtoken);
Avatar billede sesam Nybegynder
19. juni 2003 - 16:22 #8
Nu får jeg fejl i denne: $this->fildata = file_get_contents( $filnavn );

Call to undefined function: file_get_contents()
Avatar billede jakoba Nybegynder
19. juni 2003 - 16:23 #9
det var de der rettelser :)
Avatar billede sesam Nybegynder
19. juni 2003 - 16:24 #10
Hvad med den nye fejl?
Avatar billede jakoba Nybegynder
19. juni 2003 - 16:28 #11
fejl med file_get_contents er vist at din php version er lovlig gammel, det gør ikke noget. vi ændrer bare linien
            $this->fildata = file_get_contents( $filnavn );
til 3 linier:
            $fp = fopen( $filnavn, "r" );
            $this->fildata = fread ( $fp, filesize($filenavn) );
            fclose( $fp );

mvh JakobA
Avatar billede jakoba Nybegynder
19. juni 2003 - 16:30 #12
Ups igen, stavede $filnavn galt i linien
            $this->fildata = fread ( $fp, filesize($filnavn) );
Avatar billede rosvall Nybegynder
19. juni 2003 - 16:31 #13
Kan det her ikke bruges:

$log_file = "tekst.txt";
$fp = fopen($log_file, "r");
    while (!feof($fp) && $date != ";") {
        $data = fread ($fp, 1);
        echo $data;
    }
fclose ($fp);
Avatar billede rosvall Nybegynder
19. juni 2003 - 16:32 #14
der var vist lige en typo, ret lige $date til $data
Avatar billede jakoba Nybegynder
19. juni 2003 - 16:33 #15
ihvertfald noget nemmere :-))
Avatar billede rosvall Nybegynder
19. juni 2003 - 16:34 #16
jaa :)
Avatar billede sesam Nybegynder
19. juni 2003 - 16:36 #17
rosvall: hvordan lopper jeg hele dokumentet igennem?
Avatar billede rosvall Nybegynder
19. juni 2003 - 16:41 #18
?
Avatar billede sesam Nybegynder
19. juni 2003 - 16:44 #19
Det jeg mener er først skrive tekst1 ud der afsluttes med et ; dernæst gå videre og skrive tekst2 ud der afsluttes med et ; osv...

.o)
Avatar billede rosvall Nybegynder
19. juni 2003 - 16:48 #20
$fil = fopen("fil.txt", r);
$indhold = fread($fil, 1000000);
fclose($fil);
$stykker = split(";", $indhold);

Så har du at array...
Avatar billede sesam Nybegynder
19. juni 2003 - 16:53 #21
rosvall og Jakoba tak for hjælpen, hvis Rosvall smider et svar splitter i point'ne
Avatar billede rosvall Nybegynder
19. juni 2003 - 17:07 #22
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester