Laden...

Textdatei auslesen und bestimmte Zeilen daraus ermitteln

Erstellt von Chronisch vor 11 Jahren Letzter Beitrag vor 11 Jahren 5.908 Views
Thema geschlossen
C
Chronisch Themenstarter:in
7 Beiträge seit 2012
vor 11 Jahren
Textdatei auslesen und bestimmte Zeilen daraus ermitteln

Hey Leute, arbeite mich gerade in C-Sharp ein und habe jetzt mal eine Frage.

Ich erstelle eine Text Datei, in der alle relevanten Daten gespeichert werden, diese wird später hochgeladen und kann wieder runtergeladen werden. Soweit funktioniert alles.
Jetzt möchte ich aber, ein Suchfeld, wo der User ein Stichwort eingeben kann.
Dieses Stichwort soll dann gesucht werden in der Text Datei.
Auch das Funktioniert.

Kurz zum Aufbau meiner Datei:

Name,Vorname,Strasse,Hausnummer,Postleitzahl,Ort
Name,Vorname,Strasse,Hausnummer,Postleitzahl,Ort
Name,Vorname,Strasse,Hausnummer,Postleitzahl,Ort
Name,Vorname,Strasse,Hausnummer,Postleitzahl,Ort

Jetzt kann man ja nach einen Namen oder Vornamen oder was auch immer suchen.
Wie gesagt, dass funktioniert, allerdings sollen jetzt die ganzen Daten zum zugehörigen Treffer ausgegeben werden, Bsp:
Suche Meier->Treffer> Meier Walter Strasse.....

Wie bekomme ich es hin, dass die komplette Zeile ausgegeben wird.

F
174 Beiträge seit 2007
vor 11 Jahren

Hallo,

du könntest Zeile für Zeile auslesen und bei einem Treffer dann die komplette Zeile ausgeben. Oder du arbeitest mit regulären Ausdrücken. Hier ist ein Tutorial dazu:

Regex-Tutorial

Gruß,
felix

C
Chronisch Themenstarter:in
7 Beiträge seit 2012
vor 11 Jahren

Genau das ist der Part für den ich keine Lösung parat habe.
Zeile für Zeile auslesen mache ich schon, den Treffer finden klappt auch.
Nur wie gebe ich die Zeile, in der sich der Treffer befindet, nun komplett aus?

F
174 Beiträge seit 2007
vor 11 Jahren

Naja ... wenn du jede Zeilen einzeln ausließt (und auf eine Variable speichers), dann sollte es doch kein Problem sein, diese auszugeben, oder?

C
Chronisch Themenstarter:in
7 Beiträge seit 2012
vor 11 Jahren

Problem ist, dass die Anzahl der Zeilen stetig verändert wird, da neue Daten dazu kommen oder welche gelöscht werden.
Daher finde ich es unpraktisch jede Zeile als var zu speichern.

Gibt es da nicht eine andere Lösung? Kann man nicht auslesen in welcher Zeile der Treffer war, und dann per ReadLine(Trefferzeile) die Zeile lesen und ausgeben?
Also das ausgeben ist dann kein problem, ich weiß nur nicht wie ich die Zeilennummer des Treffers bekomme.

Aber danke trotzdem schonmal

F
174 Beiträge seit 2007
vor 11 Jahren

Also ich verstehe das Problem nicht ganz. Oder du hast mich falsch verstanden.
Wenn du die Zeilen ausließt, machst du das ja sehr wahrscheinlich mit einer Schleife. Und in dieser Schleife hast du die aktuelle Zeile immer im Zugriff (also alles was du brauchst um zum Ziel zu kommen).

Wie gesagt, du kannst auch reguläre Ausdrücke dafür verwenden.

C
Chronisch Themenstarter:in
7 Beiträge seit 2012
vor 11 Jahren
string file = System.IO.File.ReadAllText(filename);
			if (file.Contains("Mustermann"))
				{
				lbMatch.Text = "Positiv";
				}
			else
				{
				lbMatch.Text = "Negativ";
				}

Vereinfacht gesagt sieht meine Funktion im Moment so aus, und das nachdem ein Button betätigt wurde.

F
174 Beiträge seit 2007
vor 11 Jahren

Also ließt du momentan nicht Zeile für Zeile ein, sondern die komplette Datei auf einmal.

C
Chronisch Themenstarter:in
7 Beiträge seit 2012
vor 11 Jahren

Thats Right falls ich irgendwo was anderes behauptet habe sry,war spät gestern abend 😄

F
174 Beiträge seit 2007
vor 11 Jahren
C
Chronisch Themenstarter:in
7 Beiträge seit 2012
vor 11 Jahren

Den Code der dort enthalten ist muss ich ja noch in eine Schleife setzen.

for counter=0 do //müsste der anfang sein?

do endoffile oder so
Bin wirklich gerade dabei das erst zu lernen könntest du mir da nochmal helfen?

C
224 Beiträge seit 2009
vor 11 Jahren

Easy:
(Geht kürzer, 1000 Wege führen nach Rom, aber darum geht es hier nicht ;-D)


string path = @"C:\datei.txt";

int filePos = 0;
using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))
{
    using (StreamReader sr = new StreamReader(fs, Encoding.Default))
    {                        
        while (!sr.EndOfStream)
        {
            filePos++;

            string line = sr.ReadLine();
            if (string.IsNullOrEmpty(line)) continue;

            //tue etwas
            MessageBox.Show("Datensatz " + filePos + ": " + line);
        }
    }
}

Bin wirklich gerade dabei das erst zu lernen

Kein Problem. Aber mit diesem Satz wirst Du schnell auf Hinweis: Wie poste ich richtig? Punkt 1.1.1 verwiesen.

Gruß,
CoLo

106 Beiträge seit 2011
vor 11 Jahren

Hallo Chronisch,

Name,Vorname,Strasse,Hausnummer,Postleitzahl,Ort

Ist das ne CSV-Datei? Wenn ja, dann kannst du es dir total einfach machen.

Lass die Datei von FileHelpers lesen.
Das gibt dir ne Liste aller Datensätze in der Datei wider und diese Liste musst du nur noch nach deinen Bedingungen durchsuchen.

Das sollte aufjedenfall bedeutend einfacher und schneller als jeder händische Leseversuch sein.

Mfg
Rabban

N
135 Beiträge seit 2006
vor 11 Jahren

Ich würde eine List<string> verwenden, da kann man ganz schnell und ohne viel Code entsprechende Ergebnisse herausfiltern.

C
Chronisch Themenstarter:in
7 Beiträge seit 2012
vor 11 Jahren

Das funktioniert auch wunderbar, auch die Tipps die oben genannt wurden funktionieren.

Allerdings immer nur für die erste Zeile.

Hinweis von Abt vor 11 Jahren

Das alles kannst Du selbst herausfinden (Stichwort Debugging) - zudem handelt es sich hierbei immer noch um Grundlagen.
Beachte [Hinweis] Wie poste ich richtig? 1.1, 1.1.1, 4.x und 2.3 -> Geschlossen

Thema geschlossen