[Préprocesseur] Transformer statiquement un fichier texte en chaîne constante
1 réponse
slemarch
Bonjour,
J'aimerais transformer statiquement (à la compilation) un fichier
texte en chaîne de caractères constante... je m'explique :
Je voudrais obtenir un fichier entête qui contienne une macro qui
donne le contenu d'un fichier texte entre guillemets et avec les
caractères spéciaux (comme les guillemets par ex.) du texte échapés.
La seul méthode que je vois est l'écriture d'un petit script qui
génére le .h à partir du fichier texte.
Je préfererais réaliser ceci à partir du préprocesseur (à base
d'include ?), mais ça ne me semble pas possible... votre avis ?
avez-vous déjà rencontré ce besoin ? comment avez-vous alors procédé ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Marc Boyer
Seb LM wrote:
Bonjour,
J'aimerais transformer statiquement (à la compilation) un fichier texte en chaîne de caractères constante... je m'explique : Je voudrais obtenir un fichier entête qui contienne une macro qui donne le contenu d'un fichier texte entre guillemets et avec les caractères spéciaux (comme les guillemets par ex.) du texte échapés.
J'ai une solution à base de macros, mais qui nécessite l'ajout d'une virgule à la fin de chaque ligne: ------------------- main.c ----------------- #include <iostream> const char* messages[]={ #include "messages.h" }; int main(){ std::cout<<messages[0]<<messages[1]; return 0; } --------------- messages.h -------------- "A first message", "A second message"
La seul méthode que je vois est l'écriture d'un petit script qui génére le .h à partir du fichier texte. Je préfererais réaliser ceci à partir du préprocesseur (à base d'include ?), mais ça ne me semble pas possible... votre avis ? avez-vous déjà rencontré ce besoin ? comment avez-vous alors procédé ?
Disons que je ne vois pas de moyen qui évite d'ajouter un délimiteur en fin de ligne. Car, si mes souvenirs sont bons, pour le compilateur "toto" "tata" c'est la même chose que "tototata" ce qui permet d'écrire des chaines de caractères plus longues que la largeur de mon éditeur de texte sans avoir mal aux yeux, mais ça va poser problème dans ton cas.
Marc Boyer -- Lying for having sex or lying for making war? Trust US presidents :-(
Seb LM wrote:
Bonjour,
J'aimerais transformer statiquement (à la compilation) un fichier
texte en chaîne de caractères constante... je m'explique :
Je voudrais obtenir un fichier entête qui contienne une macro qui
donne le contenu d'un fichier texte entre guillemets et avec les
caractères spéciaux (comme les guillemets par ex.) du texte échapés.
J'ai une solution à base de macros, mais qui nécessite
l'ajout d'une virgule à la fin de chaque ligne:
------------------- main.c -----------------
#include <iostream>
const char* messages[]={
#include "messages.h"
};
int main(){
std::cout<<messages[0]<<messages[1];
return 0;
}
--------------- messages.h --------------
"A first message",
"A second message"
La seul méthode que je vois est l'écriture d'un petit script qui
génére le .h à partir du fichier texte.
Je préfererais réaliser ceci à partir du préprocesseur (à base
d'include ?), mais ça ne me semble pas possible... votre avis ?
avez-vous déjà rencontré ce besoin ? comment avez-vous alors procédé ?
Disons que je ne vois pas de moyen qui évite d'ajouter un
délimiteur en fin de ligne.
Car, si mes souvenirs sont bons, pour le compilateur
"toto"
"tata"
c'est la même chose que
"tototata"
ce qui permet d'écrire des chaines de caractères plus
longues que la largeur de mon éditeur de texte sans
avoir mal aux yeux, mais ça va poser problème dans ton cas.
Marc Boyer
--
Lying for having sex or lying for making war? Trust US presidents :-(
J'aimerais transformer statiquement (à la compilation) un fichier texte en chaîne de caractères constante... je m'explique : Je voudrais obtenir un fichier entête qui contienne une macro qui donne le contenu d'un fichier texte entre guillemets et avec les caractères spéciaux (comme les guillemets par ex.) du texte échapés.
J'ai une solution à base de macros, mais qui nécessite l'ajout d'une virgule à la fin de chaque ligne: ------------------- main.c ----------------- #include <iostream> const char* messages[]={ #include "messages.h" }; int main(){ std::cout<<messages[0]<<messages[1]; return 0; } --------------- messages.h -------------- "A first message", "A second message"
La seul méthode que je vois est l'écriture d'un petit script qui génére le .h à partir du fichier texte. Je préfererais réaliser ceci à partir du préprocesseur (à base d'include ?), mais ça ne me semble pas possible... votre avis ? avez-vous déjà rencontré ce besoin ? comment avez-vous alors procédé ?
Disons que je ne vois pas de moyen qui évite d'ajouter un délimiteur en fin de ligne. Car, si mes souvenirs sont bons, pour le compilateur "toto" "tata" c'est la même chose que "tototata" ce qui permet d'écrire des chaines de caractères plus longues que la largeur de mon éditeur de texte sans avoir mal aux yeux, mais ça va poser problème dans ton cas.
Marc Boyer -- Lying for having sex or lying for making war? Trust US presidents :-(