i’m having trouble searching a virtual listview in c#.
what i am doing right now is reading a large log file. here is what i have implemented so far
I read the file one line at a time and note the position of the start of the line. Add these positions to a List and when RetrieveVirtualItem is called – look up the position in the file using the index of the item and the List and then read the line from file.
So there is no lag when reading the file.
I want to now search for items. Here is what I have thought of so far, but I have not been able to implement it successfully.
I am not actually searching the listview, but during my filereading, i mark the position of hits of the specific string, say “INFO”. if it hits, i add the position to a List.
When RetrieveVirtualItem is called, I just read the line back with all the hits.
Seems that through debugging – if (line.IndexOf("INFO", StringComparison.OrdinalIgnoreCase) >= 0) is not hitting any matches. I’m not sure why, anyone help?
using (var sr = new myStreamReader("test.log"))
{
while ((line = sr.ReadLine()) != null)
{
if (line.IndexOf("INFO", StringComparison.OrdinalIgnoreCase) >= 0)
{
position = sr.BytesRead;
Search.Add(position);
searchcount++;
}
}
newMessageView.VirtualListSize = searchcount;
}
I don’t know how your “myScreamReader” class works, but if it similar to StreamReader this code could be working for you:
You should debug your code by setting a breakpoint at line.IndexOf… check to see if value of line is changing and look correct.