Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Ausschneiden mit Delete (https://www.delphipraxis.net/50482-ausschneiden-mit-delete.html)

Kompon Ente 26. Jul 2005 13:16


Ausschneiden mit Delete
 
Hallo,

ich lese aus der Registry HKCU\Software\Microsoft\Windows\CurrentVersion\Int ernet Settings\ den Wert ProxyServer.

Dieser sieht folgendermaßen aus:
ftp=195.100.85.159:3128;gopher=195.100.85.159:3128 ;http=195.100.85.159:3128;https=195.100.85.159:312 8

Jetzt möchte ich alles, was vor http= usw. steht wegschneiden.
Danach möchte ich bis zum : lesen und den Port in ein Extrafeld schreiben und ebenfalls bis zum ; lesen und den Rest wegschneiden.

Meine Abfrage sieht folgendermaßen aus:
Delphi-Quellcode:
    // prüfen, ob es sich um Zahlen handelt
    if (Ord(s[1])<=48) and (Ord(s[1])<=57) then
    begin
      // lesen bis zur Stelle, wo http= beginnt
      if pos(s,'http=') < 0 then
      begin
        // vorderen Teil wegschneiden
        Delete(s,6,pos('http=',s)-1-5);
        // in eine Variable kopieren
        s := copy(s,1,pos(':',s)-1);
        // usw.
        s := s + copy(s,1,pos(';',s)-1);
      end
      else
        MessageDlg('Kein HTTP-Proxy eingetragen!',mtInformation,[mbOk],0);
    end
    else
      ShowMessage('Rien ne va plius!');

Weiß jemand weiter? Ich nicht mehr..

barf00s 26. Jul 2005 13:20

Re: Ausschneiden mit Delete
 
sIPs: string = 'deinmumustringdaoben';

sIPs := Copy(sIPs, Pos('http=', sIPS), Length(sIPs));
sIPs := Copy(sIPs, 1, Length(sIPs) - Pos(':', sIPs) - 1));

Kompon Ente 26. Jul 2005 13:22

:wiejetzt:

Könntest du dich bitte etwas deutlicher ausdrücken? Und vllt. auch etwas gesitteter ;) @ deinmumudingdaoben

barf00s 26. Jul 2005 13:23

Re: Ausschneiden mit Delete
 
wieso noch deutlicher? schau in der hilfe was Copy() macht...

und wieso noch gesitteter? was is an dem wort nich i.o.?

Kompon Ente 26. Jul 2005 13:28

Re: Ausschneiden mit Delete
 
Das Problem ist, dass er gar nicht in die Abfrage reinkommt:

Delphi-Quellcode:
if (Ord(s[1])<=48) and (Ord(s[1])<=57) then
begin
  if pos(s,'http=') < 0 then
