Autor Beitrag
csharper
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42



BeitragVerfasst: 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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 09.10.08 17:12 
Zeilenweise einlesen ist überflüssig.
Wenn du erstmal einen Streamreader hast ist der Rest ein Einzeiler.

ausblenden C#-Quelltext
1:
sr.ReadToEnd().Replace(Environment.NewLine, "");					
csharper Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42



BeitragVerfasst: Fr 10.10.08 09:51 
Also statt der while Schleife, einfach dein Vorschlag einfügen oder??
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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.

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42



BeitragVerfasst: 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
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: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42



BeitragVerfasst: 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...
Einloggen, um Attachments anzusehen!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
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: Mo 13.10.08 14:17 
Also muss zusätzlich so etwas gemacht werden:
ausblenden C#-Quelltext
1:
bla = bla.Replace("\t", String.Empty);					

Jürgen
csharper Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42



BeitragVerfasst: 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
BeitragVerfasst: 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
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 15.10.08 11:56 
Trim entfernt doch nur Zeichen am Ende/Anfang des Strings
csharper Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42



BeitragVerfasst: 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