Daten aus Datei lesen
-
Hallo Leute,
Ich hab ein kleines Problem.
Undzwas möchte ich den Inhalt einer Datei auslesen, und dann von String zu String springen und diese dann jeweils bearbeiten.
Das auslesen mit Streamreader ist kein Problem, aber ich kann leider nur Zeilenweise auslesen.
Bei C++ gab es eine GetToken Funktion.
Ich möchte sowas machen.String1 0 0 0 255 255 255
{
String2
}Wenn ich jetzt GetToken aufrufe, so speichert er String1 in einem Token.
Wenn ich es nochmal aufrufe dann das nächste, in meinem Fall die 0, und immer weiter.
Die Leerzeichen werden also jedes mal übersprungen.Ich hab leider keine Ahnung wie ich sowas in C# realisiere.
-
Naja du koenntest es komplett einlesen und ein Split drauf machen und dann mit einer foreach-Schleife durchiterieren.
-
Das Problem ist, dass wenn ich mehrere Leerzeichen habe er trotzdem welche in einen String array haut:
using (StreamReader sr = new StreamReader("resource.inc")) { while( !sr.EndOfStream ) { String words = sr.ReadLine(); String[] split = words.Split(new Char[] {' '}); foreach (String s in split) { if (s.Contains("//")) break; listBoxControl1.Items.Add(s); } } }
-
Split hat noch eine Überladung, so du StringSplitOptions.RemoveEmptyEntries übergeben kannst.
-
Vielen Dank für eure Hilfen, habe dank euch ne Idee wie ich das anpacke.
Hab aber noch das Problem dass ich in der Datei die ich auslese Kommentare hab die mit // eingeleitet werden.
Wie kann ich diese Zeilen ignorieren ?
-
Mit der StartsWith-Methode von string
-
Die kann ich doch nichtmehr benutzen.
Wenn ich mit ReadToEnd den Inhalt der Datei in einen String lade dann hab ich ja keine Zeilen mehr im String:String words = sr.ReadToEnd(); String[] split = words.Split(new String[] { " ", Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
Hier wird der Inhalt gespeichert, die Zeilen mit den Kommentaren sollen nicht in den String Array.
Ich hab mir gedacht dass ich einfach jede Zeile abfrage und ReadLine verwende und bei einem "//" breake, aber ich wüsste dann nicht wie ich alles in einen Array bekomme.
-
Warum verwendest du denn jetzt auf einmal ReadToEnd? Dein obiger Code mit ReadLine war doch schon fast richtig... (wenn du die StringSplitOptions verwendest).
Und dann könntest du (vor oder nach dem Split) auf "//" abfragen.
-
Wenn du sowieso ReadToEnd benutzt,kannst du auch File.ReadAllText benutzen.
string datei_inhalt = File.ReadAllText(datei_pfad); string[] lines = datei_inhalt.Split(new string[]{Environment.NewLine },StringSplitOptions.RemoveEmptyEntries)); List<string> woerter = new List<string>(); foreach(string line in lines) { int pos = line.IndexOf(@"\\"); string line_without_comment = line; if(pos >= 0) { line_without_comment = line.SubString(0,pos); } if(!string.IsNullOrEmpty(line_without_comment)) { woerter.AddRange(line_without_comment.Split(new string[]{" "},StringSplitOptions.RemoveEmptyEntries); } }