Autor |
Beitrag |
csharper
      
Beiträge: 42
|
Verfasst: Do 09.10.08 16:50
Hi,
wie kann ich Leerzeichen und Zeilenumbrüche aus einem String löschen. Es geht darum das ich aus einer CS Datei den Inhalt in einen String lese und diesen dann von seinen Leerzeichen und Zeilenumbrüchen befreien möchte.
Kann mir einer einen Tipp geben, habs mit der Replace Funktion probiert komme aber nicht weiter.
Hier mal nen kurzen Codeauszug
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| ArrayList Text = new ArrayList(); FileStream fstr = File.OpenRead(filename); StreamReader sr = new StreamReader(fstr, Encoding.Default); while (!sr.EndOfStream) { try { Text.Add(sr.ReadLine()); } catch (Exception e) { System.Diagnostics.Debug.Assert(false, "Error reading file." + e.Message); } } string[] strArray = (string[])Text.ToArray(typeof(string)); string bla = String.Join(null, strArray);
bla = bla.Replace("\r\n", ""); |
Kann sein das ich auch nen ganz groben Schnitzer drin hab aber wär nett wenn mir einer helfen könnte.
Grüße
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Do 09.10.08 17:12
Zeilenweise einlesen ist überflüssig.
Wenn du erstmal einen Streamreader hast ist der Rest ein Einzeiler.
C#-Quelltext 1:
| sr.ReadToEnd().Replace(Environment.NewLine, ""); |
|
|
csharper 
      
Beiträge: 42
|
Verfasst: Fr 10.10.08 09:51
Also statt der while Schleife, einfach dein Vorschlag einfügen oder??
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Fr 10.10.08 10:20
Genau. Wobei du in deiner Frage davon gesprochen hast das du Leerzeichen entfernen willst, was dein eigener Code aber auch nicht tut. Das solltest du nochmal näher spezifizieren.
C#-Quelltext 1: 2: 3: 4:
| FileStream fstr = File.OpenRead(filename); StreamReader sr = new StreamReader(fstr, Encoding.Default);
string bla = sr.ReadToEnd().Replace(Environment.NewLine, " "); |
|
|
csharper 
      
Beiträge: 42
|
Verfasst: Fr 10.10.08 10:30
Das hab ich schon soweit probiert aber es hat irgendwie nicht so richtig geklappt.
Ich lass mir immer zum Testen den String in eine txt Datei schreiben und da seh ich immer das es die Leerzeichen und Zeilenumbrüche noch drin hat. ich komm nicht weiter.
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Fr 10.10.08 10:37
Gerade gecheckt und funktioniert. Häng mal eine Beispiel Datei an die nicht funktioniert, vielleicht hast du nicht standardmäßige Zeilenümbrüche drin oder ähnliches.
Und nochmal, welche Leerzeichen sollen weg? Alle? Das macht keinen Sinn.
|
|
csharper 
      
Beiträge: 42
|
Verfasst: Fr 10.10.08 11:29
HMMM, kann sein das dann andere Zeilenumbrüche drin sind, darf leider die Datei nicht anhängen,
Und ja alle Leerzeichen sollen aus dem String raus. Ich möchte eigentlich dann einen String haben der komplett ohne Leerzeichen ist.
Wieso macht das keinen Sinn ?
|
|
JüTho
      
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
|
Verfasst: Fr 10.10.08 11:47
csharper hat folgendes geschrieben : | UndjaalleLeerzeichensollenausdemStringraus.IchmöchteeigentlichdanneinenStringhabenderkomplettohneLeerzeichenist.WiesomachtdaskeinenSinn? |
Weil es sich so gut liest.
Zu den Zeilenumbrüchen: Probiere beim Replace auch "\r" und "\n" solo aus. Und überprüfe sicherheitshalber einmal, ob das Ergebnis des Replace auch an allen Stellen einem String zugewiesen wird und bei späterer Verarbeitung dieser String verwendet wird und nicht versehentlich der ursprüngliche.
Jürgen
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 11.10.08 01:15
Nimm einfach die erstellte Datei und lösche alles bis auf ein Zeichen vor und nach dem übrig gebliebenen Leerzeichen / Zeilenumbruch heraus, diese Datei darfst du dann ja anhängen, oder?
Ansonsten nimm doch einfach mal einen Hexeditor und schau nach was das für Zeichen sind, einen sehr guten gibt es z.B. hier:
www.delphi-forum.de/viewtopic.php?t=36173
|
|
csharper 
      
Beiträge: 42
|
Verfasst: Mo 13.10.08 08:25
@JüTho:
Ich will den String ja nachher nicht lesen
@jaenicke:
Ich versteh gerade nicht ganz genau warum ich ein Zeichen vor und nach dem Leerzeichen herauslöschen soll? Ich will doch das Leerzeichen weg haben und nicht die Zeichen davor und danach. Oder steh ich gerade auf dem Schlauch????
Werde heute mal mein Programm komplett durchdebuggen und mal schauen was wann eingelesen und verwendet wird, dann sollte ich doch hoffentlich mal das schaffen.
Grüße
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 13.10.08 08:28
|
|
csharper 
      
Beiträge: 42
|
Verfasst: Mo 13.10.08 13:59
man jetzt hab ich es kapiert schlimm ist das wenn man nicht mal richtig lesen kann, werd die Datei mal anhängen.
Weiss aber noch nicht ob ihr das was raus erkennen könnt...
Einloggen, um Attachments anzusehen!
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 13.10.08 14:06
Wie du im angehängten Bild siehst (das Programm ist der bereits von mir genannte HxD) sind da ein Zeilenumbruch (#13#10, hier 0D 0A weil hexadezimal) gefolgt von mehreren Tabzeichen (#9) zwischen den beiden Textteilen.
Einloggen, um Attachments anzusehen!
|
|
JüTho
      
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
|
Verfasst: Mo 13.10.08 14:17
Also muss zusätzlich so etwas gemacht werden:
C#-Quelltext 1:
| bla = bla.Replace("\t", String.Empty); |
Jürgen
|
|
csharper 
      
Beiträge: 42
|
Verfasst: Mo 13.10.08 16:20
Hi
jetzt hats geklappt, die Leerzeichen, Tabs usw. sind weg, hab jetzt nen schönen langen String
Super jetzt kann ich damit beginnen den String nach Regulären Ausdrücken abzusuchen und diese abzuspeichern.
Danke euch
|
|
andy_61
Hält's aus hier
Beiträge: 3
Win XP
D7 Prof
|
Verfasst: Mi 15.10.08 11:36
Hi
Mal eine Frage. Im alten Delphi gab's ein "Trim" welches diese Aufgabe glaub ich recht ordentlich erledigte.
Gibt es in C# eigentlich nichts vergleichbares?
|
|
bakachan
      
Beiträge: 503
Erhaltene Danke: 34
W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
|
Verfasst: Mi 15.10.08 11:56
Trim entfernt doch nur Zeichen am Ende/Anfang des Strings
|
|
csharper 
      
Beiträge: 42
|
Verfasst: Do 16.10.08 08:50
Das stimmt Trim entfernt nur die Zeichen am Anfang bzw. Ende so wie bakachan gesagt hat. Hatte es damit aber auch mal probiert ist aber nichts brauchbares rausgekommen
Schliesse den Thread mal da mein Problem ja gelöst wurde.
Grüße
|
|