AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Compare String Funktion

Ein Thema von julchen · begonnen am 26. Jan 2021 · letzter Beitrag vom 9. Feb 2021
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.377 Beiträge
 
Delphi 10.4 Sydney
 
#11

AW: Compare String Funktion

  Alt 28. Jan 2021, 19:28
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 StringReplace(..., #13#10, ' ') kann niemals etwas machen (da es niemals einen Zeilenumbruch darin gibt)
* das zweite StringReplace(..., ' ', #13#10) macht aus einer Zeile "mehrere" Zeilen (an Leerzeichen aufgetrennt) und dann verschieben sich alle Lines im Memo
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
563 Beiträge
 
Delphi 10.4 Sydney
 
#12

AW: Compare String Funktion

  Alt 29. Jan 2021, 08:08
Wenigstens läuft es schon mal fehlerfrei durch:

Delphi-Quellcode:
     for i := Memo1.Lines.Count - 1 downto 0 do
     begin
      laenge1 := length(Memo1.Lines[i]);
      laenge2 := length(Memo1.Lines[i-1]); // Was passiert hier, wenn i=0 ist?
Bist du sicher, dass das fehlerfrei durchläuft. Kann eigentlich nicht.

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.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
1.744 Beiträge
 
Delphi 7 Professional
 
#13

AW: Compare String Funktion

  Alt 29. Jan 2021, 11:00
Irgendwie sieht das doch schwer nach 'nem Folgeproblem von CSV anpassen aus:
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;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.377 Beiträge
 
Delphi 10.4 Sydney
 
#14

AW: Compare String Funktion

  Alt 29. Jan 2021, 12:45
Zitat:
Memo1.Lines[i-1]
Man hat Glück, bei einem TMemoStrings (TMemo.Lines) gibt es keinen Index-Fehler ... da kommt einfach nur ein leerer String '' raus.
Bei z.B. einer TStringList dagegen, dort knallt es wunderbar.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
1.744 Beiträge
 
Delphi 7 Professional
 
#15

AW: Compare String Funktion

  Alt 29. Jan 2021, 12:49
Zitat:
Memo1.Lines[i-1]
Man hat Glück, bei einem TMemoStrings (TMemo.Lines) gibt es keinen Index-Fehler ... da kommt einfach nur ein leerer String '' raus.
Bei z.B. einer TStringList dagegen, dort knallt es wunderbar.
In so 'nem Fall macht man halt statt for i := Memo1.Lines.Count - 1 downto 0 do besser for i := Memo1.Lines.Count - 1 downto 1 do
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.377 Beiträge
 
Delphi 10.4 Sydney
 
#16

AW: Compare String Funktion

  Alt 29. Jan 2021, 14:41
Joar, aber Richtung ist hier fast egal, denn das Problem war eigentlich der Index-Bereich,
also beim Zugriff auf [i] und [i-1] ein 1 to/downto Count - 1 ,
bzw. beim Zugriff auf [i] und [i+1] ein 0 to/downto Count - 2
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
julchen

Registriert seit: 20. Mär 2008
113 Beiträge
 
Delphi 10.3 Rio
 
#17

AW: Compare String Funktion

  Alt 9. Feb 2021, 11:39
Hallo,

ich war ein paar Tage raus und wollte mich noch bedanken.
Das mit dem Zeilenumbruch klappt super
Vielen, vielen Dank
Kollegin: Am Wochenende wird mein PC immer langsamer! Liegt das am Strom?
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +2. Es ist jetzt 21:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf