 |
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 |
Leader4
Anmeldungsdatum: 20.01.2005 Beiträge: 99 Wohnort: Leipzig
|
Verfasst am: 14.10.2006, 08:19 Titel: Zugriff auf Word-Dokumente |
|
|
Hallo,
ich wollte mal ausprobieren, ob ich mit FBasic auf Word-Dokumente zugreifen kann, das heißt, mit Line Input Worddateien auslesen kann (bzw. sie mit Instr durchsuchen). Geht aber nicht, ich vermute, weil Word-Dateien aus einem einzigen String bestehen, der zu groß für die Line-Input-Anweisung ist (soviel ich weiß darf ein String in FB nicht länger als 32.000 Byte sein, oder?)
Daher wollte ich mal fragen, ob jemand Erfahrung hat mit dem Zugriff auf Worddateien bzw. ob es irgendwie möglich ist, Strings mit einer Länge von mehr als 32.000 Byte über Line Input einzuladen.
Freundliche Grüße,
Leader4.  _________________ Ein richtiger Programmierer muss so richtig faul sein und sich den ganzen Tag mit der Frage beschäftigen, wie man mal wieder etwas einfacher machen kann. |
|
Nach oben |
|
 |
Lutz Ifer Grillmeister

Anmeldungsdatum: 23.09.2005 Beiträge: 555
|
Verfasst am: 14.10.2006, 10:11 Titel: |
|
|
sers
FreeBasic hat kein Problem mit mehreren Gigabyte großen Strings.
Word speichert seine Dateien aber nicht als reine Textdateien, wie Notepad zum Beispiel. Worddateien haben noch zusätzlich einen Header (=Kopfdaten, da steht zum Beispiel drin, welche Papiergröße eingestellt ist, welche Schriftarten verwendet werden usw.) und diverse Formationen für den Text, soll heißen: Im Grunde genommen ließt du Binärdaten, kein Text.
Erstell mal ein Word-Dokument mit einer einfachen Zeile, "Hallo Welt" meinetwegen, und guck dir die Datei im Editor (Notepad) an, dann siehst du, was ich meine.
Lutz Ifer _________________ Wahnsinn ist nur die Antwort einer gesunden Psyche auf eine kranke Gesellschaft. |
|
Nach oben |
|
 |
