SORU
23 EYLÜL 2008, Salı


Bir metin dosyası içinde satır sayısını belirlemek

Program aracılığıyla bir metin dosyası içinde satır sayısını belirlemek için kolay bir yolu var mı?

CEVAP
23 EYLÜL 2008, Salı


Eğer kullanıyorsanız .cidden geç gelen edit: NET 4.0 veya üstü

File sınıf tembel iştahla onları ReadAllLines gibi bir diziye okuma tüm hatlar yerine sıralar ReadLines yeni bir yöntem var. Şimdi her ikisi de etkinlik ve sıkıştırma ile olabilir:

var lineCount = File.ReadLines(@"C:\file.txt").Count();

Orijinal Cevap

Değilse de verimliliği hakkında rahatsız iseniz, sadece yazabilirsiniz:

var lineCount = File.ReadAllLines(@"C:\file.txt").Length;

Daha etkili bir yöntem için yapabileceği:

var lineCount = 0;
using (var reader = File.OpenText(@"C:\file.txt"))
{
    while (reader.ReadLine() != null)
    {
        lineCount  ;
    }
}

Edit: verimlilik . ilgili sorulara yanıt

İkinci daha verimli olduğunu söyledim nedeni bellek kullanımı, ille Hızı ile ilgili. İlk olarak çok az dosya boyutu olarak hafıza tahsis etmek gerekir anlamına gelen bir dizi içine yükler dosyasının tüm içeriğini. İkinci hiç belleğin bir satır değerinden fazla bir zaman ayırmak için sadece bir defada bir satır döngüler. Bu değil, önemli dosyaları için küçük, ama daha büyük dosyalar olabilir bir sorun (eğer denerseniz ve sayısını bul hatlarında 4GB dosya üzerinde bir 32-bit sistem, Örneğin, orada sadece yeterli değil kullanıcı modu adres alanı için tahsis bir dizi bu büyük).

Hız açısından çok fazla olmasını beklemiyorum. ReadAllLines bazı iç optimizasyon olma ihtimali yok, ama diğer taraftan hafızanın büyük bir kısmını ayırmak zorunda olabilir. ReadAllLines küçük dosyalar için daha hızlı, ama büyük dosyalar için önemli ölçüde daha yavaş olabilir; sadece bir Kronometre ya da kod oluşturucu etkisi olacaktır ama tahmin ediyorum.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ionized Digital Air Studios

    Ionized Digi

    20 HAZİRAN 2009
  • mipd1980

    mipd1980

    25 EKİM 2006
  • WestsideMrArO

    WestsideMrAr

    6 EKİM 2010