Decaler d'un parent dans un lien [Résolu]

Signaler
Messages postés
49
Date d'inscription
vendredi 30 mai 2014
Statut
Membre
Dernière intervention
4 octobre 2016
-
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
-
Bonjour, j'ai le lien suivant
http://personal.psu.edu/tao5048/texte.html et voulait que l'on me retournehttp://personal.psu.edu/tao5048/ .j'ai essayer extractfilePath et extractfileName sans success.
svp j'ai vraiment besion de votre aide

3 réponses

Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
42
Salut,

ceci devrait fait ton bonheur :D
{ renvoie tout ce se trouve avant le dernier "/"  y compris}
function ExtractUrlFilePath(const aUrl: string): string;
var
{$ifdef  unicode}
    Ptr : PWord;
{$else}
    Ptr : PByte;
{$endif}
    I, Lng :  Integer;
begin
  Result := aUrl;
  Lng := Length(aUrl);
  Ptr := @Result[Lng];
  for I := Lng downto  1 do
  begin
    if Ptr^ = $2F then Break;
    Dec(Ptr);
  end;
  Inc(Ptr);
  Ptr^ := $0;
  Result := Pchar(Result);
end;

Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
16
Salut,

Joli bout de code.
Attention à la possibilité que "aUrl" soit une chaîne vide.
Sans dénaturer le code, on peut gérer cette possibilité ainsi :

function ExtractUrlFilePath(const aUrl: string): string;
var
{$ifdef  unicode}
    Ptr : PWord;
{$else}
    Ptr : PByte;
{$endif}
    I, Lng :  Integer;
begin
  Result := '';
  Lng := Length(aUrl);
  Ptr := @aUrl[Lng];
  for I := Lng downto  1 do
  begin
    if Ptr^ = $2F then Break;
    Dec(Ptr);
  end;
  Inc(Ptr);
  if Ptr <> nil then // <- rajouté
    Ptr^ := $0;
  Result := Pchar(aUrl);
end;
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
42
@Korgis:

oui tu as entièrement raison ... Merci

mais une petite erreur s'est glissée au début du code modifié du coup le code ne plante plus quand la string est vide mais pleine ... mouahahahahaha ^^

Result := '';
à la place de
Result := aUrl;

voici donc le code final:
{ renvoie tout ce se trouve avant le dernier "/"  y compris}
function ExtractUrlFilePath(const aUrl: string): string;
var
{$ifdef  unicode}
    Ptr : PWord;
{$else}
    Ptr : PByte;
{$endif}
    I, Lng :  Integer;
begin
  Result := aUrl;
  Lng := Length(aUrl);
  Ptr := @Result[Lng];
  for I := Lng downto  1 do
  begin
    if Ptr^ = $2F then Break;
    Dec(Ptr);
  end;
  Inc(Ptr);
  if Ptr <> nil then // <- rajouté  par Korgis ... Merci
  Ptr^ := $0;
  Result := Pchar(Result);
end;


et bon Dimanche à tous ;)
@+ Cirec
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
16
@Cirec

Bizarre... je vois pas où ça coince
(n'aurais-tu pas mal recopié-collé le code ?)
Chez moi (D7) ça marche sans problème, string vide, string pleine, string à moitié plein...
(ou alors c'est moi qui le suis... ;-)
Par contre, je m'aperçois que la première instruction est inutile :

function ExtractUrlFilePath2(const aUrl: string): string;
var
{$ifdef  unicode}
    Ptr : PWord;
{$else}
    Ptr : PByte;
{$endif}
    I, Lng :  Integer;
begin
  //Result := '';   // <- inutile
  Lng := Length(aUrl);
  Ptr := @aUrl[Lng];
  for I := Lng downto  1 do
  begin
    if Ptr^ = $2F then Break;
    Dec(Ptr);
  end;
  Inc(Ptr);
  if Ptr <> nil then // <- !
    Ptr^ := $0;
  Result := Pchar(aUrl);
end;


@ +
Messages postés
49
Date d'inscription
vendredi 30 mai 2014
Statut
Membre
Dernière intervention
4 octobre 2016
3
merci beaucoup c'est vraiment propre comme de l'eau de roche
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
42
Merci pour le compliment ;)

je suis content que ça te plaise ... il ne reste plus qu'à marquer comme résolu
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
Hey Cirec, quelques petits commentaires sur ton code y apporteraient un intérêt pédagogique non négligeable... ;-)