Derouler simultanement 2 variables

Fermé
Pims - 18 août 2009 à 16:09
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 19 août 2009 à 17:56
Bonjour,

je suis sur u nprojet pour mettre a jour des fichier html

je doit donc faire différente modification sur le liens dans ces fichier ex: remplcer %20 par un espace et plusieur autre caractère

l'inconvenient et que j'ai stocké cette liste de caratère dans 2 fichier (carac spécial / carac remplacant ) pour qu'a l'avenir ce soit plus simple a modifier; cependant ca fait beaucoup d'operation d' I/O.

au debut de mon script je copie donc mes fichier chacun dans une variable.

puis je lance une boucle while en incrementant une variable pour au fur et a mesure recupérer le carc spécial et sont equivalent.

mais le faite de faire carc-spécial=$(echo liste_carac_special | cud -d: -f'$i') prend beaucoup de temps

auriez une solucion plus rapide a me proposer?

je souhaite garder le sistème de fichier pour une meilleur flexibilité pour l'avenir.

Merci
A voir également:

8 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
18 août 2009 à 16:34
Salut,

Pour t'aider à optimiser ton traitement encore faudrait-il qu'on en comprenne toutes les subtilités ;-\

Donc un petit exemple de ce que tu fais, fichier d'entrée, fichiers de correspondance et script seraient les bienvenus ;-)
0
ex :

Carac spéciaux | remplacant
|
& | &
é | e
Äô | a

vaoici un exemple de mes fichier

par la suite je recupère un lien html dans un fichier et fait un sed dessus


ligne=$(echo ligne| sed 's|\'$carac-special'|\'$carac-remplacant'|g');

il faut donc recupérer dans les variables carac-special et carac-remplacant les 2 caractère correspondant dans chacun des 2 fichier.

attention cette opération ce produit à chaque nouveau lien (total environ 50 000 liens)

merci
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
18 août 2009 à 16:50
Tu mets tes correspondances dans un fichier texte (encodage.sed) du genre :
s/[éèêë]/e/g
s/[àâä]/a/g
s/Äô/a/g
etc.
Puis tu appelles ton fichier :
ligne="$(echo $ligne| sed -f encodage.sed)"
;-))
0
d'abord merci

Mais ceraisse possible de faire ca ?


s/[éèêë]/e/g
s/[àâä]/a/g
s/Äô/a/g
etc.


Puis tu appelles ton fichier :

varsed=$(cat encodage.sed)

ligne="$(echo $ligne| sed -f $varsed)"

Merci
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
18 août 2009 à 17:47
Je ne vois pas l'intérêt ? ;-\
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
l'interert et de lire dans une variable (en Ram) qui aura ete chargé au début du soft plus que 1 acces fichier à chaque lien html dans mon fichier
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
19 août 2009 à 09:46
Ah ok... malheureusement non, on ne peut pas appeler le contenu d'une variable de cette manière avec "sed", il faut absolument que ce soit un fichier ;-(

J'avais peut-être pensé au Sticky_Bit, mais normalement c'est valable pour un exécutable, donc je ne sais pas si ça le fera aussi sur un fichier en lecture seule ? ;-\
0
Thx

je test puis je te dit ce que ca donne
0
dsl ca n'optimise pas beaucoupt


Sinon est-il possible de mettre chaque ligne d'un fichier dans une variable différente

je c que c possible

mais ce qui serai bien c'est que ca ce fasse automatiquement avec une longueur de fichier quequonque et le nom des variable qui s'incremente tout seul?

merci
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
19 août 2009 à 17:56
Dsl ca n'optimise pas beaucoup
Comment t'y-es-tu pris ?

Je pensais à ça :
- Créé un script bash (foo.sh) avec :
#! /bin/sh

sed '
s/[éèêë]/e/g
s/[àâä]/a/g
s/Äô/a/g
' <<<${@}
- Rendre le fichier exécutable avec le sticky-bit :
chmod 1755 foo.sh
- Puis à l'intérieur de ton script, avoir une ligne de traitement du genre :
ligne="$(./foo.sh ${ligne})" 
À tester...
0