2011-10-10 4 views
6

Geniş bir dosyam var, 100.000 satır. Her satırı okuyabiliyorum ve işleyebilirim veya çizgileri bir dizide saklayabilirim ve sonra işleyebilirim. Ekstra özellikler için diziyi kullanmayı tercih ederim, ancak bir dizide çok sayıda satırın saklanmasıyla ilişkili bellek kullanımı ve buna değecek bir şey varsa gerçekten endişeliyim.Büyük bir dosya satırını satır halinde okuma veya satırlarını dizide saklama

+1

Eğer sadece bir kez yapmanız gerekiyor mu, yoksa çok sayıda eşzamanlı web kullanıcılarının bu eylemi tetikleyen edilecek? Ve eğer çok ise, neden dosyanın içeriğini bir veritabanına saklamıyorsunuz? –

+0

Metin satırlarına (bir yineleyici) dizi benzeri erişim elde etmek için 'SplFileObject' kullanabilirsiniz. – mario

+0

Muhtemelen probleminize daha iyi bir yaklaşım bulamadınız. Nadiren, 100 000 satırının aynı anda * aynı anda * belleğe sahip olması gerekir. Bunu yapmanın başka yollarını düşünün, mevcut planınızla performans sorunlarınız olacak. – Incognito

cevap

3

sen tanımak gereken iki işlevi vardır.

ilk

bir dizi elemanı olarak her bir hat ile, bir diziye bütün bir dosyasını okur file() vardır. Bu kısa dosyalar için iyidir ve muhtemelen 100k satırlık bir dosyada kullanmak istediğiniz şey değildir. Bu işlev kendi dosya yönetimini ele alır, bu nedenle dosyayı kendiniz açmanız ve kapatmanız gerekmez.

ikinci bir seferde bir dosya bir satır okumak için kullanabileceğiniz fgets() vardır. Bunu işlemek için daha fazla çizgi olduğu sürece döngü yapmak ve döngü içinde satır işlemlerinizi yürütmek için kullanabilirsiniz. Bu dosyada bir tanıtıcı elde etmek için fopen() kullanmanız gerekecek, dosya yönetimini kurtarma yönetimi için kendiniz izlemek isteyebilirsiniz (yani, bir şeyler yana doğru giderse ve komut başarısız olursa sıfırdan işlemeyi yeniden başlatmanız gerekmeyecek),

vb

Umarım bu başlangıç ​​için yeterli.

1

Nasıl ikisinin bir kombinasyonu hakkında? Bir diziye 1000 satırı okuyun, işleyin, diziyi silin, daha sonra 1000 tane daha okuyun, vb. Bellek kullanımını izleyin ve bir seferde bir diziye kaç tane okuduğunuzu ayarlayın.

İlgili konular