 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Bärenmaster

Anmeldungsdatum: 24.03.2005 Beiträge: 11
|
Verfasst am: 28.03.2005, 19:49 Titel: HTML Konverter |
|
|
Moin Moin zusammen,
ich hab mich mal an einen TXT - HTML Konverter gewagt, der TXT Dateien in HTML umwandelt. Die txt Datei wird auch erfolgreich gelesen, aber irgendwie wird keine HTML Datei gespeichert...
Kann mir wer helfen?
Hier der Code:
Code: |
DECLARE SUB convert (dateitxt$)
CLS
SCREEN 0
COLOR 0, 7
CLS
LOCATE 2, 30: PRINT "TXT - HTML Konvertierer"
LOCATE 3, 8: PRINT "----------------------------------------------------------"
_
LOCATE 8, 20: LINE INPUT "Gebe den Dateinamen und den Pfad ein: ", dateitxt$
LOCATE 9, 20: PRINT "Konvertierung läuft. Bitte warten.."
LOCATE 10, 10: PRINT "********************************************************
CALL convert(dateitxt$)
CLS
LOCATE 12, 20: PRINT "Konvertierung erfolgreich."
LOCATE 13, 10: PRINT "********************************************************"
LOCATE 14, 20: PRINT "Drücke ESC um das Programm zu beenden."
END
|
Das war das Hauptprogramm, hier die Sub convert:
[img]
http://www.mr-teddy.de/Bilder/qbasic.gif
[/img]
Die Sub konnte ich aus irgendwelchen Gründen nicht kopieren, darum hab ich einfach einen Screenshot davon gemacht - ich hoffe, das ist kein Problem.
Kann mir einer erklären, warum keine .html Datei ausgegeben wird? Ist bestimmt wieder ein kleiner Fehler, den ich übersehen habe... so wie immer  |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 28.03.2005, 20:17 Titel: |
|
|
Hallo.
Nimm für sowas bloß kein WRITE!
Deine HTML-Datei sähe dann in etwa so aus:
Code: | "<", "p align=left", ">"
usw. |
Aaaalso:
Code: | INPUT "Formatierung? ", f%
SELECT CASE f%
CASE 1: Form$="left"
CASE 2: Form$="center"
CASE 3: Form$="right"
CASE ELSE: Form$="left"
END SELECT
OPEN "TEST.TXT" FOR INPUT AS #1
OPEN "TEST.HTM" FOR OUTPUT AS #2
PRINT #2, "<html>"
PRINT #2, "<head>"
PRINT #2, "<title>LOL</title>"
PRINT #2, "</head>"
PRINT #2, "<body>"
PRINT #2, "<p align=";CHR$(34);Form$;CHR$(34);">";
DO UNTIL EOF(1)
LINE INPUT #1, Textzeile$
PRINT #2, Textzeile$;"<br>"
LOOP
PRINT #2, "</p>"
PRINT #2, "</body></html>"
CLOSE #1, #2 |
Fertig!
Bei dir wird übrigens keine Datei angelegt, weil du den HTML Dateinamen falsch bildest. Du musst erst die Endung der Textdatei abschneiden und dann erst HTM dranhängen:
Code: | htmlfile$ = LEFT$(txtfile$, LEN(txtfile$)-3)+"HTM" |
Statt der IFs würde ich wie oben SELECT CASE nehmen.
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 28.03.2005, 20:28 Titel: |
|
|
Beim Inhalt will man vermutlich noch eine Umwandlung in Character Entities... ;-)
Grundproblem hier: Soll die Quelle als ISO 8859-1 oder IBM Codepage 437 daherkommen? Ansonsten vollständige Tabelle mit Entities:
http://www.w3.org/TR/html401/sgml/entities.html
Und damit es nicht vergessen geht: Wenn schon ein Konverter, dann auch das <!DOCTYPE ..> hineinnehmen!
Evtl. kann auch noch etwas zusätzliche Intelligenz erwünscht sein, z.B. Zeilenendzeichen in <BR> umwandeln, doppelte Zeilenumbrüche als Beginn eines neues Absatzes (Paragraph) betrachten => </P> + <P>
Das Tüpfchen aufs i wäre dann noch z.B. die erste Zeile als Titel zu betrachten => bei <TITLE> einfügen und als <H1> statt <P> am Anfang hineinnehmen + eine automatische Suche der häufigsten Wörter und diese als <META name="keywords" ..> hineinnehmen. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
Bärenmaster

