[Langage C] Incompatibilité Sed et Langage C
bkrqpzef
Messages postés
213
Statut
Membre
-
bkrqpzef Messages postés 213 Statut Membre -
bkrqpzef Messages postés 213 Statut Membre -
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 ?
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:
- [Langage C] Incompatibilité Sed et Langage C
- Langage ascii - Guide
- Langage binaire - Guide
- Pascal langage - Télécharger - Édition & Programmation
- Langage visual basic - Télécharger - Langages
- Langage basic gratuit - Télécharger - Édition & Programmation
12 réponses
Salut,
A tout hasard...
- T'as essayé de changer de séparateurs ? (| ou §)
- T'as essayé sans l'option "-i" ?
A tout hasard...
- T'as essayé de changer de séparateurs ? (| ou §)
- T'as essayé sans l'option "-i" ?
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
?
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
?
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
En fait c'est un fichier .html que je modifie. (en bas de la page)
au départ j'ai :
et parfois je me retrouve avec :
parfois avec seulement :
etc..
Et même parfois je me retrouve avec une page complétement vide...
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...
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 ;-)
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
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
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
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
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
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
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...
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...