Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi string manipulieren (https://www.delphipraxis.net/40255-string-manipulieren.html)

acordo 13. Feb 2005 10:10


string manipulieren
 
Hallo

Ich möchte bei einer IP-Adresse die als String vorliegt den letzten Zahlenblock manipulieren, also aus z.B. 172.168.45.30 eine 172.168.45.33 machen. Diese Wertänderung soll über eine byte-Variable erfolgen. (Im oberen Beispiel hätte die Variable den Wert 3) Ich habe mit Pos bzw. StrPos gebastelt, aber leider :cry: kein vernünftiges Ergebnis erhalten.

gruss, harald

Sharky 13. Feb 2005 10:13

Re: string manipulieren
 
Hai acordo,

mal als Lösungsansatz: Du musst die Postition des dritten Punktes in dem String ermitteln. Dann alle Zeichen dahinter abschneiden oder alle zeichen von Position 1 bis zum dritten Punkt heraus kopieren. An diesen String musst Du dann nur noch deine Änderung anhängen.

acordo 13. Feb 2005 10:22

Re: string manipulieren
 
Hallo Sharky

Dein Lösungsansatz ist logisch klar !
Hier mein Versuch
Delphi-Quellcode:
var s:array[0..3]of byte
    ip:string;

for i:=0 to 3 do begin
  a[i]:=StrToInt(copy(ip),0,pos('.',ip)-1));
  delete(ip,0,pos('.',ip));
end;

ip:=StrToInt(a[0])+'.'+StrToInt(a[1])+'.'+StrToInt(a[2])'.'+StrToInt(a[3]+WERT);
Als Ergebnis bekomme ich bei IP=172.192.45.30 : 172.172.172.172

Sharky 13. Feb 2005 10:25

Re: string manipulieren
 
Hai acordo,

dein "Fehler" liegt darin das die Funktion Delphi-Referenz durchsuchenPos immer wieder am Anfang des Strings anfängt zu suchen und darum immer wieder den ersten Punkt findet. Schaue Dir mal die Funktion Delphi-Referenz durchsuchenPosEx an. Mit dieser solltest Du es dann schaffen.

acordo 13. Feb 2005 10:31

Re: string manipulieren
 
:( PosEx gibt es leider bei Delphi4 noch nicht.

Sharky 13. Feb 2005 10:36

Re: string manipulieren
 
Hier mal eine quick an dirty Lösung:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  oldIP : String;
  newIP : String;
  ndx : Integer;
  punkte : Integer;
begin
  oldIP := '192.168.1.23';
  punkte := 0;
  for ndx := 1 to Length(oldIP) do
  begin
    if (oldIP[ndx] = '.') then
    begin
      INC (punkte);
    end;
    if (punkte = 3) then
    begin
      newIP := Copy (oldIP,1,ndx);
      break;
    end;
  end;
  Label1.Caption := newIP; / Die alte IP ohne das letzte Oktet.
end;
Uff... was für ein Lösung :wall:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  oldIP : String;
  newIP : String;
  ndx : Integer;
begin
  oldIP := '192.168.1.23';
  punkte := 0;
  for ndx := Length(oldIP) downto 1 do
  begin
    if (oldIP[ndx] = '.') then
    begin
      newIP := Copy (oldIP,1,ndx);
      break;
    end;
  end;
  Label1.Caption := newIP;
end;

DP-Maintenance 13. Feb 2005 10:40

DP-Maintenance
 
Dieses Thema wurde von "Sharky" von "Sonstige Fragen zu Delphi" nach "Object-Pascal / Delphi-Language" verschoben.
Ist in dieser Sparte sicher besser aufgehoben :-)

Duffy 13. Feb 2005 10:53

Re: string manipulieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo acordo,
und noch ein Lösungsansatz. Siehe anhängende Demo.

bye
Claus

acordo 13. Feb 2005 11:07

Re: string manipulieren
 
DANKE !!

Hier mein funktionierendes Endresultat :

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  oldIP : String;
  newIP : String;
  IPLast : String
  ndx : Integer;
begin
  oldIP := '192.168.1.23';
  for ndx := Length(oldIP) downto 1 do
    if (oldIP[ndx] = '.') then
    begin
      newIP := Copy (oldIP,1,ndx);
      IPLast:= Copy(oldIP,ndx+1,Length(oldIP)-ndx);
      break;
    end;
  Label1.Caption := newIP+(IntToStr(StrToInt(IPLast)+WERT));
end;


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