Autor |
Beitrag |
SweeT_C
      
Beiträge: 32
|
Verfasst: Fr 23.03.07 16:43
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
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: Fr 23.03.07 16:55
Schau mal nach Trim
_________________ Blackheart666
Der Irrsinn ist bei Einzelnen etwas Seltenes, - aber bei Gruppen, Parteien, Völkern, Zeiten die Regel. (Friedrich Nietzsche)
|
|
rd3
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 23.03.07 17:12
Yo, oder nach pos() oder StringReplace()... weiß ja nicht, was Du vor hast genau...
|
|
SweeT_C 
      
Beiträge: 32
|
Verfasst: 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.
|
|
rd3
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 23.03.07 20:09
kommt das zeichen immer genau vor einem zeilenumbruch?
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: 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
|
|
rd3
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Fr 23.03.07 20:21
rd3,
ich glaube nicht, dass er den Zeilenumbruch und gleichzeitig noch das Zeichen entfernen will... 
|
|
rd3
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 23.03.07 20:23
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: 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 '| '. 
|
|
rd3
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 23.03.07 20:27
hier ist ja keine rede von sätzen... MancheLegenHaltKeinenWertAufInterpunktionUndWortabstände...SowasAberAuch...
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: 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
      
Beiträge: 3169
Erhaltene Danke: 11
|
Verfasst: 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). 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  .
Zuletzt bearbeitet von Heiko am Fr 23.03.07 20:42, insgesamt 1-mal bearbeitet
|
|
rd3
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 23.03.07 20:40
|
|
SweeT_C 
      
Beiträge: 32
|
Verfasst: 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
      
Beiträge: 275
WinXP
BDS 2006
|
Verfasst: Sa 24.03.07 01:53
Vermutlich befindet sich zwischen dem > und dem umbruch noch ein Leerzeichen oder so 
_________________ erare humanum est
|
|
SweeT_C 
      
Beiträge: 32
|
Verfasst: Sa 24.03.07 02:43
|
|
Heiko
      
Beiträge: 3169
Erhaltene Danke: 11
|
Verfasst: 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 
      
Beiträge: 32
|
Verfasst: Sa 24.03.07 16:55
Danke!
Jetzt funkioniert es einwadfrei 
|
|
|