Laden...

Durchsuchen einer systematisch aufgebauten Textdatei

Erstellt von joshit vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.483 Views
J
joshit Themenstarter:in
34 Beiträge seit 2015
vor 8 Jahren
Durchsuchen einer systematisch aufgebauten Textdatei

Liebes Forum,

ich bin gerade dabei eine Anwendung zu entwickeln, die eine txt-Datei durchsucht und auf bestimmte Ereignisse reagieren soll. Die Datei ist systematisch aufgebaut und in logische Blöcke unterteilt. Am Ende jeder Zeile steht die aktuelle Zeilennummer (001), (002) usw.
Die Nummerierung beginnt mit jedem Block neu. Die zu durchsuchende Datei kann unter Umständen hunderte solcher Blöcke enthalten und ich suche in diesen Blöcken eine Übereinstimmung. Wenn ich eine gefunden habe muss ich wissen in welchem Block - das heißt ich würde die Datei gerne Blockweise durchsuchen und bei einer gefundenen Überschneidung die entsprechende Zeile zurückgeben.
Ich habe mal ganz banal angefangen:


            TextReader reader = new StreamReader("Dateipfad");
            string line = reader.ReadLine();
           
            while (!line.Contains("(001)"));
            {
                Console.WriteLine(line);
            }

            Console.ReadKey();

Und bin gleich auf die erste Frage gestoßen: Wie teile ich meinem Compiler mit, dass er die erste Zeile einlesen soll, aber die formulierte Abbruchbedingung an dieser Stelle (noch) nicht greift? Denn die Abbruchbedingung zielt auf die erste Zeile des nächsten Blocks ab.

Ich habe mir die Stream- und TextReader-Klassen etwas näher angeschaut aber auf den ersten Blick nichts vielversprechendes gefunden. Ideal an dieser Stelle wäre soetwas wie XPath... Da kann man sich ja an der XML-Struktur orientieren und muss sich so nicht um inhaltliche "Abfragen" kümmern.
Und darauf zielt auch meine Frage ab: Gibt es einen eleganten Weg eine Struktur vorzugeben, in der sich meine Suche bewegen kann oder gibt es nur die etwas hölzerne Möglichkeit, inhaltliche "Abfragen" zu tätigen??

Für Ideen, Anregungen etc wäre ich sehr dankbar!

Viele Grüße,
joshit

Da kam eine Stimme aus dem Off: "Lächele, es könnte schlimmer kommen!" Ich lächelte. Und es kam schlimmer...

5.658 Beiträge seit 2006
vor 8 Jahren

Hi joshit,

Beispiele, wie man zeilenweise durch eine Textdatei durchläuft, gibt es im Forum (und im Netz) wie Sand am Meer. Deine Schleife jedenfalls macht genau das, was sie soll: nämlich solange durchzulaufen, bis eine Zeile die Zeichenfolge "001" enthält. Allerdings mußt du in der Schleife auch die nächste Zeile einlesen. Das betrifft damit die Grundlagen von C#: Schleifen (Visual C# Express) und auch unseren [Hinweis] Wie poste ich richtig?, Punkt 1.

Ansonsten gibt es für das Durchsuchen von Text(dateien) auch Reguläre Ausdrücke ("RegEx"). Eine weitere Möglichkeit wäre, die Struktur der Datei als Datenmodell nachzubilden, die Datei dann in ein Objektmodell einlesen, und für das Suchen die strukturierten Objekte anstatt die Rohdaten zu verwenden.

Christian

Weeks of programming can save you hours of planning

J
joshit Themenstarter:in
34 Beiträge seit 2015
vor 8 Jahren

Hey Christian!

Erstmal vielen Dank für deine schnelle Antwort! Ich hatte weniger die Schleife als viel mehr das was die Schleife macht im Kopf und es deswegen in den falschen Thread geparkt. Danke für die Richtigstellung!

Regex hört sich schon mal sehr spannend an. Wenn ich da ein bisschen recherchiert habe kann ich näheres dazu sagen. Aber nach dem ersten Überfliegen sieht das schonmal hilfreich aus.

Das Problem beim Suchen im Netz ist halt immer der Suchbegriff. Irgendwie habe ich da noch kein wirklich glückliches Händchen entwickelt. Und da das ein Thema ist, bei dem ein erfahrener Programmierer wahrscheinlich nicht mal nachdenken muss, dachte ich dass ich einfach frage 😉

Liebe Grüße

Da kam eine Stimme aus dem Off: "Lächele, es könnte schlimmer kommen!" Ich lächelte. Und es kam schlimmer...