[shell linux] modifier des fichiers C automat
Résolu
Char Snipeur
Messages postés
9813
Date d'inscription
Statut
Contributeur
Dernière intervention
-
zipe31 Messages postés 36402 Date d'inscription Statut Contributeur Dernière intervention -
zipe31 Messages postés 36402 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
pour résumer, je cherche à faire un script permettant de modifier des fichiers sources C++.
J'ai un bon paquet de fichier ayant des structures anonymes sous cette forme :
MACRO_STR est une macro qui peut modifier le nom de la variable selon l'OS (je l'ai mis car ça peut aider).
et je voudrais donner un nom à chaque structure pour pouvoir la réutiliser après :
comme ça serait trop simple, les espaces peuvent variés d'un fichier à l'autre.
Je ne vois pas de manière simple de faire avec les outils classique de Linux.
Peut être avec awk, mais je ne le maitrise pas du tout (j'ai awk 3.1.1).
Merci.
pour résumer, je cherche à faire un script permettant de modifier des fichiers sources C++.
J'ai un bon paquet de fichier ayant des structures anonymes sous cette forme :
struct{ // corps de la structure avec que des variables }MACRO_STR(nomvar);
MACRO_STR est une macro qui peut modifier le nom de la variable selon l'OS (je l'ai mis car ça peut aider).
et je voudrais donner un nom à chaque structure pour pouvoir la réutiliser après :
struct _nomvar{ // corps de la structure avec que des variables }MACRO_STR(nomvar);
comme ça serait trop simple, les espaces peuvent variés d'un fichier à l'autre.
Je ne vois pas de manière simple de faire avec les outils classique de Linux.
Peut être avec awk, mais je ne le maitrise pas du tout (j'ai awk 3.1.1).
Merci.
A voir également:
- [shell linux] modifier des fichiers C automat
- Modifier dns - Guide
- Classic shell - Télécharger - Personnalisation
- Modifier liste déroulante excel - Guide
- Modifier extension fichier - Guide
- Renommer des fichiers en masse - Guide
2 réponses
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 ;-)
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).
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
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.
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 ;-)