Entwickler-Ecke
Sonstiges (Delphi) - Zeilenumbruch löschen
SweeT_C - Fr 23.03.07 16:43
Titel: Zeilenumbruch löschen
jojo,
ich habe bereits gegoogelt, aber noch nichts gefunden, was mir weiterhilft.
Ich möchte nach einem bestimmten Zeichen den Zeilenumbruch löschen und zwar nicht jedesmal nach dem Zeichen, d.h. wenn es mehrmals auftaucht soll ach mehrmals danach der Zeilenumbruch gelöscht werden.
Wie kann ich das machen ?
MfG n Thx
Blackheart666 - Fr 23.03.07 16:55
Schau mal nach Trim
Delete - Fr 23.03.07 17:12
Yo, oder nach pos() oder StringReplace()... weiß ja nicht, was Du vor hast genau...
SweeT_C - Fr 23.03.07 20:02
rd3 hat folgendes geschrieben: |
Yo, oder nach pos() oder StringReplace()... weiß ja nicht, was Du vor hast genau... |
ich möchte aus einem Text immer nach einem bestimmten Zeichen des Zeilenumbruch entfernen, der formatierung halber.
hm, hab nach Trim geschaut, aber da kann man nur den string angeben, aber nicht in welchem string der string (der verändert werden soll) vorkommt.
Delete - Fr 23.03.07 20:09
kommt das zeichen immer genau vor einem zeilenumbruch?
Marc. - Fr 23.03.07 20:16
Delphi-Quelltext
1: 2: 3: 4:
| var s: string; [...] s := stringreplace(s,'z'#13,'z ',[rfreplaceall]); |
Z steht dabei für dein Zeichen. ;)
#13 ist der TastenCode für Enter, also Zeilemumbruch.
Nun ersetzt du deinen Zeilenumbruch durch dein Zeichen + Space. ;)
Wenn etwas unklar ist markiere stringreplace und drücke F1.
grüße
Delete - Fr 23.03.07 20:19
Yo,
wenn | das zeichen ist dann funktioniert das...
Delphi-Quelltext
1:
| s := StringReplace(s,'|'+#13#10,'',[rfReplaceAll,rfIgnoreCase]); |
// EDIT: zu spät ;)
Marc. - Fr 23.03.07 20:21
rd3,
ich glaube nicht, dass er den Zeilenumbruch und gleichzeitig noch das Zeichen entfernen will... :lol:
Delete - Fr 23.03.07 20:23
dann halt so...
Delphi-Quelltext
1:
| s := StringReplace(s,'|'+#13#10,'|',[rfReplaceAll,rfIgnoreCase]); |
;)
Marc. - Fr 23.03.07 20:25
Nö, dann hast du den Zeilenumbruch zwar entfernt, aber der Satz, der zuvor unter dem anderen stand, klatscht nun direkt an die Zeile voher an. Fehlt noch ein leerzeichen '| '. ;)
Delete - Fr 23.03.07 20:27
hier ist ja keine rede von sätzen... MancheLegenHaltKeinenWertAufInterpunktionUndWortabstände...SowasAberAuch...
Marc. - Fr 23.03.07 20:29
Sowas habe ich bisher nur in SMSen gesehen, um Zeichen zu sparen. :)
Aber okay, ich denke das Problem ist gelöst, außer der Threadersteller gibt sich immernoch nicht zufrieden.
grüße
Heiko - Fr 23.03.07 20:34
So kleinere Nachbesserungen ;).
Trim entfernt lediglich am Anfang und Ende des Strings überflüssige Leerzeichen. Hat also nichts mit Zeilenumbrüchen zu tun (IMHO entfernt er diese auch nicht, wenn sie am Anfang/Ende stehen).
@Zeilenumbruch entfernen. ReplaceStr ist da schon die richtige Wahl. Allerdings sollte man da verschiedenen Zeilenumbrüchen der ganzen OSes beachten. (Siehe
wikipeida [
http://de.wikipedia.org/wiki/Zeilenumbruch]).
Dem entsprechend müsste eine korrekte Zeilenumbruchfunktions so hier aussehen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure DeleteLineBreaks(var Text: String; const PreStr: String); begin Text := StringReplace(Text, PreStr + #13#10, PreStr + ' ', [rfReplaceAll, rfIgnoreCase]); Text := StringReplace(Text, PreStr + #13 , PreStr + ' ', [rfReplaceAll, rfIgnoreCase]); Text := StringReplace(Text, PreStr + #10 , PreStr + ' ', [rfReplaceAll, rfIgnoreCase]); Text := StringReplace(Text, PreStr + #21 , PreStr + ' ', [rfReplaceAll, rfIgnoreCase]); end; |
rfIgnoreCase musst du weglassen, wenn dir diie Groß- und Kleinschreibung vor dem zeilenumbruch wichtig ist.
Die Reihenfolge ist hier wichtig!
Fehlerhaftes Verhalten, bei falscher Reihenfolge:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure DeleteLineBreaks(var Text: String; const PreStr: String); begin Text := StringReplace(Text, PreStr + #13 , PreStr + ' ', [rfReplaceAll, rfIgnoreCase]); Text := StringReplace(Text, PreStr + #10 , PreStr + ' ', [rfReplaceAll, rfIgnoreCase]); Text := StringReplace(Text, PreStr + #13#10, PreStr + ' ', [rfReplaceAll, rfIgnoreCase]); Text := StringReplace(Text, PreStr + #21 , PreStr + ' ', [rfReplaceAll, rfIgnoreCase]); end; |
Korrekt wäre aber "Text = "Mein Test. ;-)". Von daher ist die letztere Variante falsch und die erste Richtig ;).
Delete - Fr 23.03.07 20:40
Oops, sorry
SweeT_C - Sa 24.03.07 01:44
Erstmal danke!
Leider funktioniert es noch nciht wirklich.
Hier ist der Text in meinem RicheditFeld:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| <Nasse> ich schreib dich in den nächsten tagen mal an und frag ich über physik aus <Nasse> hab aber kjetz keine lust mehr <SweeT_C> -.- <Nasse> *JOKINGLY* <Nasse> wäste mal früher gekommen <SweeT_C> dann ? |
ich hab sowohl die Funktion von Heiko als auch die von rd3 probiert. Klappt mit beiden nciht.
Ich möchte die Zeilenumbrüche nach den ">" löschen.
Meine Funktionion sieht dementsprechend aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.Button7Click(Sender: TObject); var text:string; begin text:=richedit2.text; richedit2.text:= StringReplace(Text, '>' + #13#10, '>' + ' ', [rfReplaceAll, rfIgnoreCase]); richedit2.text:= StringReplace(Text, '>' + #13 , '>' + ' ', [rfReplaceAll, rfIgnoreCase]); richedit2.text:= StringReplace(Text, '>' + #10 , '>' + ' ', [rfReplaceAll, rfIgnoreCase]); richedit2.text:= StringReplace(Text, '>' + #21 , '>' + ' ', [rfReplaceAll, rfIgnoreCase]); end; |
Robinator - Sa 24.03.07 01:53
Vermutlich befindet sich zwischen dem > und dem umbruch noch ein Leerzeichen oder so ;)
SweeT_C - Sa 24.03.07 02:43
Robinator hat folgendes geschrieben: |
Vermutlich befindet sich zwischen dem > und dem umbruch noch ein Leerzeichen oder so ;) |
das wär zu einfach...habe ich schon ausprobiert ;)
Heiko - Sa 24.03.07 12:25
Mein Quelli funzt schon. Du hast nur einen Fehler eingebaut ;). Und zwar ersetzt er zuerst den Text richtig, aber anschließend überschreibt er die Änderung, da ja in der Variable Text immer noch das alte drinsteht.
Korrekt sähe es bei dir dann so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.Button1Click(Sender: TObject); var text:string; begin text:= richedit2.text; text:= StringReplace(Text, '>' + #13#10, '>' + ' ', [rfReplaceAll, rfIgnoreCase]); text:= StringReplace(Text, '>' + #13 , '>' + ' ', [rfReplaceAll, rfIgnoreCase]); text:= StringReplace(Text, '>' + #10 , '>' + ' ', [rfReplaceAll, rfIgnoreCase]); text:= StringReplace(Text, '>' + #21 , '>' + ' ', [rfReplaceAll, rfIgnoreCase]); richedit2.text:=text; end; |
Aber: Schöner sähe es so aus
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure DeleteLineBreaks(var Text: String; const PreStr: String); begin Text := StringReplace(Text, PreStr + #13#10, PreStr + ' ', [rfReplaceAll, rfIgnoreCase]); Text := StringReplace(Text, PreStr + #13 , PreStr + ' ', [rfReplaceAll, rfIgnoreCase]); Text := StringReplace(Text, PreStr + #10 , PreStr + ' ', [rfReplaceAll, rfIgnoreCase]); Text := StringReplace(Text, PreStr + #21 , PreStr + ' ', [rfReplaceAll, rfIgnoreCase]); end;
procedure TForm1.Button1Click(Sender: TObject); begin DeleteLineBreaks(richedit2.text, '>'); end; |
Den zweiten Parameter kannst du natürlich auch entfernen, wenn du in der Prozedur DeleteLineBreaks dafür PreStr ersetzt.
SweeT_C - Sa 24.03.07 16:55
Danke!
Jetzt funkioniert es einwadfrei :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!