Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi AnsiContainsStr funktioniert nicht so wie er soll (https://www.delphipraxis.net/140472-ansicontainsstr-funktioniert-nicht-so-wie-er-soll.html)

blooddog_90 18. Sep 2009 20:55


AnsiContainsStr funktioniert nicht so wie er soll
 
Hallo alle zusammen,

ich wundere mich, warum mein Programm nicht das macht was es soll:
Es soll einfach aus einer Linklist, gewisse Zeichen filtern.
Beispiel eines ungefilterten Links:
https://www.google.de/index.php?help
Daraus sollte das werden:
http://www.google.de/index.php

Ich hoffe ihr seht den Fehler im gegensatz zu mir ^.^

Vielen Dank

Code:
unit UCompare;

var
  Form1: TForm1;
  Alte : TSTringlist;

implementation

{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
var
  i : integer;
  aI :string;
begin
  Alte := TStringlist.Create;
  Alte.Sorted := true;
  Alte.LoadFromFile('alte.txt');
  i := 0;
  while i <= Alte.Count-1 do begin
    aI := Alte[i];
    if AnsiContainsStr(aI,'?') then
      setlength(aI, pos('?',aI)-1);
    if AnsiContainsStr(aI,'https://') then
      delete(aI,5,1);
    inc(i);
  end;
  Alte.SaveToFile(sAlte);

Uwe Raabe 18. Sep 2009 21:13

Re: AnsiContainsStr funktioniert nicht so wie er soll
 
Vielleicht solltest du das Ergebnis deiner Bemühungen auch wieder in die StringList schreiben...

jaenicke 19. Sep 2009 02:32

Re: AnsiContainsStr funktioniert nicht so wie er soll
 
Das AnsiContainsStr braucht man hier im Grunde auch nicht. Und eine for-Schleife passt auch besser, da die Anzahl der Durchläufe ohnehin bekannt ist. Zudem fehlt die wichtige Pfadangabe. Wie wäre es einfach so?
Delphi-Quellcode:
procedure TFormX.ButtonXClick(Sender: TObject);

  function FilterUrl(const AUrl: string): string;
  var
    CharPos: Integer;
  begin
    Result := AUrl;
    CharPos := Pos('?', Result);
    if CharPos > 0 then
      SetLength(Result, Pred(CharPos));
    if Copy(Result, 1, 8) = 'https://' then
      Delete(Result, 5, 1);
  end;

var
  i: integer;
  FileContents: TStringlist;
begin
  FileContents := TStringlist.Create;
  FileContents.Sorted := true;
  FileContents.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'alte.txt');
  for i := 0 to Pred(FileContents.Count) do
    FileContents[i] := FilterUrl(FileContents[i]);
  FileContents.SaveToFile(sAlte);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz