Forum: Compiler & IDEs Zeichenketten aus externen Dateien


von Thomas (Gast)


Lesenswert?

Hallo,
ich würde gerne einen längeren Text den ich im Flash ablegen möchte aus
einer externen Datei in mein Programm übernehmen.
Habe das eben mal so gemacht:

const uint8_t index_html[] PROGMEM=
#include "index.html"

In der Datei index.html muss ich dann aber die Anführungszeichen am
Anfang und am Ende hineinschreiben. Außedem kann ich keine
Zeilenumbrüche in diese Datei einfügen, dann bekomme ich ein:

index.html:1: error: missing terminating " character

Schön sieht das mit dem include an dieser Stelle ja auch nicht aus.
Gibt es hierfür eine komfortablere Lösung? Schön sieht das mit dem
include an der Stelle ja auch nicht aus.

von Karl H. (kbuchegg)


Lesenswert?

Ohne die *.html Datei zu bearbeiten hast du so keine
Chance.

Dann kannst du die Sache mit dem #include durchziehen.

Hint: Diese Bearbeitung kann aber ein anderes, von dir
zu schreibendes, Programm machen :-)

  Original Datei auf
  Neue Datei erzeugen
  solange eine Zeile gelesen werden konnte
    Am Anfang der Zeile ein " einfügen
    Am Ende der Zeile ein "\n\"" einfügen
    geänderte Zeile in die neue Datei schreiben
  Neue Datei zu
  Original Datei zu
  Original Datei löschen
  Neue Datei umbennenen auf den Namen der Origianldatei

Alternativ könnte man das auch mit Stream-Editoren
ala awk oder sed machen. Aber ein Pgm dafür zu schreiben
ist eine gute Übung.

von Rolf Magnus (Gast)


Lesenswert?

HTML-Dateien enthalten oft selbst das ", also sollte man das noch
escapen.

von Thomas (Gast)


Lesenswert?

Habs mal mit sed probiert:

sed
's/\''/\\\'\'/g;s/"/\\\"/g;s/^^/\\"/g;s/$/\\"/g'
index.html > index.tmp
sed $'s/$/;/g' index.tmp > index_inc.html
rm index.tmp

Escaped ' und ", fügt am Zeilenanfang und -ende ein " hinzu. In der
letzten Zeile wird noch ein ; angehängt. Die Newlines habe ich
weggelassen um Platz zu sparen.
Für den Zeilenanfang muss man unter der Windows-Umgebung ein ^^
einsetzen, laut Doku sollte aber ein einfaches ^ reichen.
Muss nur noch sehen wie man das ein das Makefile einbauen kann...

von Thomas (Gast)


Angehängte Dateien:

Lesenswert?

Um das Ganze mal abzuschließen:

Anbei eine Batchdatei mit den sed-Befehlen die die Umwandlung
vollzieht. Das Einbinden der konvertierten Dateien geschieht dann
folgendermaßen:

const char index_html[] PROGMEM=
#include "index.html_inc"

Im Makefile dann im Abschnitt all: folgendes hinzufügen:

# Default target.
all: begin htmltoinc

Einen neuen Abschnitt htmltoinc (wichtig sind die Tabs für die
Einrückungen):

# HTML-Dateien in Format für includierung wandeln
htmltoinc:
  @echo Konvertiere HTML-Dateien...
  html_to_inc.bat index.html index.html_inc
  @echo ...beendet.
  @echo


unter clean_list:
$(REMOVE) *.html_inc

fertig.

Mit Make all werden dann die angegebenen HTML-Dateien konvertiert.

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.