Laden...

Text aus einer Datei blockweise einlesen

Erstellt von spry64 vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.359 Views
S
spry64 Themenstarter:in
52 Beiträge seit 2014
vor 10 Jahren
Text aus einer Datei blockweise einlesen

Hallo,

wäre nett wenn mir jemand helfen könnte, da ich nach langem Grübeln nicht auf die Lösung meines Problems gekommen bin.

Ich habe eine Textdatei, in der der Text blockweise nach Usern geordnet ist. Die Anzahl der Textblöcke ist je nach Datei variabel. Es kann irgendwelche Textdatei sein.
Jeweils die erste Zeile diese Textblöcke drücken den Namen des Users aus.
Beispiel:

peter
xxxxxxxxxxxx
eeeeeeeeee
iiiiiii

andreas
oooooooooo
ee
ppppppppppppp

usw.

Mein Ziel ist es nun diese Textblöcke (auszuwählen mit dem jeweiligen Namen des Users in einer Listbox) in einem Textbox auszugeben. Die ListBoxItems sollen sich natürlich jeweils aus den ersten Zeilen diese Textblöcke ergeben.
Man soll noch in den TextBox die Möglichkeit haben den ausgewählten Textblock zu verändern und genau an die gleiche Stelle in der Datei abzuspeichern, ohne dass sich die anderen Blöcke vom inhaltlichen verändern.

Ich habe erstmal versucht den Text den ich einlese nach Blöcken zu teilen, bin aber dabei auf ein Problem gestoßen:

            int n = 0;

            FileStream stream = File.Open(path, FileMode.Open, FileAccess.ReadWrite);
            StreamReader sr = new StreamReader(stream, Encoding.Default); 

            StringCollection myStr = new StringCollection();

            while (sr.ReadLine() != null)
            {
                myStr[n] += sr.ReadLine() + '\n';
                if (sr.ReadLine() == "") n++;

            }
            txtbAusgabe.Text = myStr[0];

            sr.Close();

Wenn ich das Programm laufen lasse erscheint ein 'ArgumentOutOfRangeException' in der gesagt wird, dass der Index außerhalb des Bereichs lag. Statt ein StringCollection einen ArrayList zu nehmen macht auch wenig Sinn, da die gleiche Fehlermeldung nochmal erscheinen würde.

Ich suche hier nicht nach einer Komplettlösung der Aufgabe, sondern nur den Teil, wo man den eingelesen Text in in String-Arrays nach Blöcken teilen kann und jeweils die ersten Zeilen diese Blöcke den ListBoxItem angeben 😃

Wenn die Anzahl der Blöcke bekannt wäre, wäre es ja kann Problem.

3.825 Beiträge seit 2006
vor 10 Jahren

Das ist ein typischer Fall für den Debugger :

[Artikel] Debugger: Wie verwende ich den von Visual Studio?

Nimm eine kleine Datei mit 2 Usern oder so als Test.

Und schau Dir die Add-Methode der StringCollection an.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

S
spry64 Themenstarter:in
52 Beiträge seit 2014
vor 10 Jahren

Hallo Bernd

danke für die Antwort.

Die Fehlermeldung erscheint glaub ich deswegen, da ich einen Index des Arrays von StringCollection nur einen Element hinzufügen darf. Ich füge ja z.B. in einer Schleife mehrere Zeilen dem Index 0 hinzu.

Eine Testdatei habe ich, nur krieg ich es nicht hin den Text in Blöcken zu teilen bzw. die Blöcke in einem dynamischen Array zu speichern.

Die Add-Methode hilft mir da leider nicht viel, da sie den gesamten Text in einem Array reinschreibt. Wie das z.B.

          FileStream stream = File.Open(path, FileMode.Open, FileAccess.ReadWrite);
           StreamReader sr = new StreamReader(stream, Encoding.Default); te

            StringCollection myStr = new StringCollection();
            while (sr.ReadLine() != null)
            {
                myStr.Add(sr.ReadLine() + '\n');
            }

Mein Text wäre immernoch nicht nach Blöcken geteilt.

M
402 Beiträge seit 2005
vor 10 Jahren

Hi...

lies die Fehlermeldung...

du willst der StringCollection am Index n etwas zuweisen.
Nur gibt's den Index n nicht und deswegen kommt die Fehlermeldung.