Visual micro VS / Arduino Präcompiler html-parser

#4959048
Lesenswert?

Hallo zusammen,
Gibt es eine Möglichkeit, um vor dem Kompilieren html-Dateien als 
String/chararray einzulesen?
Background: ich benutze ein Esp12 Modul für einen kleinen Webserver, und 
ich möchte die Seiten möglichst komfortabel erstellen und dann einbinden 
können.
Wenn ich den html-Text im Quellcode zurdne, dann muss ich ja lauter 
Escape-Chracter und quotes setzen. Das macht nachträgliche Änderungen 
etwas mühsam.

Also anstatt:
1
char myWebsite[] = {
2
"htmlcode\n\
3
<formatierungen>\n\
4
<scripte etc>"} ;
5
Webserver.println(myWebsite);
6
}
Sowas in der Art;
1
 #include myWebsite.html
2
char myWebsite[] ;
3
Oder 
4
string myWebsite ;
5
Bzw
6
const string myWebsite = FuntkionDieIchSuche(myWebsite.html);
7
FunktionDieIchSuche(Website, myWebsite.html);
8
Webserver.println(Website);
Persönliche Seite #4959188
Lesenswert?

Phillip H. schrieb:
> Wenn ich den html-Text im Quellcode zurdne, dann muss ich ja lauter
> Escape-Chracter und quotes setzen.

Schreib Dir ein Script, das das erledigt, und rufe das Script vor dem 
Compilieren auf. Das lässt sich auch als "pre-build-step" in die 
Projektverwaltung des Visual Studio integrieren.

Als Funktion im Quelltext kann das nicht funktionieren, oder hat Dein 
ESP8266 ein Dateisystem, auf das er zugreifen kann?
#4959205
Lesenswert?

> Schreib Dir ein Script, das das erledigt, und rufe das Script vor dem
> Compilieren auf. Das lässt sich auch als "pre-build-step" in die
> Projektverwaltung des Visual Studio integrieren.

Hab ich noch nie gemacht, werd mich mal einlesen, danke!

> Als Funktion im Quelltext kann das nicht funktionieren, oder hat Dein
> ESP8266 ein Dateisystem, auf das er zugreifen kann?

Ne hat er per sé nicht. Es sollte eben auch nicht zur Laufzeit geparsed 
werden sondern vor dem Compilen, als Makro o.ä., nur um mir das Leben 
leichter zu machen, die Seiten sind statisch.
Dazu ja deine erste Antwort mit dem Skript. Danke nochmal.
Persönliche Seite #4959232
Lesenswert?

Es gibt Tools, die einen Hexdump einer Datei in einem C-kompatiblen 
Format erzeugen. Diese Hexdump-Dateien lassen sich zwar im Editor nicht 
sinnvoll verarbeiten, aber das kann Dir bei o.g. Vorgehensweise ja auch 
wurscht sein.

Auf linuxartigen Systemen gibt es da xxd, das mit der 
Kommandozeilenoption -i genau das erledigt.

Hier ein Beispiel anhand einer Textdatei namens "bla.txt":
1
xxd -i bla.txt > bla.c

1
unsigned char bla_txt[] = {
2
  0x69, 0x63, 0x68, 0x20, 0x62, 0x69, 0x6e, 0x20, 0x65, 0x69, 0x6e, 0x20,
3
  0x74, 0x65, 0x78, 0x74, 0x0a, 0x0a
4
};
5
unsigned int bla_txt_len = 18;

xxd ist auch für Windows verfügbar, z.B. findet es sich in den "gnu 
utilities".
Gast #4963290
Lesenswert?

Rufus Τ. F. schrieb:
> Das ist sicherlich enorm hilfreich, insbesondere, wo es um xxd geht.

Evtl. schon (falls der TO Windows 10 verwendet).

Rufus Τ. F. schrieb:
> xxd ist auch für Windows verfügbar, z.B. findet es sich in den "gnu
> utilities".

Max schrieb:
> Alternativ in Windows 10 einfach per Bash.

Bash öffnen und dann xxd laut deiner Anleitung verwenden (als 
Alternative zur Installation der GNU utilities).
Gast #4963800
Lesenswert?

Also, GNUUtilities gibts nicht für Win64 (oder doch? Link?), die 
UbuntuEnvironment mit Bash unter Windows findet xxd nicht
-> sudo apt-get install xxd -> Paket xxd kann nicht gefunden werden.
Habe diverse xxd Installationen probiert, aber keine mit mit Parameter 
-i tatsächlich das .c file mit der variable[]{...} Struktur draus, wie 
es laut doku eigentlich sein sollte...Weitere Ideen?
Gast #4963852
Lesenswert?

Ich nehm alles zurück, es geht. Doofi wollte test.html "dumpen", wo die 
Datei doch test.htm heisst...
Jetzt der nächste Schritt, wie kriege ich das ganze als Pre Build Step 
in Visual Studio.
Habe schon im Projektmappenexplorer in den Eigentschaften die 
"Benutzerdefinierten Buildschritte" gefunden, unter "allgemein" und 
"vorher ausführen".
Und da endet es bisher. Kann ich den Bash command "xxd -i datei.html 
datei.c" hier direkt aufrufen, oder schreibe ich ein script und rufe das 
auf? Bei beidem ist mir nicht klar, wie ich das hier eingebe.
Sorry wenn die Fragen doof sind, mit C und C++ Code komme ich gut klar, 
aber für das ganze gescripte fehlt mir einfach die Erfahrung.
LG
Persönliche Seite #4964364
Lesenswert?

Wenn es nicht bash sein muss, sondern xxd auch auf normalen Wege 
aufgerufen werden kann, kannst Du tatsächlich "xxd -i datei.html 
datei.c" in Deinen "benutzerdefinierten Buildschritt" eintragen.

Allerdings wirst Du entweder absolute Pfade für die Dateien angeben 
müssen (schlecht) oder aber die verschiedenen Umgebungsvariablen nutzen, 
die Dir das Visual Studio zur Verfügung stellt. Zum Aufruf von xxd muss 
xxd entweder in einem Verzeichnis liegen, das im Pfad enthalten ist 
(Umgebungsvariable "PATH") oder aber der absolute Pfad auf xxd.exe 
angegeben werden.

Die schnellste, wenn auch nicht zu bevorzugende Variante ist also
1
"c:\da wo mein geraffel liegt\xxd" -i "c:\meine projekte\projekt x\datei.html" "c:\meine projekte\projekt x\datei.c"

... und "datei.c" muss natürlich im Projekt als zu übersetzende Datei 
eingefügt werden.
Persönliche Seite #4964559
Lesenswert?

Keine Ahnung.

Ich habe Dir einen Link auf das Sourcefile von xxd gepostet, daraus ein 
natives Windows-Exe-File zu machen ist mit Visual Studio (resp. dem 
darin enthaltenen C-Compiler) eine Sache von fünf Minuten.

Warum man deswegen eine Linux-Emulationsumgebung mit anderer Shell 
verwenden muss, entzieht sich meinem Verständnis, aber das Konzept ist 
ja auch andernorts beliebt (cygwin).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren