Entwickler-Ecke

IO, XML und Registry - Aus Datei einlesen


qwertz123 - Fr 14.12.07 15:03
Titel: Aus Datei einlesen
Hallo,
habe eine Frage:

Gegeben ist eine Textdatei in folgendem Format (als Beispiel):

Autoname: Mercedes Benz
Typ: C Klasse
BinärKürzel: 0110110010

Eingelesen werden soll nicht immer die ganze Zeile (ReadAllLines...), sondern nur Mercedes Benz, C Klasse, und 0110110010 (einmal komplett und einmal dass evtl jede 0 bzw 1 in ein Array oder so geschrieben wird)

Danke


Moderiert von user profile iconChristian S.: Topic aus C# - Die Sprache verschoben am Fr 14.12.2007 um 14:09


Christian S. - Fr 14.12.07 15:11

Hallo und :welcome:!

Mit einem StreamReader kannst Du die Zeilen einzeln einlesen:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
using (StreamReader sr = new StreamReader(@"e:\meineDatei.txt")
{    
    while (!sr.EndOfFile)
    {
        string eineZeile = sr.ReadLine();
    }
}

(ausm Kopf geschrieben, kann also noch Fehler enthalten)

Grüße
Christian


Kha - Fr 14.12.07 15:15

Das geht noch kürzer mit File.ReadAllLines ;) .
Aber die Aufgabe wär ein idealer Fall für Regular Expressions. Kein leichtes Thema, doch das Einarbeiten lohnt sich auf jeden Fall. Ein Tutorial lässt sich z.B. hier [http://www.regenechsen.de/phpwcms/index.php?regex_allg_einf] finden, danach ist der nächste Anlaufpunkt die Regex-Klasse im SDK.


Christian S. - Fr 14.12.07 15:23

user profile iconKhabarakh hat folgendes geschrieben:
Das geht noch kürzer mit File.ReadAllLines ;) .
Nur schrieb er, dass er genau das nicht will :zwinker:


qwertz123 - Fr 14.12.07 15:32

Danke erstmal für die Antworten.
Um es nochmal zu verdeutlichen: Es soll nicht eingelesen werden: Name, Typ, Binärkürzel sondern die "Werte" dahinter


Christian S. - Fr 14.12.07 15:34

Das wird nicht klappen. Du musst die Daten davor lesen, weil Du sonst nicht weißt, wann die Werte anfangen.


qwertz123 - Fr 14.12.07 15:36

wie lese ich die werte eine Zeile einzeln ein?


Christian S. - Fr 14.12.07 15:40

Lies die Zeile ein und kopiere die entsprechenden Stellen heraus:

C#-Quelltext
1:
string autoName = eineZeile.SubString(9); //Bei Index 9 mit Kopieren anfangen                    


Oder per RegEx, ein Tutorial dazu hat Khabarakh verlinkt.


qwertz123 - So 16.12.07 16:27

user profile iconChristian S. hat folgendes geschrieben:
Lies die Zeile ein und kopiere die entsprechenden Stellen heraus:

C#-Quelltext
1:
string autoName = eineZeile.SubString(9); //Bei Index 9 mit Kopieren anfangen                    



Danke, hat mir weitergeholfen.

Leider funktioniert aber Substring nicht bei Arrays. Hab mir gedacht mit dem Befehl "ReadAllLines" die Zeilen in ein Array zu schreiben und Substring auf jede Zeile dann anwenden. Geht aber nicht.

Gibt es noch einen anderen Befehl der evtl so etwas kann?


JüTho - So 16.12.07 17:05

user profile iconqwertz123 hat folgendes geschrieben:
Leider funktioniert aber Substring nicht bei Arrays. Hab mir gedacht mit dem Befehl "ReadAllLines" die Zeilen in ein Array zu schreiben und Substring auf jede Zeile dann anwenden. Geht aber nicht.

Natürlich geht das: Jedes Element des Array ist doch ein string, also funktioniert auch Substring. Beispiel:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
string currentItem;
foreach(string s in myArray) {
  currentItem = s.Substring(9);
}
// oder, wenn die Indizes wichtig sind:
for(int x1 = 0; x1 < myArray.Length; x1++) {
  currentItem = myArray[x1].Substring(9);
}

Natürlich ist Array.Substring() Quatsch, aber String.Substring() ist bei jedem String möglich. Du musst doch sowieso bei jedem Element genau darauf achten, um welchen Typ es sich handelt...

Jürgen


qwertz123 - So 16.12.07 17:30

Zitat:

Natürlich ist Array.Substring() Quatsch, aber String.Substring() ist bei jedem String möglich. Du musst doch sowieso bei jedem Element genau darauf achten, um welchen Typ es sich handelt...

Jürgen


Hey danke. So hatte ich das irgendwie auch, kam nur immer Fehler. War wohl eine Kleinigkeit. Vielen Dank dafür.