[shell linux] modifier des fichiers C automat
Résolu/Fermé
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
-
3 mai 2011 à 10:12
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 3 mai 2011 à 16:26
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 3 mai 2011 à 16:26
A voir également:
- [shell linux] modifier des fichiers C automat
- Modifier dns - Guide
- Modifier liste déroulante excel - Guide
- Comment modifier un pdf - Guide
- Modifier story facebook - Guide
- Modifier extension fichier - Guide
2 réponses
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 418
3 mai 2011 à 11:07
3 mai 2011 à 11:07
Salut,
Je ne sais pas si c'est vraiment ça que tu attends, mais bon...
A adapter si toutefois c'était bien tes espérances, je n'ai fait qu'avec les éléments fournis ;-)
Je ne sais pas si c'est vraiment ça que tu attends, mais bon...
$ cat plop struct{ // corps de la structure avec que des variables }MACRO_STR(nomvar1); struct{ // corps de la structure avec que des variables }MACRO_STR(nomvar2); struct{ // corps de la structure avec que des variables }MACRO_STR(nomvar3); $ sed '/^struct/{:z;N;/MACRO_STR(.*)\;$/! bz;s/\([^{]*\){\(.*(\)\([^)]*\));/\1 _\3{\2\3);/}' plop struct _nomvar1{ // corps de la structure avec que des variables }MACRO_STR(nomvar1); struct _nomvar2{ // corps de la structure avec que des variables }MACRO_STR(nomvar2); struct _nomvar3{ // corps de la structure avec que des variables }MACRO_STR(nomvar3); $
A adapter si toutefois c'était bien tes espérances, je n'ai fait qu'avec les éléments fournis ;-)
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
3 mai 2011 à 14:31
3 mai 2011 à 14:31
un exemple plus concret :
En fait, je viens de me rendre compte (après quelques essais bidouillé) que ce que je fais ne va pas.
En fait, il faut récupérer le bloc struct (avec un nom) et le mettre dans un autre fichier (en effet, il s'agit de fichier .c et non de .h, donc je ne peut pas récupérer les types définis).
struct{ int j; double f; }MACRO_STR(nomvar1); struct{ int n; int g; double lm; }MACRO_STR(nomvar2); class machin { double MACRO_STR(variC1); double MACRO_STR(variC2); //... };
En fait, je viens de me rendre compte (après quelques essais bidouillé) que ce que je fais ne va pas.
En fait, il faut récupérer le bloc struct (avec un nom) et le mettre dans un autre fichier (en effet, il s'agit de fichier .c et non de .h, donc je ne peut pas récupérer les types définis).
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 418
3 mai 2011 à 14:35
3 mai 2011 à 14:35
;-((
Sinon, si ça peut servir en réponse à la demande initiale :
;-))
Sinon, si ça peut servir en réponse à la demande initiale :
sed '/\bstruct/{:z;N;/}MACRO_STR(.*)\;$/! bz;s/\([^{]*\){\(.*(\)\([^)]*\));/\1 _\3{\2\3);/}'
;-))
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
3 mai 2011 à 14:56
3 mai 2011 à 14:56
merci. Je vais essayé de comprendre tout ça maintenant, et je pense rajouter quelques conditions d'espaces éventuelles.
Si je comprend bien, tu n'as pas d'idée pour extraire juste le bloc de structure afin de le mettre dans un autre fichier.
encore merci.
Si je comprend bien, tu n'as pas d'idée pour extraire juste le bloc de structure afin de le mettre dans un autre fichier.
encore merci.
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 418
3 mai 2011 à 15:01
3 mai 2011 à 15:01
Si je comprend bien, tu n'as pas d'idée pour extraire juste le bloc de structure afin de le mettre dans un autre fichier.
Si si, je croyais qu'en disant ça tu voulais faire totalement autre chose ;-((
Si si, je croyais qu'en disant ça tu voulais faire totalement autre chose ;-((
sed -n '/\bstruct/{:z;N;/}MACRO_STR(.*)\;$/! bz;s/\([^{]*\){\(.*(\)\([^)]*\));/\1 _\3{\2\3);/p}' fich_entrée > fich_sortie
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
Modifié par Char Snipeur le 3/05/2011 à 16:12
Modifié par Char Snipeur le 3/05/2011 à 16:12
parfait ça fonctionne. à une exception pret, dans un fichier j'ai :
Je ne comprend pas bien l'effet du "-n"
// extern "C" struct { struct{Mais c'est pas grave, pour un je modifie à la main.
Je ne comprend pas bien l'effet du "-n"
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 418
Modifié par zipe31 le 3/05/2011 à 16:17
Modifié par zipe31 le 3/05/2011 à 16:17
à une exception pret
Évidemment il fallait qu'il y en ait une ;-((
Le "-n" (no-print) marche de paire avec le flag "p" (en fin d'instruction). Il empêche l'affichage de s'effectuer, sauf si on le lui demande explicitement avec le flag "p" (print).
Voir dans la faq sur sed...
Évidemment il fallait qu'il y en ait une ;-((
Le "-n" (no-print) marche de paire avec le flag "p" (en fin d'instruction). Il empêche l'affichage de s'effectuer, sauf si on le lui demande explicitement avec le flag "p" (print).
Voir dans la faq sur sed...
3 mai 2011 à 12:37
C'est exactement ce que je cherchais à faire ;-D merci !
Une petite différence toutfois, c'est le "^" devant struct, je ne suis pas sur de sa définition... Je crois que ça veux dire que struct est le premier mot de la ligne, ce qui n'est pas forcément le cas. J'ai remplacé par "\b" qui semble fonctionné (si tu vois un problème éventuel n'hésite pas).
En revanche, j'ai un autre problème : MACRO_STR est utilisé à d'autres endroits du code. J'avais oublié cette contrainte dans mon premier message.
3 mai 2011 à 12:46
Non dans la mesure où on ne le retrouve qu'à l'intérieur d'un mot dans les autres cas et que c'est le seul cas susceptible de se présenter ;-\
En revanche, j'ai un autre problème : MACRO_STR est utilisé à d'autres endroits du code.
Il me faudrait des exemples précis afin d'optimiser le code au plus juste ;-\
Merci ;-)