Bonjour (je poste dans le forum algo, car ce probleme est recurent en bash, shell, C...)
Savez vous comment transformer une chaine de caractere contenant un chemin absolue, en chemin relative a une troisieme chaine de caractere ?
Bonjour (je poste dans le forum algo, car ce probleme est recurent en bash, shell, C...)
Savez vous comment transformer une chaine de caractere contenant un chemin absolue, en chemin relative a une troisieme chaine de caractere ?
all your base are belong to us.
bah tu cherches le dernier /, et tu supprimes tout jusque la...
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".
Consultant indépendant.
Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
C, Fortran, XWindow/Motif, Java
Je ne réponds pas aux MP techniques
Un peu court... Et faux.
Un chemin "relatif" n'a de sens que par rapport à un autre chemin, absolu celui-ci, tu as donc deux paramètres :
- le chemin absolu que tu veux convertir, appelons le PATH
- le chemin absolu par rapport auquel tu veux convertir PATH, appelons le BASE.
Il faut alors trouver le tronc commun de PATH et de BASE, les détails dépendent du système de fichier, mais par exemple sous Linux, on part de la racine et on prend le préfix commun le plus long entre PATH et BASE. Il faut alors établir de combien de répertoires il faut remonter à partir de BASE pour arriver au dernier répertoire commun à PATH et BASE, ça détermine combien de "../" tu dois enchaîner au début de ton chemin relatif, puis tu colle le suffixe de BASE au bout et ainsi tu as ton chemin relatif complet.
--
Jedaï
voui, je suis bien d'accord, mais vu la question, une fois que tu as la base (ce que tu as en enlevant tous les /), c'est quand meme pas mal facile de faire le relatif, non ?
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".
Consultant indépendant.
Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
C, Fortran, XWindow/Motif, Java
Je ne réponds pas aux MP techniques
bah c'est une question de point d evue...
Je pars toujours quant a moi d'un des 2 repertoires finaux...
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".
Consultant indépendant.
Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
C, Fortran, XWindow/Motif, Java
Je ne réponds pas aux MP techniques
En fait, pour un chemin absolu, on a une infinité de chemins relatifs. (Tout est relatif).
Comme le dis Jedai, il faut être relatif à quelque chose. Il te faut donc en entrée : le chemin absolu ET le répertoire à partir du quel tu veux créer ton chemin relatif.
Oui et non. Le système de fichiers fait une compression du chemin avant de l'utiliser (aka résolution), alors l' "infinité" de chemins relatifs est au final réduit à un seul (heureusement d'ailleurs).
Un moyen simple pour faire ce que demande le PO, c'est d'utiliser la même structure de données que le système de fichiers: généralement un arbre (ou un graphe si vous aimez les boucles).
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".
Consultant indépendant.
Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
C, Fortran, XWindow/Motif, Java
Je ne réponds pas aux MP techniques
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 l1 = longueur chaine 1 l2 = longueur chaine 2 l = min ( l1, l2) pour i = 0 jusqu'a i < l si chaine1(i) different de chaine2(i) base = chaine1 tronquee a i n = 0 pour j = i jusqu'a j < l si chaine1(j) egal / n = n + 1 fin si fin pour pour j = 0 jusqu'a j < n chaine_relative = "../" concatene a chaine_relative fin pour concatener chaine2[i]->chaine2[l-1] a chaine_relative sortie pour fin si fin pour
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".
Consultant indépendant.
Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
C, Fortran, XWindow/Motif, Java
Je ne réponds pas aux MP techniques
Si, à partir du moment où tu sais trouver le préfixe commun maximal (pas trop dur...) de deux chaînes et que tu sais compter le nombre de "/" dans une chaîne de caractères (j'admets qu'il s'agit d'une tâche difficile, ne pas oublier de normaliser les chemins bien sûr), ce que j'ai écris est suffisant, sans utiliser de structure d'arbre. Bien évidemment la structure d'arbre est sous-jacente à la méthode.
--
Jedaï
[grilled]![]()
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".
Consultant indépendant.
Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
C, Fortran, XWindow/Motif, Java
Je ne réponds pas aux MP techniques
Whaou ! Merci !!!!!
J'ai lu l'algo avec attention et cela me semble fonctionner !
Il me sera tres facile maintenant de l'écrire en C (que je fournirai quand je l'aurai implementé)
all your base are belong to us.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager