Decaler d'un parent dans un lien

Résolu
kuetedonald Messages postés 45 Date d'inscription vendredi 30 mai 2014 Statut Membre Dernière intervention 4 octobre 2016 - 31 mai 2014 à 11:41
korgis Messages postés 420 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 6 mai 2019 - 3 juin 2014 à 11:50
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

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
31 mai 2014 à 14:03
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;

0
korgis Messages postés 420 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 6 mai 2019 17
31 mai 2014 à 19:06
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;
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
1 juin 2014 à 15:26
@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
0
korgis Messages postés 420 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 6 mai 2019 17
3 juin 2014 à 11:50
@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;


@ +
0
kuetedonald Messages postés 45 Date d'inscription vendredi 30 mai 2014 Statut Membre Dernière intervention 4 octobre 2016 3
31 mai 2014 à 14:11
merci beaucoup c'est vraiment propre comme de l'eau de roche
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
31 mai 2014 à 14:33
Merci pour le compliment ;)

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