Decaler d'un parent dans un lien

Résolu
kuetedonald
Messages postés
49
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
3832
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
17 février 2022
48
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
16
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
3832
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
17 février 2022
48
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
16
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
49
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
3832
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
17 février 2022
48
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
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
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