Thema: Delphi Compare String Funktion

Einzelnen Beitrag anzeigen

Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 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