Anmeldungsdatum: 24.03.2005 Beiträge: 11
|
Verfasst am: 28.03.2005, 20:35 Titel: |
|
|
Vielen Dank für die prompte Antwort!
Ich habe es jetzt soweit geändert, es wird auch eine .HTML Datei erstellt, doch als Inhalt wird aus irgendwelchen mir unbekannten Gründen "<html>" genommen und geschrieben.
Hab ich noch irgendetwas übersehen?
Ich hab bis jetzt nur Write mit Print vertauscht und die Endung nach deiner Anweisung (mit meinen Variablen, versteht sich) geändert, sonst ist alles gleich geblieben.
@ dreal:
Klar, und von der gesamten Festplatte wird gleichzeitig ein Backup erstellt, was dann ins Netz geladen wird
Ne, ich wollt erstmal klein anfangen, und wär schon heilfroh, wenn so was einfaches funktioniert. Die ganzen Details können ja irgendwann mal nachkommen...
*edit*
Ah, tut mir leid, ich habe mich etwas versehen:
Es wird von der TXT Datei nur die erste Zeile in die HTML Datei gegeben. Müsste ich das theorethisch nicht mit INPUT #2, inhalt$ beheben können? also statt Line Input einfach nur Input? Oder steh ich grad aufm Schlauch ?
Zuletzt bearbeitet von Bärenmaster am 28.03.2005, 20:43, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 28.03.2005, 20:42 Titel: |
|
|
könnte es sein, dass bei dir nur jeweils die erste zeile der TXT gelesen und "konvertiert" wird?
LINE INPUT #1, inhalt$
wird nur 1x ausgeführt.
auch noch seltsam:
dateihtml$ = dateitxt$ + ".html"
erstens kann QB nur mit dateierweiterungen bis zu 3 zeichen arbeiten (=> ..+".htm"), und wenn es eine TXT sein soll, dann müsstest du erst mal die alte erweiterung rauslöschen.
hats geholfen?
Wird das Prog eigentlich mit fehlermeldung beendet, oder läufts ganz normal ab? _________________ fully biological degradable
Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet. |
|
Nach oben |
|
 |
Bärenmaster

Anmeldungsdatum: 24.03.2005 Beiträge: 11
|
Verfasst am: 28.03.2005, 20:47 Titel: |
|
|
Jo hast Recht gehabt, Danke!
Hätte vielleicht doch etwas länger schlafen sollen als 3 Stunden
Ich kann das Problem dann doch einfach mit einer While Schleife beheben, oder? Einfach bis zum Ende der Datei wird das ausgelesen.
Vielen Dank für die Hilfe!
Ach ja, das Programm wird ohne Fehlermeldung ausgeführt. |
|
Nach oben |
|
 |
Bärenmaster

Anmeldungsdatum: 24.03.2005 Beiträge: 11
|
Verfasst am: 28.03.2005, 21:09 Titel: |
|
|
So, also irgendwie bin ich jetzt völlig durchn Wind:
Ich habe das mit der Do Schleife hinbekommen (DO UNTIL EOF(1)), es wird auch die ganze txt Datei in HTMl geschrieben (nachdem ich eine 200MB Datei produziert habe, weil ich das Ende der Schleife vermuckst habe ), doch die Absätze werden natürlich nicht in <br> umgewandelt, das war mir soweit auch klar.
Nun muss ich ja irgendwie mit INSTR die Absätze durch <br> ersetzen - nur, wie erkenn ich einen Absatz? Und wie ersetz ich ihn?
In der Monster FAQ stand zu INSTR leider nicht das drin, was ich suchte, drum frag ich hier.. |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 28.03.2005, 22:05 Titel: |
|
|
Einfach nach jeder Zeile ein <br> einfügen, und nach jeder Leerzeile
mit <p> bzw. </p> arbeiten.
jb |
|
Nach oben |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 28.03.2005, 23:13 Titel: |
|
|
du hättest jetz mehrere möglichkeiten:
1) du machst einfach nach jeder zeile ein <br>, denn LINE INPUT liest immer bis zum Zeilenende, sprich bis dahin, wo der user in der TXT ein ENTER eingegeben hat
2) du öffnest die TXT als BINARY, (OPEN txtfile$ FOR BINARY AS #1), und machst ein <br> immer dann, wenn du auf ein CHR$(13) stößt. Das kann nützlich sein, wenn du später noch weitere Funktionen einbauen willst (vllt wirds ja mal ein BB-Code-Übersetzer?), wird aber bei normalem TXT-HTML recht langsam... zumindest, wenn du byte für byte einliest:
Code: |
DO
GET #1, ,byte
IF byte = 13 THEN PUT #2,,"<br>" ELSE PUT byte
LOOP UNTIL EOF(1)
|
Besser ist so was:
Code: |
DIM byte$ AS STRING * 16384 '16 KB
DO
GET #1, , byte$
FOR byte = 1 TO 16384
IF MID$(byte$, byte, 1) = CHR$(13) THEN PUT #2, , "<br>" ELSE PUT MID$(....)
NEXT
LOOP UNTIL EOF(1)
|
ich würde aber zu ersterem raten. Für einen einfachen übersetzer reichts vollkommen.
Und es funktioniert auch, ich hab mir selber mal so nen Konverter geschrieben. Der is jez aber leider weg, weil ich meine festplatte formatieren musste..... _________________ fully biological degradable
Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet. |
|
Nach oben |
|
 |
Quark48

Anmeldungsdatum: 16.10.2004 Beiträge: 559 Wohnort: Saltendorf a.d. Naab bzw. Teublitz i.d. Oberpfalz / Bayern
|
Verfasst am: 29.03.2005, 19:12 Titel: |
|
|
Hallo!
Wenn du noch mehr HTML-Zeugs wissen willst, dann schau mal unter http://de.selfhtml.org/ _________________ Grüßle, Stefan
***
Wenn ein Programm auf nem alten Rechner gut läuft, dann läuft´s auf nem neuen erst recht!
Ich habe/hatte keine feste Spange und auch keine Schwester. Der Rest stimmt. Es tut mir leid... :-/ |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|