Er geht nach:
Delphi-Quellcode:
if (Ord(s[1])<=48) and (Ord(s[1])<=57) the
direkt in die Else! :(

r2c2 26. Jul 2005 13:39

Re: Ausschneiden mit Delete
 
Zitat:

Zitat von Kompon Ente
Delphi-Quellcode:
if (Ord(s[1])<=48) and (Ord(s[1])<=57) the

Damit prüfst du, ob das 1. Zeichen eine Zahl ist. Das erste Zeichen ist aber ein 'f', deshalb springt das ins else. Warum prüfst du das denn auch...? :gruebel:

mfg

Christian

Kidix 26. Jul 2005 13:40

Re: Ausschneiden mit Delete
 
du musst es erst prüfen wenn du's geparst hast....

Jasocul 26. Jul 2005 13:41

Re: Ausschneiden mit Delete
 
Delphi-Quellcode:
if (Ord(s[1])<=48) and (Ord(s[1])<=57) then
begin
  if pos(s,'http=') < 0 then
Prüf nochmal deine Bedingung. Das ist irgendwie quatsch.
Wenn das kleiner als 48 ist, dann ist es auch kleiner als 57.
Du kannst die vordere Hälfte weglassen, bzw. nochmal prüfen, was du da eigenltich machen wolltest.

Kompon Ente 26. Jul 2005 13:42

Ja äh... häh? :o

Sorry, aber ich denke irgendwie kompliziert.

Was muss ich denn sonst prüfen?

Jasocul 26. Jul 2005 13:43

Re: Ausschneiden mit Delete
 
Welche Bedingung soll denn dort erfüllt sein?
Beschreibs doch mal in Worten.

Kompon Ente 26. Jul 2005 13:47

Delphi-Quellcode:
if (Ord(s[1])>=48) and (Ord(s[1])<=57) then
begin
  if pos(s,'http=') > 0 then
  begin
    Delete(s,6,pos('http=',s)-1-5);
    s := copy(s, pos('http=',s),length(s));
    s := copy(s,1,length(s)-pos(':',s)-1);
  end
  else
    MessageDlg('Kein HTTP-Proxy eingetragen!',mtInformation,[mbOk],0);
  end
else
Es soll geprüft werden, wann http= kommt und dann soll alles vor der folgenden IP-Adresse weggeschnitten werden, sodass nur noch IP:Port;gopher usw. übrig bleibt.

DANN soll ;gopher usw. weggeschnitten werden, sodass ich im Endeffekt alles habe, was in http= drinne steht und ab dem Semikolon alles weg ist.

Pseudemys Nelsoni 26. Jul 2005 13:49

Re: Ausschneiden mit Delete
 
Delphi-Quellcode:
function gettok(const s: string; const tokidx: integer; const c: char): string;
var
  i, n: integer;
  LastWasC: boolean;
begin
  result := ''; LastWasC := false;
  if (s <> '') and (tokidx > 0) then
  begin
    n := 0;
    for i := 1 to length(s) do
    begin
      if ((s[i] <> c) and (LastWasC)) or ((s[i] <> c) and (n = 0)) then
      begin
        inc(n);
        if n > tokidx then
          exit;
      end;
      if (s[i] <> c) and (n = tokidx) then
        result := result + s[i];
      LastWasC := s[i] = c;
    end;
  end;
end;

function numtok(const s: string; const c: char): integer;
var
  i: integer;
  LastWasC: boolean;
begin
  result := 0;
  if s <> '' then
  begin
    LastWasC := false;
    for i := 1 to length(s) do
    begin
      if (s[i] <> c) and ((LastWasC) or (result = 0)) then
        inc(result);
      LastWasC := s[i] = c;
    end;
  end;
end;

und dann ganz einfach:

Delphi-Quellcode:
procedure irgendwas;
const
  DeinString = 'ftp=195.100.85.159:3128;gopher=195.100.85.159:3128;http=195.100.85.159:3128;https=195.100.85.159:3128';
var
  I: Integer;
begin
  for I := 0 to NumTok(DeinString, ';') do
  begin
    if Copy(GetTok(DeinString, I, ';'), 1, 5) = 'http=' then
    begin
      Edit1.Text := GetTok(GetTok(DeinString, I, ';'), 1, ':'); // IP In Edit1
      Edit2.Text := GetTok(GetTok(DeinString, I, ';'), 2, ':'); // Port in Edit2
      Break;
    end;
  end;
end;

Jasocul 26. Jul 2005 13:51

Re: Ausschneiden mit Delete
 
Dann kannst du dir das erste if sparen.
Mit "Pos('http',s) > 0" stellst du das sowieso fest. Übrigens sind die Parameter bei dir falsch herum.
Schau mal auf meiner Homepage das "Tutorial" zur Stringverarbeitung an. Ich glaube, ich habe das dort sehr übersichtlich erläutert.

Kompon Ente 26. Jul 2005 13:53

Das geht auch kürzer, mein Arbeitskollege hatte mir das eben vorgemacht, aber irgendwas mach ich falsch :/

Es sind nur noch eine Zeile dazu oder so...

Aber ich weiß nicht, was fehlt bzw. was ich falsch mache :(

Kidix 26. Jul 2005 13:54

Re: Ausschneiden mit Delete
 
Delphi-Quellcode:
temp : string = 'ftp=195.100.85.159:3128;gopher=195.100.85.159:3128;http=195.100.85.159:3128;https=195.100.85.159:3128';

...

delete(temp,1,pos('http=',temp)+ 4);
Edit1.Text := copy(temp,1,pos(':',temp) - 1);
delete(temp,1,pos(':',temp));
Edit2.Text := copy(temp,1,pos(';',temp) - 1);

Kompon Ente 26. Jul 2005 14:12

:shock:

Schaps!

Delphi-Quellcode:
  if not ((Ord(s[1])>=48) and (Ord(s[1])<=57)) the
  begin
    if pos('http=',s) > 0 then
    begin
      Delete(s,1,pos('http=',s)-1);
      s := copy(s,6,pos(';',s)-6);
    end
    else
      MessageDlg('Kein HTTP-Proxy eingetragen!',mtInformation,[mbOk],0);
  end;

alf.stefan 27. Jul 2005 07:03

Re: Ausschneiden mit Delete
 
Hallo Leute

vielleicht ist das jetzt eine Holzhammermethode aber warum nicht einfach mit TStrings machen??

hier ist das was ich meine
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  sIps : TStrings;
  i : byte;
  sOut : string;
  onlyIp, Port: String;
  dp : byte;
const
  deinString : string = 'ftp=195.100.85.159:3128;gopher=195.100.85.159:3128;http=195.100.85.159:3128;https=195.100.85.159:3128';
begin
  sIpS := TStringList.Create;

  sIps.Delimiter := ';';
  sIps.DelimitedText := deinString;
  sOut := '';
  for i:= 0 to sIps.Count-1 do
  sOut := sOut+sIps.Strings[i]+#13#10;

  // alle
  ShowMessage(sOut);

  // nur http
  sOut := sIps.Values['Http'];
  ShowMessage(sOut);
  dp := pos(':',sOut);

  onlyIp := midStr(sOut,1,dp-1);
  Port := midStr(sOut,dp+1,length(sOut));

  showMessage(onlyIp+#13#10+port);


end;
was spricht dagegen es So zu machen???


Gruß

Stefan


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