Remplacer dernier morceau d'une adresse IP

[Résolu]
Signaler
Messages postés
4
Date d'inscription
vendredi 31 janvier 2003
Statut
Membre
Dernière intervention
24 mars 2005
-
Messages postés
374
Date d'inscription
vendredi 20 octobre 2000
Statut
Modérateur
Dernière intervention
15 janvier 2021
-
Bonjour,

Pour des besoins professionnels, je dois faire un petit soft.
Dans ce soft je dois entrer l'IP et le gateway.
Chez nous, le gateway est toujours l'IP se terminant par 200.
Petit exemple : si IP = 192.168.0.1 alors le gateway sera 192.168.0.200

A l'aide d'une petite fonction (dont la base a été trouvée sur ce site), j'arrive à "mettre à jour en temps" réel le gateway par rapport à l'IP (quand j'entre un chiffre dans l'edit box de lIP, il entre automatiquement dans l'edit du gateway).
Comme edit box, j'utilise une TJvIPAdress du composant Jedi.

Mon problème vient de la dernière portion qui doit être remplacée par le 200.
J'ai bien des idées théoriques mais la pratique ne marche pas du tout.

Quelqu'un pourrait-il m'aider ?

Merci beaucoup,
Celt

7 réponses

Messages postés
1725
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
11 avril 2021
8
Heu, tu peux enlever PosPoint, c'est un résidu d'essai, donc :



function IP2Gateway(IP: String): String;

var i: Integer;

begin

Result := '';

for i := Length(IP) downto 1 do

if Ip[i] = '.' then

begin

Delete(IP, i +1, 3);

Break;

end;

Result := IP + '200';

end;




Bonne prog'
Messages postés
1725
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
11 avril 2021
8
Si j'ai bien compris, c'est un travail classique sur les strings.



Vite fait :



function IP2Gateway(IP: String): String;

var i, PosPoint: Integer;

begin

Result := '';

for i := Length(IP) downto 1 do

if Ip[i] = '.' then

begin

Delete(IP, i +1, 3);

Break;

end;

Result := IP + '200';

end;



Bonne prog'
Messages postés
374
Date d'inscription
vendredi 20 octobre 2000
Statut
Modérateur
Dernière intervention
15 janvier 2021

En plus rapide :

Function IP2Gateway(IP: String): String;
var P:Pchar;
Begin
Result:='';
P:=StrRScan(Pchar(Ip),'.');
If P<>Nil then
begin
Delete(ip,Length(ip)-StrLen(p),StrLen(p));
Result:=ip+'.200';
end;
end;

Si probleme le resultat seras vide ('');

If IP2Gateway('127.0.0.1')<>'' then
Showmessage('Le gateway est '+IP2Gateway('127.0.0.1')
else
Showmessage('Erreur lors de la conversion du getaway, veullez introduitre une ip valide');

Bon Coding ....

ManChesTer.
Messages postés
1725
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
11 avril 2021
8
Salut, ManChesTer.



Ca me rappelle quelque chose... (test if then else vs case of).



Dans une boucle de 1 à 100000, ma méthode semble plus rapide que la tienne de 10% au moins.

Mais je n'ai pas mesuré finement...



Bonne prog'



japee
Messages postés
4
Date d'inscription
vendredi 31 janvier 2003
Statut
Membre
Dernière intervention
24 mars 2005

Merci beaucoup.
Ca marche nickel.

Celt
Messages postés
374
Date d'inscription
vendredi 20 octobre 2000
Statut
Modérateur
Dernière intervention
15 janvier 2021

Yop Japee ;o))

Ca doit dépendre de la version et des options de compil, moi sur ma bécane sous d7 pour 10.000 execution j'ai (plus le chiffe est bas +c rapide):

896 pour ta routine
544 pour ma routine
421 pour la routine ci dessous (une obtimisation de la 1ere qui vire le strlength (inutile))

Function IP2Gateway(IP: String): String;
var P:Pchar;
Begin
Result:='';
P:=StrRScan(Pchar(Ip),'.');
If P=Nil then exit;
Delete(ip,Length(ip)-([mailto:p-@ip),4 p-@ip),4]);
Result:=ip+'.200';
end;

Bon Coding ....

ManChesTer.
Messages postés
374
Date d'inscription
vendredi 20 octobre 2000
Statut
Modérateur
Dernière intervention
15 janvier 2021

Arf vi,
Note que ton code est plus rapide pour un .1 que pour un .123
et pour contenter tous le monde mes test on été faits avec 127.0.0.99

Bon Coding ....

ManChesTer.