Forum: Compiler & IDEs Visual micro VS / Arduino Präcompiler html-parser


von Phillip H. (philharmony)


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);

von Rufus Τ. F. (rufus) Benutzerseite


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?

von Phillip H. (philharmony)


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.

von Rufus Τ. F. (rufus) Benutzerseite


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".

von Phillip H. (philharmony)


Lesenswert?

Ah geil, genau sowas hab ich gesucht. Danke!

von Max (Gast)


Lesenswert?

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

Alternativ in Windows 10 einfach per Bash.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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

Was hat das mit der bash zu tun? Die ist nur 'ne shell.

von Phillip H. (philharmony)


Lesenswert?

puh...hättest nen Tipp für ein Tool? Breche mir grade einen ab mit der 
Suche...

von Bernd K. (prof7bit)


Lesenswert?

Rufus Τ. F. schrieb:
> Was hat das mit der bash zu tun? Die ist nur 'ne shell.

bash ist ein Script Interpreter mit nem interaktiven Prompt. Scripte 
dafür nennt man umganssprachlich  "shell script". Und ja, als shell kann 
man das auch gut nutzen, zu dem Zweck wurde es ja auch mal erfunden.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das ist sicherlich enorm hilfreich, insbesondere, wo es um xxd geht.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Der Sourcecode von xxd ist übrigens (u.a.) hier veröffentlicht:

https://opensource.apple.com/source/vim/vim-44/src/xxd/xxd.c


Oder hier:

https://github.com/ThatOtherPerson/xxd

von Max (Gast)


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).

von Bernd K. (prof7bit)


Lesenswert?

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.

von Phillip Hommel (Gast)


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?

von Phillip Hommel (Gast)


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

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Phillip H. (philharmony)


Lesenswert?

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?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

xxd ist kein Shellscript. Auch nicht, wenn man es aus der bash heraus 
aufruft.

von Phillip H. (philharmony)


Lesenswert?

Hm ok, da hängts bei mir aus. Meine Version von xxd kam mit der Windows 
Ubuntu Environment. Kann ich das auch auf anderem Weg aufrufen 
/ausführen als über die bash.exe?

von Rufus Τ. F. (rufus) Benutzerseite


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).

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.