Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Strings zusammenfügen (https://www.delphipraxis.net/82621-strings-zusammenfuegen.html)

Nils_13 16. Dez 2006 15:29


Strings zusammenfügen
 
Hi,

ich habe ein Programm, welches mir alle Leerzeichen in eine neue Zeile verwandelt, außer es kommt mehrfach ein Leerzeichen hintereinander vor. Wie kann man aus einen aufgespaltenem String (" oder ') eine ganze Zeile machen ?
Also aus
"Hello
world"
wieder
"Hello world"

Ich habe bisher diesen Code, funktioniert natürlich noch nicht :(
Delphi-Quellcode:
  ad := Pos('"', result[i]);
  ae := Pos('"', result[> ad]); // > ad gibt es halt nicht
  if (result[ad] = '"') and (ae) then
    ReplaceString(result[],#13#10,#20,rfReplaceAll);

r2c2 16. Dez 2006 17:09

Re: Strings zusammenfügen
 
Hallo Nils :hi:

2 Möglichkeiten:
- PosEx
- selber machen --> eine einzige Forschleife

letztes ist natürlich schneller, macht aber mehr Arbeit...

Und, wenn es auf die Geschwindigkeit ankommt würd ich das in der selben Schleife machen, wie das Aufspalten, d.h., wenns in Anführungszeichen steht, gar nicht erst trennen...

und noch n Link: http://r2c2.weingut-rehn.de/content3...mit_Delphi.htm

mfg

Christian

inherited 16. Dez 2006 17:58

Re: Strings zusammenfügen
 
Alternativ mit StringReplace alle #13#10 in ' ' umwandeln ;)
€dit: hab grad gelesen: Dein Problem ist, dass die Funktion einen String zurückgibt, du musst also den Rückgabewert nehmen.

Nils_13 16. Dez 2006 18:49

Re: Strings zusammenfügen
 
Habe jetzt fast alles gelöst:
Delphi-Quellcode:
function TfrmMain.get(Text : String): String;
var i : integer;
    Flag : Boolean;
begin
  result := Text;
  i     := 0;
  Flag  := False;
  while i < Length(result) do
  begin
    if result[i] = '"' then
      Flag := not Flag;
    if (result[i] = #13) and (result[i+1] = #10) and (Flag) then
    begin
      delete(result,i,2);
      result := copy(result, 0, i-1)+' '+ Copy(result, i, Length(result));
      dec(i);
    end;
    inc(i);
  end;
end;

procedure TfrmMain.Button1Click(Sender: TObject);
var i : Integer;
    sl    : TStrings;
    space : TStrings;
    result : TStrings;
begin
  sl    := TStringList.Create;
  space := TStringList.Create;
  result := TStringList.Create;
  sl.LoadFromFile('...');
  for i := 0 to sl.Count - 1 do
  begin
    space.Add(StringReplace(sl[i], ' ', #13#10, [rfReplaceAll]));
    result.Add(StringReplace(space[i], ',', #13#10, [rfReplaceAll]));
  end;
  for i := 0 to sl.Count - 1 do
  begin
    Memo1.Lines.Add(Get(result[i]));
  end;
  sl.Free;
end;
Der Code funktioniert, danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 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