Bu teğet an earlier question of mine.Bir dosyayı normal bir ifade kullanarak okuyun.
ilişkilidir Esasen, bu söz konusu çözüm harika çalıştı, ancak şimdi çok daha büyük bir analizi uygulamasında çalışacak şekilde adapte gerekir. Sadece StreamReader.ReadToEnd()
'u kullanmak kabul edilemez, çünkü okuyacağım bazı dosyalar çok, çok büyük. Bir hata olsaydı ve biri temizlemek istemediyse, teorik olarak gigabaytlar büyük olabilir. Açıkçası, bunun sonuna kadar okuyamıyorum.
Ne yazık ki, normal okuma satırları da kabul edilemez, çünkü okuduğum veri satırlarının bir kısmı yığın izleri içerdiğinden, bunların biçimlendirilmesinde açıkça /r/n
kullanıyorlar. İdeal olarak, programın bir regex için eşleşene kadar ileri okumasını söylerim, o zaman geri döner. Bunu .net'de yapmak için herhangi bir işlevsellik var mı? Eğer değilse, yazmayı düşündüğüm için bazı önerilerde bulunabilir miyim?
Düzenleme: biraz daha kolay sorumu takip hale getirmek için, burada adapte kodun önemli parçalarından bazılarının bir macun var:
foreach (var fileString in logpath.Select(log => new StreamReader(log)).Select(fileStream => fileStream.ReadToEnd()))
{
const string junkPattern = @"\[(?<junk>[0-9]*)\] \((?<userid>.{0,32})\)";
const string severityPattern = @"INFO|ERROR|FATAL";
const string datePattern = "^(?=[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2},[0-9]{3})";
var records = Regex.Split(fileString, datePattern, RegexOptions.Multiline);
foreach (var record in records.Where(x => string.IsNullOrEmpty(x) == false))
......
sorun forEach yatıyor. .Select(fileStream => fileStream.ReadToEnd())
hafızayı kötü bir şekilde patlatacak, sadece biliyorum. derleyici sizin için yapacak, ama bu sadece daha iyi kod okunabilmesi için, kendiniz yapılmalıdır -
Ve işte bu gibi görevler için RegEx'i kullanmayı umursamamanın başlıca nedenlerinden biri var. Basit bir ayrıştırıcı yazdıysanız, yeni satırları işlemek için basitçe uyarlayabilirsiniz. –
@JonathanWood Tüm kayıtlara sahip olduktan sonra regex'ler tek tek kayıtları ayrıştırmak için harika. Sadece ihtiyacım olan tüm bilgileri dışarı çıkarıyorum ve doğrudan ilgili alanlara gider. Sorun, bu durumda dosya girdisidir, sadece sahip olduğum dosya ile tek bir kayıt verebilecek kadar esnek değil gibi görünüyor. Ama bu sahte görünüyor, değil mi? Bu nadir bir sorun olamaz. – tmesser
Yani yığın izi/r/n. Bu neden okuma çizgisini ortadan kaldırıyor? – Paparazzi