Visual micro VS / Arduino Präcompiler html-parser

OP #4959048
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
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?
OP
> 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
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
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).
sudo apt-get install xxd

sollte doch neuerdings auch unter Windows 10 gehen hab ich gelesen, 
nachdem MS jetzt unter der Macht der Konkurrenz eingeknickt ist und 
endlich Anstalten macht ihr System kompatibel zur Rest der Welt zu 
machen.
Gast
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
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
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.
OP
Hm ok, schau ich mir an. Soweit ich verstanden habe, kann ich 
shellscripte nur aus bash.exe heraus aufrufen, aber man kann sie 
irgendwie in batch-dateien einbauen. Dann könnte ich ja die batch in den 
Projektordner legen und von da aus ausführen... Einfach geht anders 
oder?
Persönliche Seite
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

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.