Autor Beitrag
phelis
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Di 10.03.09 12:56 
Hallo zusammen

ich hab ein kleines problem und zwar schreibt es bei meinem programm immer nur die letzte zeile in das textfile, welches ich erstelle.

ich hab das txtfile test.txt wo drin steht:
1a
2b
3c
4d
5d
5e

und möchte gerne nur die zeilen mit 5 in mein textfile text.txt schreiben


bis jetzt hab ich dies hier:


ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
            StreamReader sr = new StreamReader(@"C:\test.txt");
            string line = "";


            while ( ( line = sr.ReadLine() ) != null )

                  if (line.Trim().StartsWith("5"))
                  {
                      StreamWriter myWriter = File.CreateText(@"c:\text.txt");
                      myWriter.WriteLine(line);
                      myWriter.Close(); 
                  }


aber leider fügt es die zeilen net an sondern überschreibt sie einfach


ich hoffe jemand kann mir helfen.

freundlich grüsse

phelis

Moderiert von user profile iconKha: C#-Tags hinzugefügt
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 10.03.09 13:54 
Du erstellst die Datei ja jedes mal neu wenn ich das richtig sehe.
Öffne den Streamwriter doch einfach vor deiner Schleife und schreib in der Schleife immer nur die jeweilige Zeile. (Das Close kommt dann logischerweise nach der Schleife.)
phelis Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Di 10.03.09 14:35 
hi, danke für die antwort

ich habs jetzt mal so gemacht
hoffe du meinstest das.



ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
StreamReader sr = new StreamReader(@"C:\test.txt");
            string line = "";
            StreamWriter myWriter = File.CreateText(@"c:\text.txt");

            while ( ( line = sr.ReadLine() ) != null )

                  if (line.Trim().StartsWith("5"))
                  {
                      Console.WriteLine(line);
                      myWriter.WriteLine(line);
                      
                  }




so schreibt es mir aber gar keine zeile in das textfile :(

Moderiert von user profile iconKha: C#-Tags hinzugefügt
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 10.03.09 14:39 
Du hast ja auch nirgendwo ein Close für deinen StreamWriter.
phelis Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Di 10.03.09 14:41 
ah verdammt..
vielen dank jetzt klapts wunderbar =D
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Di 10.03.09 15:12 
Hallo,

einfacher wird es, wenn man anstelle von StreamReader und StreamWriter direkt File.Read* und File.Write*, ggf. File.AppendText verwendet.

Jürgen
phelis Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mi 11.03.09 09:18 
guten morgen

Sorry wenn ich nochmal störe:
Ich muss noch ne Funktion in das Programm einbauen und zwar soll es mir bis zum einem Zeichen alles vornedran weglöschen.

z.B.

%NODE 20 DEF : 170.413 -170.413 -6.25

soll am Schluss so aussehen:

170.413 -170.413 -6.25


Ich hab da mal was gebastelt

ausblenden Quelltext
1:
2:
 char[] charArr = { '%','N','O','D','E' };
 line = line.Trim(charArr);


Diese Methode löscht mir natürlich nur das %NODE am Anfgang raus.
Gibt es nich au ne Möglichkeit zusagen, dass es alles bis zum ":" löschen soll?



freunliche Grüsse
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: Mi 11.03.09 09:38 
einfachster weg:
String-Funktionen
(siehe .IndexOf und .Substring)

eine andere Möglichkeit wäre über RegEx
phelis Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mi 11.03.09 10:12 
Das funktioniert leider nicht, da die quelldatei ca. 350'000 Zeilen beinhaltet und somit die Anzahl Zeichen die ich mit indexof angebe sich immer verändert.


kleiner Auszug:

%NODE 99 DEF : 161.47 -169.182 -3.05411
%NODE 100 DEF : 162.992 -171.581 -1.47546
%NODE 101 DEF : 161.521 -170.091 -1.52943

Bei Zeile 99 sind es vorne 15 Zeichen
Bei Zeile 100 sind es vorne 16 Zeichen


Kann man das Problem umgehen oder mach ich einen Denkfehler?
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: Mi 11.03.09 10:29 
user profile iconphelis hat folgendes geschrieben Zum zitierten Posting springen:
somit die Anzahl Zeichen die ich mit indexof angebe sich immer verändert


Wozu suchst du mit Index of nach Anzahl Zeichen?
such doch einfach nach dem ':' in jeder Zeile


oder wie vorhin schon gesagt als alternative RegEx