Entwickler-Ecke

IO, XML und Registry - Leerzeichen und Zeilenumbrüche aus einem String löschen?


csharper - Do 09.10.08 16:50
Titel: Leerzeichen und Zeilenumbrüche aus einem String löschen?
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 - 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 - Fr 10.10.08 09:51

Also statt der while Schleife, einfach dein Vorschlag einfügen oder??


Ralf Jansen - 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 - 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 - 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 - 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 - Fr 10.10.08 11:47

user profile iconcsharper hat folgendes geschrieben Zum zitierten Posting springen:
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 - 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:
http://www.delphi-forum.de/viewtopic.php?t=36173


csharper - Mo 13.10.08 08:25

@JüTho:

Ich will den String ja nachher nicht lesen :wink:

@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 - Mo 13.10.08 08:28

user profile iconcsharper hat folgendes geschrieben Zum zitierten Posting springen:
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????
-->
user profile iconcsharper hat folgendes geschrieben Zum zitierten Posting springen:
darf leider die Datei nicht anhängen, ;-)

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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? ;-)
Ich meinte, dass du eine Datei, in der nur die fraglichen Zeichen mit je einem Zeichen zur Begrenzung davor und dahinter enthalten sind, ja wohl anhängen kannst ;-).


csharper - Mo 13.10.08 13:59

:oops:

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...


jaenicke - 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.


JüTho - 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 - 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 - 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 - Mi 15.10.08 11:56

Trim entfernt doch nur Zeichen am Ende/Anfang des Strings


csharper - 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