[Langage C] Incompatibilité Sed et Langage C

Fermé
bkrqpzef Messages postés 197 Date d'inscription samedi 19 novembre 2005 Statut Membre Dernière intervention 13 juillet 2011 - 8 avril 2009 à 19:15
bkrqpzef Messages postés 197 Date d'inscription samedi 19 novembre 2005 Statut Membre Dernière intervention 13 juillet 2011 - 9 avril 2009 à 14:31
Bonjour à toutes et à tous,
Voilà j'ai fais un programme en C qui tourne sous linux.
Lorsque je lui demande d'effectuer une commande sed, celle-ci ne fonctionne jamais correctement.
Et c'est un véritable mystère.

Si j'utilise directement sed avec :
system("sed -i '#maison#bateau#' fichier.txt");
Cette méthode supprime ce qu'il y a à droite de maison (mais pas à chaque fois ...)

Cependant si j'écris cette même ligne dans un fichier .sh que j'éxécute après le programme, tout fonctionne parfaitement.

Mais le problème c'est que j'en suis à un point ou je ne peux plus faire un autre fichier pour plus tard. (Beaucoup de changement de dossier)
Si quelqu'un a une idée..
Des caractères spéciaux à ne pas utiliser peut être ?
A voir également:

12 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
8 avril 2009 à 19:30
Salut,

A tout hasard...

- T'as essayé de changer de séparateurs ? (| ou §)
- T'as essayé sans l'option "-i" ?
1
bkrqpzef Messages postés 197 Date d'inscription samedi 19 novembre 2005 Statut Membre Dernière intervention 13 juillet 2011 5
8 avril 2009 à 19:38
Oui changer les séparateur maintenant je sais faire. :D
Aucun changement.
Pour le "-i" étant donné que je dois modifier le fichier d'origine je ne sais pas trop comment m'en passer.

En faisant :
sed '#maison#bateau#' fichier.txt > fichier.txt
?
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
8 avril 2009 à 20:01
En faisant :
sed '#maison#bateau#' fichier.txt > fichier.txt
?

Oui ;-))
0
bkrqpzef Messages postés 197 Date d'inscription samedi 19 novembre 2005 Statut Membre Dernière intervention 13 juillet 2011 5
9 avril 2009 à 10:39
Désolé de l'attente, une urgence. :)
Oula avec ça je ne peux même pas ouvrir le fichier avec un éditeur de texte.
(Impossible de détecter le codage des caractères) UTF-8, iso8859-1 etc ....

En tout cas c'est un indice :D
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
9 avril 2009 à 10:57
system("sed -i '#maison#bateau#' fichier.txt"); 
Dis donc !!! Je m'aperçois qu'il manque la commande de "sed" = > s pour substitution !!!
system("sed -i 's#maison#bateau#' fichier.txt"); 
C'est une erreur de frappe ou le programme est comme ça ?
0
bkrqpzef Messages postés 197 Date d'inscription samedi 19 novembre 2005 Statut Membre Dernière intervention 13 juillet 2011 5
9 avril 2009 à 11:08
Faute de frappe sur le forum dsl.
Non pas d'erreur dans le programme.
0

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

Posez votre question
bkrqpzef Messages postés 197 Date d'inscription samedi 19 novembre 2005 Statut Membre Dernière intervention 13 juillet 2011 5
9 avril 2009 à 11:11
En fait c'est un fichier .html que je modifie. (en bas de la page)

au départ j'ai :
<div align="center">| maison | maison | maison |</div> 
</body>
</html>

et parfois je me retrouve avec :
<div align="center">| bateau | bateau | bateau |</div> 
</b

parfois avec seulement :
<div align="

etc..

Et même parfois je me retrouve avec une page complétement vide...
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
9 avril 2009 à 11:15
Essaye avec les séparateurs par défaut "/", dans la mesure où dans l'expression à modifier il n'y a pas de "slash"... sait-on jamais ;-)
0
bkrqpzef Messages postés 197 Date d'inscription samedi 19 novembre 2005 Statut Membre Dernière intervention 13 juillet 2011 5
9 avril 2009 à 11:20
pareil :'(
0
bkrqpzef Messages postés 197 Date d'inscription samedi 19 novembre 2005 Statut Membre Dernière intervention 13 juillet 2011 5
9 avril 2009 à 11:23
Sed n'a pas l'air de s'adapter dans ces cas là.
Une alternative à sed peut être ?
0
Bonjour,

sed '#maison#bateau#' fichier.txt > fichier.txt
Il n'y a pas de raison que ça marche. Vous écrasez le fichier avant de le traduire.

system("sed -i '#maison#bateau#' fichier.txt")
Je parierai que fichier.txt est en cours d'écriture par votre programme. Si oui, pensez à le fermer, ou au moins à faire un fflush() pour purger ce qui est resté en mémoire.

Manu
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
9 avril 2009 à 12:57
sed '#maison#bateau#' fichier.txt > fichier.txt
Il n'y a pas de raison que ça marche. Vous écrasez le fichier avant de le traduire.

Rhô p*tain, j'avais même pas fais gaffe à ça ;-[

Merci ;-))
0
bkrqpzef Messages postés 197 Date d'inscription samedi 19 novembre 2005 Statut Membre Dernière intervention 13 juillet 2011 5
9 avril 2009 à 13:20
Muhahaha bien vu Manu ;)
J'ai un peu modifié mon code et c'est bon !!
Le fichier était effectivement en lecture par fopen, un petit fclose avant la commande system : Nickel !!
Un conflit j'aurais du m'en douter... Merci :p
0
bkrqpzef Messages postés 197 Date d'inscription samedi 19 novembre 2005 Statut Membre Dernière intervention 13 juillet 2011 5
9 avril 2009 à 13:53
Ou pas en fait, j'ai été trop rapide !
J'ai en même temps sauté un chdir("../");
Du coup, c'est sûr que la cible n'était pas la même ....
Même problème après le fclose :p
0
bkrqpzef Messages postés 197 Date d'inscription samedi 19 novembre 2005 Statut Membre Dernière intervention 13 juillet 2011 5
9 avril 2009 à 14:31
Bon j'ai pas mieux que :
Créer un fichier .sh contenant toutes les instructions sed et différents cd, nommé script.sh par exemple.
Si j'appelle ce fichier directement dans le programme (bob.exe) avec un system("sh script.sh"); le problème est exactement le même.
Il faut donc un troisième fichier .sh pour lancer automatiquement bob.exe et le script.sh.
Mystère...
0