Hej, Läs in rad. Kolla matchning med regex. Enkelt, men snabbast är det kanske inte. Snabbast är att läsa in hela filen i en sträng och söka med regex. <b>>Har aldrig använt det men det borde vara det snabbaste man kan få. </b> Ja jag funderade ju i dom banorna också (regexp). Mitt förslag: http://en.wikipedia.org/wiki/Boyer-Moore_string_search_algorithm Tack för tipsen ska kika på dem vid tillfälle. Glöm inte Compiled flagga för regex om du återanropar ditt regex ofta.Snabbaste sättet att läsa in rader och söka efter strängmönster från fil.
Letar efter det snabbaste (alltid intressant) sättet att i C# läsa in rader från en fil (en loggfil),
och sedan leta efter två strängmönster.
Ett som ska finnas ("<0A><05><0C>"), och ett som inte får finnas ("NONAME").
Det finns ju ett antal till buds stående metoder (som man kan kombinera) för att lösa detta.
Håller på och testar just nu, men är intresserad att se om det finns andra (och snabbare) sätt,
än dom som jag kommer på.
Har ni några ideér?Sv: Snabbaste sättet att läsa in rader och söka efter strängmönster från fil.
Det snabbaste borde ju vara att förbehandla loggfilen genom att indexera den och sen söka i indexet (om man räknar bort förbehandlingstiden förstås.. :).Sv: Snabbaste sättet att läsa in rader och söka efter strängmönster från fil.
Om filen kan vara stor skulle jag använda en regex stream. Finns ingen inbyggd i BCL men googla lite så hittar du nog någon bra (t.ex. http://www.codeguru.com/columns/experts/article.php/c14689)
Om du väljer att istället läsa en rad i taget så tänk på att bara skapa regex:en en gång.
(Regex bygger upp en tillståndsmaskin från mönstret och det är en ganska komplicerad process)
dvs
Regex rx = new Regex("pattern");
for each row in file
Matches = rs.Matches(row);
istället för
for each row in file
Matches = Regex.Matches(row, pattern);
Finns också möjligheten att skapa en special regex-sök-assembly från ditt mönster. Har aldrig använt det men det borde vara det snabbaste man kan få. Sv:Snabbaste sättet att läsa in rader och söka efter strängmönster från fil.
Nja... man ska ha klart för sig att de tillståndsmaskinerna man får ut inte nödvändigtvis är optimala (eftersom en sån optimering är ett np-komplett problem). Det gör att om tillståndsmaskinen blir kass så kan man i teorin tjäna på att skriva en handoptimerad version.Sv:Snabbaste sättet att läsa in rader och söka efter strängmönster från fil.
Tyvärr går det riktigt långsamt (säger inte att jag gör det på bästa sättet, please show the way..).
Martin: det jag letar efter finns i strängen (inte i början).
Det "fina" med att läsa in rad för rad är ju att man får datat paketerat precis som jag vill ha det.
Att läsa in allt i en sträng låter som extra jobb att leta upp start och slut på det jag vill ha.
Just nu är ReadAllLines() kombinerat med två Contains() villkor snabbast.
Har blivit varnad för en stor overhead i appens minnesutrymme med ReadAllLines(). Sv: Snabbaste sättet att läsa in rader och söka efter strängmönster från fil.
1) Öppna filen, ta reda på vilken encoding som används
2) Ta dina två söksträngar, och encoda dem till bytes-arrays enligt encoding ovan
3) Sök binärt. Du sparar in hela decodingen från bytes -> sträng som du inte behöver
Den binära sökningen får du sedan göra själv med lite roliga looparSv: Snabbaste sättet att läsa in rader och söka efter strängmönster från fil.
Sv:Snabbaste sättet att läsa in rader och söka efter strängmönster från fil.
Sv: Snabbaste sättet att läsa in rader och söka efter strängmönster från fil.