PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Standardausgabe in Puffer speichern (C++)



sschlarb
08-03-2007, 07:21
Weiß jemand, wie ich die Standardausgabe einer Library in einem Puffer speichern kann?

Konkret habe ich das Problem, dass ich die wv library zur Konvertierung von Word-Dokumenten nutzen möchte. Diese schreibt das Ergebnis der Konvertierung aber mit printf in die Standardausgabe. Da ich die Bibliothek unverändert lassen möchte, wäre es am einfachsten, die Standardausgabe in einem Puffer oder Stream zu erfassen. Ist das - auf einfache Weise - möglich?

anda_skoa
08-03-2007, 18:08
Das hört sich für mich eher komisch an. Nur sehr kaputte Libraries schreiben den eigentlichen Output ausschließlich auf stdout, normalerweise hat die Applikation schon direkten Zugang zu den Daten.

Ciao,
_

sschlarb
09-03-2007, 10:30
Ich meine diese Bibliothek

http://wvware.sourceforge.net/

Die Ausgabe erfolgt durch printf-Befehle. Ich sehe momentan nur die Moeglichkeit, statt der printf-Befehle die Ausgabe in einen Puffer zu speichern. Dafuer muss ich allerdings den Code durchforsten.

Die Bibliothek ist eigentlich ziemlich bekannt und wird z.B. in Abiword genutzt. Leider gibt es aber keine Dokumentation.

anda_skoa
09-03-2007, 19:23
Eben weil es von Abiword benutzt wird ist es ziemlich wahrscheinlich, daß der eigentliche Output nicht über stdout kommt.

Ich hab jetzt nur mal einen kurzen Blick in wvHtml.c geworfen, aber dort sieht es so aus, daß nach einer Initialisierung eine paar Callback Funktionen gesetzt werden, die dann während des Parsens aufgerufen werden.

Ansonsten wäre noch die Möglichkeit, im Source von KOffice nach zu sehen, weil dort die nächste Generation der wv Bibliothek benutzt wird und vermutlich auch das Design besser ist.

Ciao,
_

sschlarb
12-03-2007, 09:27
Es ist aber nun einmal so, dass die Ausgabe des eigentlichen Inhalts in text.c Zeichen fuer Zeichen erfolgt:


text.c Zeile 798: printf ("%c", buffer2[i]);

Und die Event-Handler sorgen fuer die Ausgabe bei Dokumenten-Beginn, Dokumenten-Ende, Paragraph-Beginn, Paragraph-Ende, etc., wobei hier die Ausgabe in wvConfig.c erfolgt.

Was mich wundert ist, dass es bei einer so zentralen Bibliothek keine klar definierten Schnittstellen gibt, so dass man entscheiden kann, ob die Ausgabe in den Standard-Output geschrieben oder in einen String gespeichert werden soll.

Ich gehe zur Zeit so vor, dass ich text.c und wvConfig.c anpasse, so dass die printf-Ausgaben in einen String gespeichert werden.

anda_skoa
12-03-2007, 09:53
Es ist aber nun einmal so, dass die Ausgabe des eigentlichen Inhalts in text.c Zeichen fuer Zeichen erfolgt:


Vielleicht ist das nur eines der Toolprogramme, das eine Word->Text Konversion macht.



Und die Event-Handler sorgen fuer die Ausgabe bei Dokumenten-Beginn, Dokumenten-Ende, Paragraph-Beginn, Paragraph-Ende, etc., wobei hier die Ausgabe in wvConfig.c erfolgt.

Normalerweise kommen bei Parsercallbacks auch Daten mit. Vielleicht gibt es einen Callback für den Text ansich?



Was mich wundert ist, dass es bei einer so zentralen Bibliothek keine klar definierten Schnittstellen gibt, so dass man entscheiden kann, ob die Ausgabe in den Standard-Output geschrieben oder in einen String gespeichert werden soll.

Ich würde bei einer Parserbibliothek immer davon ausgehen, daß sie mit die Daten liefert und nicht ausgibt.

Eventuell ist wv2 da besser dokumentiert, siehe dazu das README von KOffices Word Filter
http://websvn.kde.org/trunk/koffice/filters/kword/msword/README?revision=262760&view=markup

sschlarb
14-03-2007, 10:17
Normalerweise kommen bei Parsercallbacks auch Daten mit. Vielleicht gibt es einen Callback für den Text ansich?

Das ist ja das seltsame. Ich habe eine ganze Weile gebraucht, bis ich herausgefunden habe, dass die Ausgabe in text.c zeichen fuer zeichen erfolgt.

Ich habe es jetzt wie oben beschrieben auf umstaendlichste weise geloest.

Danke dir!