Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Zugriff auf Word-Dokumente

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Leader4



Anmeldungsdatum: 20.01.2005
Beiträge: 99
Wohnort: Leipzig

BeitragVerfasst am: 14.10.2006, 08:19    Titel: Zugriff auf Word-Dokumente Antworten mit Zitat

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. zwinkern
_________________
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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Lutz Ifer
Grillmeister


Anmeldungsdatum: 23.09.2005
Beiträge: 555

BeitragVerfasst am: 14.10.2006, 10:11    Titel: Antworten mit Zitat

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 böse Ifer
_________________
Wahnsinn ist nur die Antwort einer gesunden Psyche auf eine kranke Gesellschaft.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
terminate



Anmeldungsdatum: 12.09.2006
Beiträge: 56

BeitragVerfasst am: 14.10.2006, 10:24    Titel: Antworten mit Zitat

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: zwinkern

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
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 14.10.2006, 10:54    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 14.10.2006, 21:10    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 14.10.2006, 21:46    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 14.10.2006, 21:55    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 14.10.2006, 22:21    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 15.10.2006, 21:44    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 15.10.2006, 22:19    Titel: Antworten mit Zitat

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 happy
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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 16.10.2006, 21:34    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz