Autor Beitrag
SweeT_C
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2195

XP
D3Prof, D6Pers.
BeitragVerfasst: 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



BeitragVerfasst: Fr 23.03.07 17:12 
Yo, oder nach pos() oder StringReplace()... weiß ja nicht, was Du vor hast genau...
SweeT_C Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32



BeitragVerfasst: Fr 23.03.07 20:02 
user profile iconrd3 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



BeitragVerfasst: Fr 23.03.07 20:09 
kommt das zeichen immer genau vor einem zeilenumbruch?
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Fr 23.03.07 20:16 
ausblenden 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



BeitragVerfasst: Fr 23.03.07 20:19 
Yo,

wenn | das zeichen ist dann funktioniert das...

ausblenden Delphi-Quelltext
1:
s := StringReplace(s,'|'+#13#10,'',[rfReplaceAll,rfIgnoreCase]);					


// EDIT: zu spät ;)
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Fr 23.03.07 20:21 
rd3,
ich glaube nicht, dass er den Zeilenumbruch und gleichzeitig noch das Zeichen entfernen will... :lol:
rd3
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 23.03.07 20:23 
dann halt so...
ausblenden Delphi-Quelltext
1:
s := StringReplace(s,'|'+#13#10,'|',[rfReplaceAll,rfIgnoreCase]);					

;)
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

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



BeitragVerfasst: Fr 23.03.07 20:27 
hier ist ja keine rede von sätzen... MancheLegenHaltKeinenWertAufInterpunktionUndWortabstände...SowasAberAuch...
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: Fr 23.03.07 20:34 
So kleinere Nachbesserungen ;).

user profile iconBlackheart666 hat folgendes geschrieben:
Schau mal nach Trim

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.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure DeleteLineBreaks(var Text: Stringconst 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:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure DeleteLineBreaks(var Text: Stringconst PreStr: String);
begin
  //Text = "Mein Test."#13#10";-)"
  Text := StringReplace(Text, PreStr + #13   , PreStr + ' ', [rfReplaceAll, rfIgnoreCase]);
  //-->Text = "Mein Test. "#10";-)"
  Text := StringReplace(Text, PreStr + #10   , PreStr + ' ', [rfReplaceAll, rfIgnoreCase]);
  //-->Text = "Mein Test.  ;-)"
  Text := StringReplace(Text, PreStr + #13#10, PreStr + ' ', [rfReplaceAll, rfIgnoreCase]);
  //-->Text = "Mein Test.  ;-)"
  Text := StringReplace(Text, PreStr + #21   , PreStr + ' ', [rfReplaceAll, rfIgnoreCase]);
  //-->Text = "Mein Test.  ;-)"
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



BeitragVerfasst: Fr 23.03.07 20:40 
Oops, sorry
SweeT_C Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32



BeitragVerfasst: Sa 24.03.07 01:44 
Erstmal danke!
Leider funktioniert es noch nciht wirklich.

Hier ist der Text in meinem RicheditFeld:
ausblenden 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 275

WinXP
BDS 2006
BeitragVerfasst: Sa 24.03.07 01:53 
Vermutlich befindet sich zwischen dem > und dem umbruch noch ein Leerzeichen oder so ;)

_________________
erare humanum est
SweeT_C Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32



BeitragVerfasst: Sa 24.03.07 02:43 
user profile iconRobinator 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



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

ausblenden 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

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure DeleteLineBreaks(var Text: Stringconst 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32



BeitragVerfasst: Sa 24.03.07 16:55 
Danke!
Jetzt funkioniert es einwadfrei :)