[C#]String Zeilenweise untersuchen

01/17/2013 00:22 itelligence#1
Ich lese einen quelltext ein welcher zb so aussieht:
Code:
123
asdfg
432312
423132
Habe den Quelltext ausgelesen und in einem String gespeichert.

Wie kann ich jetzt überprüfen ob die Zeile asdfg beinhaltet, bzw übereinstimmt?
Ohne die Datei temporär zu speichern!
01/17/2013 00:41 nkkk#2
ist wirklich nicht schwer:
Code:
string filecontent;
var enthält_die_zeile = System.Text.RegularExpressions.Regex.Split(filecontent, "\r\n|\r|\n").Any(s => s == "die_gesuchte_zeile");
var enthält_eine_zeile_die_damit_anfängt = System.Text.RegularExpressions.Regex.Split(filecontent, "\r\n|\r|\n").Any(s => s.StartsWith("der_gesuchte_anfang"));
einfacher ist es aber wenn du datei nicht als String sondern mit File.ReadAllLines ausliest, dann brauchst du das regex split nichtmehr.
01/17/2013 01:31 tolio#3
ich würd das normale .net split nehmen voralle wenn regex im projekt sonst nicht genutzt wird; das ganze also in nen array rein und durch loopen, so können dann auch mehrere ergebnisse verarbeitet werden
01/17/2013 02:39 vwap#4
Code:
foreach (string line in lines.Split('\n')) if (line.StartsWith("blabla")) return line;
01/17/2013 14:10 nkkk#5
Quote:
Originally Posted by tolio View Post
ich würd das normale .net split nehmen voralle wenn regex im projekt sonst nicht genutzt wird; das ganze also in nen array rein und durch loopen, so können dann auch mehrere ergebnisse verarbeitet werden
das geht mit der anderen methode auch wenn es any nicht tut. nimmt man eben where oder ähnliches.
Quote:
Originally Posted by Headpuster View Post
Code:
foreach (string line in lines.Split('\n')) if (line.StartsWith("blabla")) return line;
funktioniert nicht, da '\n' im alllgemeinen nicht das newline seperator ist
01/17/2013 16:38 vwap#6
Habs getestet, funktioniert - zumindest auf Windows.
01/17/2013 17:46 nkkk#7
Quote:
Originally Posted by Headpuster View Post
Habs getestet, funktioniert - zumindest auf Windows.
vieleicht war die zeile die du suchtest gerade die letzte zeile? ansonsten gibt deine Methode wenn man eine datei die z.B. mit notepad erstellt wurde die zeile mit einem '\r' char am Ende zurück.
Datei
Code:
aa
bb
cc
dann gibt
Code:
foreach (string line in lines.Split('\n')) if (line.StartsWith("b")) return line;
"bb\r" zurück
01/17/2013 19:01 tolio#8
manchmal ist es notwendig erst einfach alle crs zu löschen dann kann bedenkenlos am lf gesplittet werden und man hat auch wieder alle zeilen

ich denke viele der hier genannten methoden funktionieren, jedoch bin ich nach wie vor fan vom klassischen split und dem file.readalllines, kommt auf das szenario an, einfach aus dem grund ,dass ich hatte noch nie einen fall hatte bei dem das nicht funktioniert hat