Autor Beitrag
Binosyst
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Di 02.08.11 13:55 
Ich habe eine Textdate mit mehreren Zeilen und lasse diese in einem Textfeld ausgeben.
Allerdings gibt es in der Textdatei einige Zeilen, die alle gleich beginnen (mit "||"), die nicht in der textbox ausgegeben werden sollen.
Wie kann ich es einrichten, dass alle anderen Zeilen ausgegeben, aber diese bestimmten übersprungen werden?
dark-destination1988
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178
Erhaltene Danke: 21



BeitragVerfasst: Di 02.08.11 15:06 
---textdatei einlesen
Zeilenweise Kontrolle
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
foreach(string st in text)
{
    if(st.Substring(0,2)!="||")
    {
       //weitere verarbeitung
    }
}
Binosyst Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Di 02.08.11 15:36 
Momentan sieht mein Code folgendermaßen aus:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
 string outputText;
 StreamReader readerText = new StreamReader("C:/Users/User/Temp/Test.txt");
 outputText = readerText.ReadLine();
 foreach (string st in outputText)
 {
    if (st.Substring(0,2) != "||")
    {
      textBox2.Text = outputText;
    }
 }
  readerText.Close();


Ich erhalte allerdings die Fehlermeldung "Eine Konvertierung vom Typ "char" in "string" ist nicht möglich." Zeile 4
Was muss ich dort noch ändern?
bakachan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 503
Erhaltene Danke: 34

W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
BeitragVerfasst: Di 02.08.11 15:50 
outputText ist bei dir ein String
im Beispiel von Dark ist text ein Stringarray oder eine Liste von Strings (o.ä.), da liegt der unterschied

Kopier am besten nicht einfach sondern denke ein wenig nach.
Du liest eine Zeile ein (ReadLine) und dann möchtest du falls diese Zeile nicht mit "||" anfängt etwas damit tun.
Richtig?

Also musst du doch nach dem Einlesen der Zeile nur prüfen ob sie mit "||" anfängt (nicht diese komische schleifenkonstrukt innerhalb eines einzelnen strings verwenden). Dabei gibt es schon entsprechende Funktionen direkt an der String-Klasse (z.B. StartsWith)
Binosyst Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Di 02.08.11 17:00 
Ich möchte wenn die Zeile mit "||" anfägt nichts damit tun.
In der Textdatei steht beispielsweise:
Zitat:

Text1
||Text2
Text3


Ausgegeben werden sollen dann aber nur "Text1" und "Text2".
Dafür muss ich dann aber ja in einer Schleife alle Zeilen überprüfen.
Wie kann ich aber herrausfinden wieviele Zeilen die Datei hat, damit die Schleife auch nur so oft durchläuft?
Ich hatte da an etwas in dieser Richtung gedacht:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
            while (t < AnzahlDerZeilen)
            {
                outputText = readerText.ReadLine();
                if (outputText.StartsWith("||"))
                    {
                        outputText = null;
                    }
                else textBox2.Text = outputText;
                t++;
            }

Wobei ich dort auch immer nur die letzte Zeile und nicht alle Zeilen ohne "||" in meiner TextBox hätte.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4795
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 02.08.11 18:32 
Hallo Binosyst,

durch die Zuweisung (mittels =) überschreibst du ja auch immer den alten Inhalt der TextBox.
Entweder += benutzen (und vor der Schleife die TextBox auf String.Empty bzw. "" setzen) oder aber noch besser die Methode
ausblenden C#-Quelltext
1:
textbox.AppendText(line);					

benutzen.

P.S. Anstatt die Anzahl der Zeilen vorher zu bestimmen, einfach den StreamReader solange lesen lassen bis 'null' bei ReadLine zurückgegeben wird:
ausblenden C#-Quelltext
1:
2:
3:
4:
while((line = readerText.ReadLine()) != null)
{
  ...
}

Für diesen Beitrag haben gedankt: Binosyst
Flitzs
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 123
Erhaltene Danke: 7

Win7 x64/86 WinServer 2008 R2 x64
C#/C++/C VS2010
BeitragVerfasst: Di 02.08.11 18:41 
Hallo!
Der StreamReader teilt dir mittels der Eigenschaft EndOfStream mit, wann keine Zeilen mehr verfügbar sind.

Beispiel:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
StreamReader readerText = new StreamReader(@"C:/Users/User/Temp/Test.txt");
            string currentLine;            
            while (!readerText.EndOfStream)
            {
                currentLine = readerText.ReadLine();
                if (!currentLine.StartsWith("||"))
                    textBox1.AppendText(string.Format("{0}{1}", currentLine, Environment.NewLine));
            }
            if(textBox1.Text.Length != 0)
                textBox1.Text = textBox1.Text.Substring(0, textBox1.Text.Length - Environment.NewLine.Length); //Überflüssiges /r/n am Ende entfernen            
            readerText.Close();
            readerText.Dispose();


Beachte, dass der Streamreader möglicherweise unmanaged resources anlegt, daher sollte man seine Dispose Methode aufrufen, wenn man ihn nicht mehr verwenden möchte oder den ganzen Lese/Schreib-Vorgang in einen Using-Block verfrachten:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
  using (StreamReader readerText = new StreamReader(@"C:/Users/User/Temp/Test.txt"))
            {
                string currentLine;
                while (!readerText.EndOfStream)
                {
                    currentLine = readerText.ReadLine();
                    if (!currentLine.StartsWith("||"))
                        textBox1.AppendText(string.Format("{0}{1}", currentLine, Environment.NewLine));
                }
                if(textBox1.Text.Length != 0)
                    textBox1.Text = textBox1.Text.Substring(0, textBox1.Text.Length - Environment.NewLine.Length); //Überflüssiges /r/n am Ende entfernen            
                readerText.Close();
            }


Du könntest aber auch auf den StreamReader verzichten und stattdessen die File-Klasse verwenden:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
foreach (var line in File.ReadAllLines(@"C:/Users/User/Temp/Test.txt"))
              if (!line.StartsWith("||"))
                  textBox1.AppendText(string.Format("{0}{1}", line, Environment.NewLine));    
if(textBox1.Text.Length != 0)            
   textBox1.Text = textBox1.Text.Substring(0, textBox1.Text.Length - Environment.NewLine.Length); //Überflüssiges /r/n am Ende entfernen


lg Flitzs

Für diesen Beitrag haben gedankt: Binosyst
Binosyst Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Di 02.08.11 19:41 
Vielen Dank es läuft nun alles wie gewünscht.
Nun wirft sich mir jedoch noch die Frage auf was genau '\n' und '\r' hier bewirken.
ausblenden C#-Quelltext
1:
textBox1.Text = textBox1.Text.TrimEnd('\n''\r');					
Flitzs
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 123
Erhaltene Danke: 7

Win7 x64/86 WinServer 2008 R2 x64
C#/C++/C VS2010
BeitragVerfasst: Di 02.08.11 20:55 
Hallo!
Siehe Hier

lg Flitzs