terminate
Anmeldungsdatum: 12.09.2006 Beiträge: 56
|
Verfasst am: 14.10.2006, 10:24 Titel: |
|
|
Strings in freebasic können bis zu 4 Gigabyte, (4294967296 Bytes, nur mal so im Vergleich zu 32000) groß sein.
Und wenns nicht mit Line-Input klappt mußt du halt Get# nehmen, irgendwie so in der Art:
Code: |
#include once "vbcompat.bi"
dim as string s_filename, s_filebuffer
dim as long l_filelen,i
dim as integer i_filehandle
dim as ubyte read_char
s_filename="test.txt"
i_filehandle=freefile
l_filelen=filelen(s_filename)
Open s_filename For Binary As #i_filehandle
for i =1 to l_filelen
get #i_filehandle,,read_char
s_filebuffer=s_filebuffer+chr$(read_char)
next i
close #i_filehandle
print s_filebuffer
sleep
for i=1 to len(s_filebuffer)
print "char: " & mid(s_filebuffer,i,1) & " code: " & asc(mid(s_filebuffer,i,1))
next i
sleep
|
EDIT:
Das mit mit dem space() um den Inputbuffer zu initialisieren in Sebastians Beispiel ist natürlich sehr elegant und tausendmal schneller als eine Datei Byteweise einzulesen und zudem noch einfacher als mit allocate() zu hantieren.
Da kann ich nicht widerstehen:
Code: |
#include once "vbcompat.bi"
dim as string s_filename, s_filebuffer
dim as long l_filelen,i
dim as integer i_filehandle
s_filename="test.txt"
i_filehandle=freefile
l_filelen=filelen(s_filename)
s_filebuffer=space (l_filelen)
Open s_filename For Binary As #i_filehandle
get #i_filehandle,,s_filebuffer
close #i_filehandle
print s_filebuffer
sleep
for i=1 to len(s_filebuffer)
print "char: " & mid(s_filebuffer,i,1) & " code: " & asc(mid(s_filebuffer,i,1))
next i
sleep
|
Zuletzt bearbeitet von terminate am 14.10.2006, 11:32, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 14.10.2006, 10:54 Titel: |
|
|
Das Bearbeiten oder auch schon Auslesen von Text aus Worddokumenten ist sehr schwierig. Viel einfacher lässt sich das Rich-Text-Format (*.rtf) handhaben, das Word auch als Dateityp anbietet. Dieses Format ist im Gegensatz zum MS-DOC auch gut dokumentiert. Nähere Infos findest du z.B. bei Wikipedia oder über google.
Wenn es nur darum geht, ein Dokument >32kB zu kopieren o.ä., kannst du auch gemäß dieses Beispiels einen Puffer verwenden, wenn es dir unsympatisch ist, viele MBs in den Speicher zu laden, was bei alten PCs ja durchaus ein Problem sein kann. _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 14.10.2006, 21:10 Titel: |
|
|
ich schätze, dass du so eine schleife verwendest:
while not eof(1)
input #1,zeile
wend
EOF heißt End Of File, und es gibt acuh ein entsprechendes ASCII-zeichen, welches End-Of-Line markiert, nämlich das zeichen 26. das bauen viele leute für extra in ihre dateien ein, damit ein schnüffler eben nicht weiter als bis zu diesem zeichen kommt. ich glaube, dass EOF genau nach diesem zeichen sucht, wenn du im INPUT-modus bist. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 14.10.2006, 21:46 Titel: |
|
|
Nein, ich habe das mal schnell getestet, EOF gibt nur dann true zurück, wenn auch wirklich das ende der datei erreicht ist. Also bringt das ASCII zeichen 26 nichts. _________________
Code: | #include "signatur.bi" |
|
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 14.10.2006, 21:55 Titel: |
|
|
hm, ich glaub in QB ging das... _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 14.10.2006, 22:21 Titel: |
|
|
Jojo hat Folgendes geschrieben: | hm, ich glaub in QB ging das... |
Früher für QB veröffentlicht:
http://beilagen.dreael.ch/QB/WORD_MKR.BAS
Dort wird via VBScript auf die ActiveX-basierte VBA-Schnittstelle von Word zugegriffen. Über diese Schnittstelle kann man eigentlich so ziemlich alles machen. Meine grösste Anwendung dafür ist ein vollständiger Berichtgenerator für unseren SEC-CHECK, alles ein grosses .VBS.
Möglicherweise kann man in FreeBasic diese CreateObject()-Aufrufe dank Win32-API direkt erledigen und auch viel eleganter die Methoden aufrufen, da in QB nur der Weg über ein dynamisch erzeigtes .VBS möglich ist. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 15.10.2006, 21:44 Titel: |
|
|
hm, mein kommentar hat sich eigentlich nicht auf die qb-version von deinem word-programm bezogen, sondern darauf, dass man mit einem CHR(26) in qb das dateiende simulieren konnte.... _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 15.10.2006, 22:19 Titel: |
|
|
Mit AllesLaden.Bas lassen sich auch .Doc-Dateien laden..
..allerdings nicht bearbeiten oder per Print ausgeben..
(gerade mit 'ner 2.5MB-Datei probiert und FB0.16bSE)
..aber geladen isse schon mal
Gruß
ytwinky _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 16.10.2006, 21:34 Titel: |
|
|
Direkt auf Ebene .DOC zu arbeiten würde ich jetzt eher wieder abraten, weil das Word-Dateiformat zum einen sehr komplex aufgebaut ist und zum anderen kein offenes Dateiformat darstellt, bei dem die Spezifikationen wie der Quellcode bei einer Open Source-Software offenliegen.
Ist in etwa ähnlich wie NTFS und Linux, wo die Linux-Entwickler inzwischen zwar viele Details kennen, aber noch lange nicht alle, deshalb gilt der NTFS-Dateisystem-Kerneltreiber unter Linux auch jetzt immer noch als experimentelle Software.
Dagegen diese VBA-Methodenaufrufe sind auf der MSDN-Homepage vollständig offen dokumentiert. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
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.
|
|