PHP ile büyük bir dosyada bir satır Başlarken

4 Cevap

Nasıl bir 3 konser metin dosyasındaki belirli bir hat alabilirsiniz. Satırları \ n tarafından sınırlandırılır. Ve ben talep üzerine herhangi bir hat almak için gerekiyor.

Bu nasıl yapılabilir? Sadece bir satır iade gerekmez. Ve ben herhangi bir sistem çağrıları kullanmak istemem.

Not: bash bunu nasıl ilgili başka bir yerde aynı soru var. Ben PHP eşdeğeri ile karşılaştırmak istiyorum.

Update: Her satırı aynı uzunlukta aracılığıyla bütün yoludur.

4 Cevap

Eğer \ n karakteri x sayısını Karşılaştığınız kadar dosyaya endeksi çeşit tutmak olmadan, hepsini okumak gerekir. Ben nickf sadece yapmanın bir yolunu gönderdi görüyoruz, bunu tekrarlamak değil.

Verimli bir şekilde tekrar tekrar bunu yapmak için, bir dizin oluşturmak gerekir. Eğer kullanarak doğru yere aramak için kullanabileceğiniz bir kez bazı (veya tüm) satır numaraları için bazı bilinen dosya konumlarını Mağaza fseek.

Edit: her satırı aynı uzunlukta ise, indeks gerekmez.

$myfile = fopen($fileName, "r");
fseek($myfile, $lineLength * $lineNumber);
$line = fgets($myfile);
fclose($myfile);

Satır numarası bu örnekte merkezli 0 olduğunu, bu nedenle ilk bir çıkarma gerekebilir. Hat uzunluğu \n karakteri içerir.

Her satır aynı uzunluğa sahiptir, bu nedenle hızlı bir hat almak için fopen () fseek ile birlikte () kullanabilirsiniz.

http://ch2.php.net/manual/en/function.fseek.php

Bunu yapmak için aklınıza tek yolu bu gibi olurdu:

function getLine($fileName, $num) {
    $fh = fopen($fileName, 'r');

    for ($i = 0; $i < $num && ($line = fgets($fh)); ++$i);

    return $line;
}