php dosyası rasgele erişim ve tasarruf dosya nesne

0 Cevap php

Ben first field üzerinde sıralanmış kayıtları ile bir csv dosyası var. Ben dosya üzerinden rasgele erişim için fseek kullanarak o dosya üzerinden ikili arama yapan bir işlev oluşturmak başardı.

Ben bazı dosya konumunu aramak zaman, ben aslında characted \ n arıyor, sola bakmak gerekir, bu yüzden emin bir bütün çizgi (bir kez bütün çizgi okunan okuyorum yapabilir Ancak, bu, yine de oldukça yavaş bir süreçtir Yukarıda bahsettiğim ilk alan değeri) için kontrol edebilirsiniz.

İşte pozisyonda karakteri içeren bir satır döndüren işlevdir x:


function fgetLineContaining( $fh, $x ) {
        if( $x  125145411) // 12514511 is the last pos in my file
            return "";
        // now go as much left as possible, until newline is found
        // or beginning of the file
        while( $x > 0 && $c != "\n" && $c != "\r") {
            fseek($fh, $x);
            $x--; // go left in the file
            $c =  fgetc( $fh );
        }
        $x+=2; // skip newline char
        fseek( $fh, $x );
        return fgets( $fh, 1024 ); // return the line from the beginning until \n
    }

Beklendiği gibi bu çalışırken, benim csv dosyası ~ 1.5 mil hatları vardır üzgün zorunda ve bu sola istiyor yavaşlatan oldukça fazla aşağı incelir.

Bir dosya içinde pozisyon x içeren bir satır aramak için daha iyi bir yolu var mı?

Ayrıca, böylece bir dosya nesne-by-nesne okuma sağlayan, bir sınıfın bir nesne seri hale olmadan bir dosyaya kaydedilir olabilir eğer çok daha iyi olurdu. Php bu destekliyor mu?

Teşekkürler

0 Cevap