![]() |
AW: Compare String Funktion
in einem Memo1.Lines[i] gibt es keine Zeilenumbrüche ... das ist nur Inhalt einer Zeile (mit Umbrüchen drin, wären es ja mehrere Zeilen)
Somit machen deine StringReplace nicht das, was du willst. * das erste
Delphi-Quellcode:
kann niemals etwas machen (da es niemals einen Zeilenumbruch darin gibt)
StringReplace(..., #13#10, ' ')
* das zweite
Delphi-Quellcode:
macht aus einer Zeile "mehrere" Zeilen (an Leerzeichen aufgetrennt) und dann verschieben sich alle Lines im Memo
StringReplace(..., ' ', #13#10)
|
AW: Compare String Funktion
Zitat:
Im übrigen würde ich das mit einer zweiten Stringlist lösen, so wie im Vorschlag von EmWieMichael. Dabei kopierst du einfach die Zeilen, die du brauchst in die zweite Stringlist bzw. erzeugst da die Leerzeilen, wo du sie brauchst. Das originale Memo bleibt dabei unverändert und du musst dich nicht mit veränderten Zeilen-Indizes herumärgern, die zwangsläufig durch das Entfernen von Zeilen entstehen. Erst ganz zum Schluss kannst du die zweite Stringlist ins originale Memo zurückkopieren. |
AW: Compare String Funktion
Irgendwie sieht das doch schwer nach 'nem Folgeproblem von
![]()
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var i : Integer; sl : TStringList; slNeu : TStringList; sAnrede : String; sTitel : String; sNachname : String; sVorname : String; sABCD : String; sTermin : String; iPos : Integer; sTemp : String; sNameAlt : String; sNameNeu : String; begin sl := TStringList.Create; slNeu := TStringList.Create; sl.AddStrings(Memo1.Lines); sNameAlt := ''; sNameNeu := ''; try for i := 0 to sl.Count - 1 do begin sTemp := Trim(sl[i]); if sTemp = '' then continue; iPos := Pos(' mit',sTemp); sABCD := Copy(sTemp,iPos + 5,Length(sTemp)); sTemp := Copy(sTemp,1,iPos - 1); iPos := Pos(', ',sTemp); sVorname := ''; if iPos > 0 then begin sVorname := Trim(Copy(sTemp,iPos + 1,Length(sTemp))); sTemp := Copy(sTemp,1,iPos - 1); end; iPos := Pos(' ',sTemp); sAnrede := Copy(sTemp,1,iPos - 1); sTemp := Copy(sTemp,iPos + 1,Length(sTemp)); sTitel := ''; iPos := Pos('. ',sTemp); while iPos > 0 do begin sTitel := Format('%s %s',[sTitel,Copy(sTemp,1,iPos)]); sTemp := Trim(Copy(sTemp,iPos + 1,Length(sTemp))); iPos := Pos('. ',sTemp); end; sTitel := Trim(sTitel); sNachname := sTemp; // Zwischen Zeilen unterschiedlicher Personen soll eine Leerzeile eingefügt werden: slNameNeu := Format('%s;%s;%s;%s;',[sAnrede, sTitel, sNachname, sVorname]); if sNameNeu <> sNameAlt then begin // Hat sich der Name geändert? slNeu.Add(''); // Leerzeile einfügen sNameAlt := sNameNeu; // und aktuellen Namen merken. end; slNeu.Add(Format('%s;%s;%s;%s;mit %s: %s', [sAnrede, sTitel, sNachname, sVorname, sABCD, sTermin])); end; // Am Anfang von slNeu ist jetzt (höchstwahrscheinlich) eine überflüssige Leerzeile: if slNeu.Count > 0 then while (slNeu.Count > 0) and (slNeu[0] = '') do slNeu.Delete(0); Memo2.Lines.assign(slNeu); finally slNeu.Free; sl.Free; end; |
AW: Compare String Funktion
Zitat:
Bei z.B. einer TStringList dagegen, dort knallt es wunderbar. |
AW: Compare String Funktion
Zitat:
Delphi-Quellcode:
besser
for i := Memo1.Lines.Count - 1 downto 0 do
Delphi-Quellcode:
for i := Memo1.Lines.Count - 1 downto 1 do
|
AW: Compare String Funktion
Joar, aber Richtung ist hier fast egal, denn das Problem war eigentlich der Index-Bereich,
also beim Zugriff auf
Delphi-Quellcode:
und
[i]
Delphi-Quellcode:
ein
[i-1]
Delphi-Quellcode:
,
1 to/downto Count - 1
bzw. beim Zugriff auf
Delphi-Quellcode:
und
[i]
Delphi-Quellcode:
ein
[i+1]
Delphi-Quellcode:
:zwinker:
0 to/downto Count - 2
|
AW: Compare String Funktion
Hallo,
ich war ein paar Tage raus und wollte mich noch bedanken. Das mit dem Zeilenumbruch klappt super :thumb: :thumb: :thumb: Vielen, vielen Dank |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz