29 Aralık 2008, PAZARTESİ
Çok büyük bir metin dosyası son 10 satır olsun&; gt 10 GB c#
Ne çok büyük bir metin dosyası son 10 satır (bu özel dosya 10 GB bitti) ekran için en etkili yoldur. Sadece basit bir c yazmayı düşünüyordum# app ama bu etkili nasıl emin değilim.
Teşekkürler!
CEVAP
29 Aralık 2008, PAZARTESİ
On yeni satır bulun ve sonra ileri uçta dikkate alarak çeşitli kodlamalar için okumak kadar dosyayı sonuna kadar oku, geri aln. Dosyadaki satır sayısı en az on durumlarda işlemek için emin olun. Aşağıda bir uygulama (C# olarak etiketlemiş bu), genelleştirilmiş bulmak için son numberOfTokens
dosyasında yer alan path
kodlu encoding
token ayırıcı tarafından temsil edilir tokenSeparator
; sonuç olarak döndürülür string
(Bu olabilir tarafından geliştirilmiş dönen bir IEnumerable<string>
o sıralar belirteçleri).
public static string ReadEndTokens(string path, Int64 numberOfTokens, Encoding encoding, string tokenSeparator) {
int sizeOfChar = encoding.GetByteCount("\n");
byte[] buffer = encoding.GetBytes(tokenSeparator);
using (FileStream fs = new FileStream(path, FileMode.Open)) {
Int64 tokenCount = 0;
Int64 endPosition = fs.Length / sizeOfChar;
for (Int64 position = sizeOfChar; position < endPosition; position = sizeOfChar) {
fs.Seek(-position, SeekOrigin.End);
fs.Read(buffer, 0, buffer.Length);
if (encoding.GetString(buffer) == tokenSeparator) {
tokenCount ;
if (tokenCount == numberOfTokens) {
byte[] returnBuffer = new byte[fs.Length - fs.Position];
fs.Read(returnBuffer, 0, returnBuffer.Length);
return encoding.GetString(returnBuffer);
}
}
}
// handle case where number of tokens in file is less than numberOfTokens
fs.Seek(0, SeekOrigin.Begin);
buffer = new byte[fs.Length];
fs.Read(buffer, 0, buffer.Length);
return encoding.GetString(buffer);
}
}
Bunu Paylaş:
Nasıl hat Java kullanarak büyük metin ...
Büyük bir Metin Dosyası Bölmek için ko...
Bir metin dosyası içinde satır sayısın...
Sil belirli bir satır numarası(ler) bi...
'okumak için en hızlı yol ne bir ...