PureBoard
http://forums.purebasic.com/german/

Unerwünschte Effekte bei RTF-Datei einlesen und speichern
http://forums.purebasic.com/german/viewtopic.php?f=16&t=30461
Seite 1 von 1

Autor:  wie_jetzt? [ 07.11.2017 21:10 ]
Betreff des Beitrags:  Unerwünschte Effekte bei RTF-Datei einlesen und speichern

Hallo Allerseits!

In meinem Projekt soll mein Proggi eine RTF-Datei (Textvorlage mit Platzhaltern) einlesen, die Platzhalter gemäss Usereingaben ersetzen und als temoräre RTF-Datei wieder speichern.

Meine Testroutine sieht so aus:

Code:
ErsatzString$="abcABC 123"
buffer$=""

If ReadFile(0, GetUserDirectory(#PB_Directory_Documents)+"vorlage.rtf")
  While Eof(0) = 0
    buffer$ = buffer$ + ReadString(0)
  Wend
  CloseFile(0)
 
  buffer$ = ReplaceString(buffer$, "**V_Platzhalter1**", ErsatzString$)

; hier stehen später noch ca. 25 andere Platzhaltertausche, der jeweilige Platzhalter wird je nach Usereingabe mit einem kürzeren oder auch längeren String ersetzt.


  If CreateFile(1, GetUserDirectory(#PB_Directory_Documents)+"fertigtext.rtf")
    WriteStringN(1, buffer$)
    CloseFile(1)
  Else
    MessageRequester("Info","Datei nicht erstellt")
  EndIf
 
Else
  MessageRequester("Info","Vorlage nicht geöffnet")
EndIf


Die Dateien werden gefunden, Prog läuft fehlerfrei durch, der Platzhalter auf der ersten Seite wird ersetzt. Hierbei entstehen jedoch 2 Probleme:
a) Umlaute, ß (und evtl. auch andere Zeichen) werden falsch dargestellt
b) An einer ganz anderen Stelle auf Seite 2 wird aus "Ort, Datum, Unterschrift" der "Ort" entfernt, es bleibt ", Datum, Unterschrift".

Was muss ich mit den Umlauten anstellen, damit die korrekt eingetragen werden?
Kann es sein, dass ich die RTF-Datei nicht so einlesen darf? Oder entsteht der Fehler beim Schreibvorgang? Muss man die Datei evtl. byteweise einlesen und/oder byteweise schreiben? Wie wäre der richtige Weg?

Autor:  ts-soft [ 07.11.2017 22:06 ]
Betreff des Beitrags:  Re: Unerwünschte Effekte bei RTF-Datei einlesen und speicher

Welche Compileroption? Unicode oder ASCII (ab 5.60 immer Unicode)
Welche Codierung nutzt Dein Source (ASCII oder UTF8)
Welche Codierung erwartet Dein RTF-Text, ReadString hat z.B. einen 2ten parameter.
Beim Schreiben natürlich dasselbe.

Jetzt nur noch alles abstimmen und es gibt keine Probleme mehr <)

Autor:  ts-soft [ 08.11.2017 13:19 ]
Betreff des Beitrags:  Re: Unerwünschte Effekte bei RTF-Datei einlesen und speicher

Kleines Beispiel:
Deine MusterRTF mal ein äöüß einfügen, mit dem Editor, mit dem es erstellt wurde. Jetzt mit PB einlesen, solange bis da wirklich wieder äöüß rauskommt, also mit ReadString(#MeinRTF, Flag); Flag mal alle 3 durchprobieren :wink:
Denselben Flag dann auch bei WriteString() nutzen.

Ist eigentlich ganz einfach und findet man mit etwas Erfahrung von selber raus.

Gruß
Thomas

Autor:  wie_jetzt? [ 08.11.2017 21:51 ]
Betreff des Beitrags:  Re: Unerwünschte Effekte bei RTF-Datei einlesen und speicher

Hallo ts-soft,

besten Dank für die Tipps. Compiler ist jetzt auf Ascii eingestellt. Laden und speichern habe ich jetzt mit readbyte bzw. writebyte gemacht, womit sich das Problem der verschwundenen Buchstaben erledigt hat. Mein Verdacht: Offenbar werden mit Readstring Daten eingelesen, die beim Schreiben Fehler verursachen (Steuercodes, Backspace, keine Ahnung was). Funktioniert also so, wie ich es mir gewünscht habe.

Allerdings muss man bei der RTF-Textvorlage (mittels LibreOffice erstellt) aufpassen - scheinbar wird die eine oder andere Formatierung durch meine Textmanipulation gestört. Entweder, weil das RTF damit gar nicht klar kommt (verschiedene Fusszeilen, pipapo) oder weil mit meiner Manipulation irgendwas in der Formatierung kaputt geht. Muss man halt ausprobieren, was geht und was nicht.

Ich habe RTF gewählt, weil ich ein Dateiformat brauche, was einerseits mit LibreOffice zu bearbeiten ist (mit Formatierungen und so), andererseits mit einfachen Mitteln via PB zu manipulieren ist. Moderne Dateiformate sind gepackt und - jedenfalls für mich - viel zu kompliziert aufgebaut, jedenfalls, soweit ich das überblicken kann. Hatte auch an HTML gedacht, falls RTF in eine Sackgasse führen würde. Wenn jemand ein noch besser geeignetes Dateiformat kennt - freue mich über jeden Tipp.

Autor:  NicTheQuick [ 08.11.2017 22:46 ]
Betreff des Beitrags:  Re: Unerwünschte Effekte bei RTF-Datei einlesen und speicher

OpenOffice-Dateien sind eigentlich nur ZIPs und darin enthalten sind XML-Dateien, die Formatierungen, Kopf- und Fußzeilen und den eigentlichen Inhalt repräsentieren. Man muss sich einlesen, aber ich erstelle LibreOffice-Dateien komplett selbst mittels Python aus Daten, die in einem anderen Format vorliegen. Mit Purebasic ist das vermutlich nicht so schön handlich wie mit Python zu lösen, aber auch machbar.

Autor:  juergenkulow [ 10.11.2017 17:10 ]
Betreff des Beitrags:  Re: Unerwünschte Effekte bei RTF-Datei einlesen und speicher

Code:
; Erzeuge RTF-Umlaute und Unicode-Zeichen, wie Euro und großes SZ.
; offen Unicode>=$10000
EnableExplicit
Define Test$="ÄÖÜ SZ:"+Chr(7838)+"äöüß Euro:"+Chr(8364)+"µ²³°\áàâéèêíìîóòôúùûýÁÀÂÉÈÊÍÌÎÓÒÔÚÙÛÝ"
ShowMemoryViewer(@Test$,Len(Test$)*2)
Define i
Define RTFText.s=""
For i=1 To Len(Test$)
  Define UniCodeWert=Asc(Mid(Test$,i,1))
  If UniCodeWert<$5C ; Ascii
    RTFText+Chr(UniCodeWert) 
  ElseIf UniCodeWert=$5C ; Rückstrich Sonderbehandlung
    RTFText+"\\"
  ElseIf UniCodeWert>$5C And UniCodeWert<$80 ; Ascii
    RTFText+Chr(UniCodeWert)   
  ElseIf UniCodeWert<=$ff
    RTFText+"\u"+Str(UniCodeWert)+"\'"+LCase(Hex(UniCodeWert))
  Else
    RTFText+"\u"+Str(UniCodeWert)+"\'80"
  EndIf   
Next
Debug RTFText
;\u196\'c4\u214\'d6\u220\'dc SZ:\u7838\'80\u228\'e4\u246\'f6\u252\'fc\u223\'df Euro:\u8364\'80\u181\'b5\u178\'b2\u179\'b3\u176\'b0\\\u225\'e1\u224\'e0\u226\'e2\u233\'e9\u232\'e8\u234\'ea\u237\'ed\u236\'ec\u238\'ee\u243\'f3\u242\'f2\u244\'f4\u250\'fa\u249\'f9\u251\'fb\u253\'fd\u193\'c1\u192\'c0\u194\'c2\u201\'c9\u200\'c8\u202\'ca\u205\'cd\u204\'cc\u206\'ce\u211\'d3\u210\'d2\u212\'d4\u218\'da\u217\'d9\u219\'db\u221\'dd



Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/