Daha kesin bir sorun bildirimi olmadan, istediğiniz çıktıyı bilmek mümkün değildir. Yukarıda bir window
koleksiyonunu korur: (tarayıcı okunur Yukarıdaki kod yazım hataları ve diğer oversights affet uyarı..)
using (StreamReader sr = new StreamReader("c:/temp/ESMDLOG.csv"))
{
bool printWindow = false;
Queue<string> window = new Queue<string>();
string currentLine;
// currentLine will be null when the StreamReader reaches the end of file
while((currentLine = sr.ReadLine()) != null)
{
bool nextPrintWindow = false
// Search, case insensitive, if the currentLine contains the searched keyword
if(currentLine.IndexOf("I/RPTGEN", StringComparison.CurrentCultureIgnoreCase) >= 0)
{
nextPrintWindow = true;
}
if (window.Count >= 3)
{
window.Dequeue();
}
window.Enqueue(currentLine);
if (printWindow)
{
Console.WriteLine(string.Join(Environment.NewLine, window));
}
printWindow = nextPrintWindow;
}
}
: Ama aşağıdaki gibi bir şey şimdiye kadar kısıtlı olarak hedefe buluşacak Örneğin, mevcut satırın yerleştirilmesiyle dosyadaki metnin üç satırlı bir "penceresi" ve toplama üç öğe sayısına ulaşırsa en eski çizgiyi deşarj etme.
Aynı zamanda, sonraki satırı okuduktan sonra pencerenin içeriğinin yazdırılıp yazdırılmayacağını belirten bir bayrak korur. Bu bayrak true
olarak ayarlanmışsa, window
koleksiyonundaki satırları satırsonu karakterleriyle birleştirir ve her şeyi yazdırır.
Bu şekilde, geçerli satır eşleşme ölçütlerinizi karşılarsa, önceki ve sonraki satırlarla birlikte geçerli satır yazdırılır.
Yukarıdakilerin her eşleşme için üç satırlı pencereleri yazdıracağını unutmayın. Örneğin ardışık çizgiler eşleşme kriterlerini karşılarsa, hatlar birden fazla kez (farklı üç satırlı grupların bir parçası olarak) yazdırılabilir. Alternatif bir uygulama, ardışık çizgiler eşleşme ölçütlerini karşılarsa pencerenin üç öğenin ötesine geçmesine izin verir, pencereyi yalnızca eşleşme ölçütlerini karşılamayan bir satır okunduğunda yazdırılır (ve yeniden başlatılır). Başka bir alternatif, pencereyi yazdırmadan önce, yani eşleşme olmayan çizgilerin bile yalnızca bir kez basıldığından emin olmak istiyorsanız, iki eşleşmeyen çizgileri gerektirebilir.
Bu varyasyonu okuyucu için bir egzersiz olarak bırakıyorum. Yukarıdakilerden çok farklı olmayacaklar, pencerenin bakımındaki küçük değişiklikler ve bayrak değişkenlerinde kapsanan zımni durum makinesinin yönetimi.
bunu çalıştı;) – tedder84