Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[Préprocesseur] Transformer statiquement un fichier texte en chaîne constante

1 réponse
Avatar
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é ?

Merci d'avance,

-- Seb LM

1 réponse

Avatar
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 :-(