Textcodierung BMAX ist anders als bei BBPlus

Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

Garfield

Betreff: Textcodierung BMAX ist anders als bei BBPlus

BeitragDo, Dez 06, 2007 0:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Folgender Programmschnipsel schreibt mir in eine .txt Datei die Titelzeile für den Import von Kontakten in Outlook.
(TAB-getrennt)
Code: [AUSKLAPPEN]


Local Writedatei:TStream = WriteFile("outlookdatei\BW3X_MAIL.txt")

For Local zielfeld:TZielfeld = EachIn Zielfelderlist

   zwert = zwert + zielfeld.name + Chr$(9)
   
Next



unter BPlus hat es wunderbar fuktioniert. Jetzt hab ich den Code komplett neu geschrieben unter BMax (aus bequemlichkeitsgründen auf meinem MacBook) und das blöde Outlook (auf meinem PC) erkennt den Header und die Daten nicht mehr TAB getrennt Crying or Very sad
Auch der Versuch das dann schlussendlich auf meinem PC laufen zu lassen hat keinen Erfolg beim einlesen der Datei in Outlook( der Kontaktimport erwartet eine TAB getrennte txt Datei)
Excel hat kein Problem die Felder anhand der Tabs (chr$(9)) zu trennen, auch ein erneutes abspeichern unter Excel als Tab getrennte Datei funktioniert auch nicht Twisted Evil
Ich hab schon alles versucht mit UTF-8 und Unicode die Textdateien umzuwandeln, aber keinerlei Erfolg, im Gegenteil, dann wirds ganz gruselig mit den Umlauten und so weiter........

Was mache ich falsch??

chr$(9) ist doch der einzige horizontale Tabulator....[/code]
BlitzPlus|BMax|BMax-GUI -- Sony VAIO Win7 * MacBookPro Sierra
  • Zuletzt bearbeitet von Garfield am So, Dez 09, 2007 15:46, insgesamt einmal bearbeitet

Vertex

BeitragDo, Dez 06, 2007 16:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Warum nicht einfach "~t" benutzen? In BMax kannst du übrigens zwert :+ zielfeld.name + "~t" benutzen. Muss am Ende nicht noch der letzte Tabulator entfernt werden? If zwert.Length > 0 Then zwert = zwert[..(zwert.Length - 1)]. Und nicht, dass du mit WStrings arbeitest, die brauchen 16 Bit pro Zeichen.
vertex.dreamfall.at | GitHub

Garfield

BeitragDo, Dez 06, 2007 20:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die Tips, manchmal schreib ich aber lieber längeren Code um den Mechanismus besser zu erkennen.
Variabe:+ wert ist natürlich schöner Very Happy
werd ich mir angewöhnen müssen

die nächste Zeile nach der Schleife lautet auch:


Code: [AUSKLAPPEN]


zwert = LSet$(zwert,Len(zwert)-1) ' letztes TAB entfernen




Das war ganz wichtig, aber schon dran gedacht Wink

das mit dem Tilde t (ich find die Tilde auf meinem MacBook grad nicht) teste ich nachher

und WSTRINGS muss ich mal nachdenken, also ich mache Variable:string gibts da was anderes?

hier ist der ganze Code der Function:

Code: [AUSKLAPPEN]


Function outdateischreiben()

Local zwert:String
Local zaehler:Int

Local Writedatei:TStream = WriteFile("outlookdatei\BW3X_MAIL.txt")

For Local zielfeld:TZielfeld = EachIn Zielfelderlist

   zwert = zwert + zielfeld.name + Chr$(9)
   
Next

zwert = LSet$(zwert,Len(zwert)-1) ' letztes TAB entfernen
   
WriteLine Writedatei, zwert

For Local zf:finalsatz = EachIn finallist

   WriteLine writedatei,zf.name
   
   zaehler:+1

Next

CloseFile writedatei


Return zaehler
End Function

BlitzPlus|BMax|BMax-GUI -- Sony VAIO Win7 * MacBookPro Sierra

Garfield

BeitragFr, Dez 07, 2007 20:56
Antworten mit Zitat
Benutzer-Profile anzeigen
angepasst und auf meinem VAIO XP ausgeführt
Code: [AUSKLAPPEN]

For Local zielfeld:TZielfeld = EachIn Zielfelderlist

   zwert = zwert + zielfeld.name + "~t"‚
   
Next

zwert = LSet$(zwert,Len(zwert)-1) ' letztes TAB entfernen


ergibt leider den gleichen Fehler

Hier die Screenshots vom korrekten File aus BlitzPlus

user posted image

und hier für die Datei aus BMAX

user posted image

das ist der Code aus BBPlus

Code: [AUSKLAPPEN]

For Z.Ziele = Each Ziele

zstring$ = zstring$ + Z\Zielname + Chr$(9)
Next

zlaenge = Len(zstring$)
zstring$ = LSet$(zstring$,zlaenge-1)


und nun????????????
BlitzPlus|BMax|BMax-GUI -- Sony VAIO Win7 * MacBookPro Sierra
 

#Reaper

Newsposter

BeitragFr, Dez 07, 2007 21:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Schonmal die Datei mit Notepad, oder besser, einem HexEditor geprüft?

Und, btw: Was macht denn das Komma am Ende der 2ten (beschriebenen) Zeile deines BMax-Codes? Wink
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7
 

Dreamora

BeitragFr, Dez 07, 2007 21:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Könnte auch einfach daran liegen das BlitzPlus Ascii compliant ist, BM hingegen Unicodestrings benutzt und du da potentiell schön viel schrott erzeugst.
Da müsstest du die Zeichenkodierung erst korrekt einstellen.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Garfield

BeitragFr, Dez 07, 2007 23:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Also das Komma ist natürlich Schrott, warum der Compiler nicht meckert weiß ich nicht.
Das dürfte aber nicht das Problem sein.

Eher denk ich die ganze Zeit schon wie Dreamora nur, womit sollte ich da was ändern?

Im Notepad sehen beide Dateien gleich aus, Excel öffnet diese problemlos und auch nach dem erneuten abspeichern mit Excel ändert sich nichts.


Im TStream Modul finde ich nichts was eine Änderung der Codierung bewirken könnte
BlitzPlus|BMax|BMax-GUI -- Sony VAIO Win7 * MacBookPro Sierra
 

#Reaper

Newsposter

BeitragFr, Dez 07, 2007 23:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Öffne es mal mit einem Hexeditor (z.B. HxD) oder du kannst ja auch mal, wenn du direkt einen Stream benutzt, um die Datei zu schreiben, WriteByte nehmen. Naja, aber momentan wird ja erst alles in einen String gepackt.
Dreamora's Lösung wäre da vermutlich besser und einfacher Wink
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7

Garfield

BeitragSa, Dez 08, 2007 0:54
Antworten mit Zitat
Benutzer-Profile anzeigen
und was ist Dreamoras Lösung?
BlitzPlus|BMax|BMax-GUI -- Sony VAIO Win7 * MacBookPro Sierra
 

#Reaper

Newsposter

BeitragSa, Dez 08, 2007 2:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry, ich meinte nur das:
"Da müsstest du die Zeichenkodierung erst korrekt einstellen."
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7

Garfield

BeitragSa, Dez 08, 2007 11:12
Antworten mit Zitat
Benutzer-Profile anzeigen
und wie geht das??
BlitzPlus|BMax|BMax-GUI -- Sony VAIO Win7 * MacBookPro Sierra

Vertex

BeitragSa, Dez 08, 2007 16:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Zeig doch mal, was der Hexeditor ausspuckt! Sonst rätseln wir hier noch Ewigkeiten herum.
vertex.dreamfall.at | GitHub

Garfield

BeitragSa, Dez 08, 2007 21:01
Antworten mit Zitat
Benutzer-Profile anzeigen
OK, ich kann, außer daß ich in den Daten die Leerzeichen nicht entfernt habe, keinen Unterschied, insbesondere in der ersten Zeile erkennen.

user posted image

Die Zeile wird offensichtlich immer mit 0D 0A beendet
09 ist der Tabulator,

ich habe keine Idee mehr.

Hier jetzt mit einem Mac Hexeditor


user posted image[/img]

Garfield

BeitragSo, Dez 09, 2007 12:23
Antworten mit Zitat
Benutzer-Profile anzeigen
jetzt hab ich was gefunden was zutreffen könnte, veileicht kennt das jemand?

Zitat:

Tatsächlich werden diese Zeichensätze nicht direkt verwendet, sondern es gibt mehrere Unicode transformation format (UTF) - Algorithmen (siehe die UTF-BOM-FAQ). Diese bilden die als Zahlen aufgefaßten Bitfolgen auf eindeutige Byte-Sequenzen ab und legen zu Beginn des Datenstromes mit der Byte Order Mark - Sequenz (BOM) fest, um welche Transformation es sich handelt. Denn in den Unicode-Zeichensätzen sind wenige Zahlen unbenutzt, deren Kombination als BOM genutzt werden kann. Zusätzlich zur Unterscheidung zwischen UTF-8, UTF-16 und dem bislang noch kaum unterstützten UTF-32 gibt es die Unterscheidung zwischen little-endian und big-endian. Bei einem Zwei-Byte-Zeichen kann das most significant byte das erste Byte (little-endian) oder das zweite Byte (big-endian) sein.

Aktuell gibt es die folgenden BOM:

Bytes Encoding Form
00 00 FE FF UTF-32, big-endian
FF FE 00 00 UTF-32, little-endian
FE FF UTF-16, big-endian
FF FE UTF-16, little-endian
EF BB BF UTF-8


http://www.sql-und-xml.de/xml-...ichen.html
BlitzPlus|BMax|BMax-GUI -- Sony VAIO Win7 * MacBookPro Sierra

Garfield

BeitragSo, Dez 09, 2007 13:55
Antworten mit Zitat
Benutzer-Profile anzeigen
aus dem englischen Forum habe ich folgendes:

Zitat:
It could be a matter of endianes. Use streams instead in BlitzMax, and set them to LATIN1. I think this is the encoding of BlitzPlus.

Manel Ibáñez


aber wie?

nur als Stream zu speichern reicht nicht, ergibt dasselbe Problem

Es gibt auch noch irgendwas mit Loadtext und SaveText
BlitzPlus|BMax|BMax-GUI -- Sony VAIO Win7 * MacBookPro Sierra

BladeRunner

Moderator

BeitragSo, Dez 09, 2007 14:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Bitte keine Tripleposts- ein Edit reicht da völlig, ok ?
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Garfield

BeitragSo, Dez 09, 2007 15:30
Antworten mit Zitat
Benutzer-Profile anzeigen
OK dies ist mein Final Post, den werd ich dann editieren.

Ich habs:

In meiner Adressdatenbank ist irgendwo ein Name oder Feld mit einem Charakter der vermutlich oberhalb der 256 ist und darum wird das Textfile offensichtlich automatisch anders codiert... ist zumindest meine Vermutung.

Ich habe es mit Streams und SaveText probiert es ist immer das gleiche.
Jetzt habe ich nur den ersten Datensatz ausgelesen und schon akzeptiert Outlook den Header Very Happy

Egal ob mit Writefile, WriteStream oder SaveText

BlitzPlus macht das offensichtlich anders, denn das Programm liest die gleiche Datenbank aus und mit dem Textfile funktionierts sofort. Confused
BlitzPlus|BMax|BMax-GUI -- Sony VAIO Win7 * MacBookPro Sierra
 

Dreamora

BeitragSo, Dez 09, 2007 17:49
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzPlus unterstützt auch nicht mehr und kann von daher auch nicht mehr ausführen.

Und versuch das programm bitte nicht unter OSX auszuführen sondern effektiv nur das Windows Programm.
sonst könntest du ins problem rennen das apple apple ist und nicht windows und die zeichenkodierungsstandards unterschiedlich sind (OSX hat ein eigenes, das geht net auf latin1. das führt zb bei pdf drucken auch zu hässlichen fehlern in form einer seite voll quadraten oder halb leer ohne text etc)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Garfield

BeitragMo, Dez 10, 2007 17:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Problem ist ein kombiniertes Microsoft (wie immer sehr fragwürdig) und BMAx Problem, die Ursache ist ein Komma in einem Adressdatenfeld.

Dieses wird vom Outlookimport bei dem BMax File komischerweise als Trenner interpretiert (obwohl "TAB separated" gefordert wird), damit kommt die ganze Importlogic durcheinander, beim BBPlus File wird das als Komma interpretiert und bleibt so im Datenfeld, der Import funktioniert einwandfrei!

Lösch ich das Komma in der BMax Datei mit einem Editor, funktionierts sofort?!?

Das Verhalten ist übrigens bei der Ausführung des Programms auf meinem Mac gleich Razz Also spielt das absolut keine Rolle Razz Und das ist eigentlich sehr gut Very Happy

Im Hex Editor sind beide Asci Codes gleich, ein 2C für das Komma

Viel schlimmer ist, und das dürfte dann wohl doch ein Microsoft Outook Problem sein, das es noch viel mehr Einträge mit Komma gibt, nur offensichtlich in diesem einen Feld eine Kombination vorgaukelt, die den Importer durcheinander bringt.

Also :

Merziger, Kammermeier und Hayo <-- funktioniert

Marina Müller, Petra van Laak <-- funktionert nicht

beide Zeilen sehen im Hexeditor bis auf die unertschiedlichen Buchstaben gleich aus, das Komma nach Müller geht aber nicht. Aber auch als ich Müller im Editor durch Schulz ersetzt habe oder die ganze Zeile neu geschrieben habe funktioniert das nicht, versteh das einer Confused

Wie gesagt, in der BBPlus Datei wird alles richtig erkannt

Ich hab schon 2 Stunden geforscht, habe aber nichts gefunden, was den BOM einer Textdatei anzeigt um die Codierung zu entschlüsseln....denn es muss ja einen Unterschied geben
BlitzPlus|BMax|BMax-GUI -- Sony VAIO Win7 * MacBookPro Sierra
 

Dreamora

BeitragMo, Dez 10, 2007 18:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Umlaut ist das Problem.

Der wird anders gespeichert und würgt damit das ganze "ins Chaos" für den Eintrag ...
am einfachsten nimmst du den originalstring und reisst das ding raus und schreibst seinen Ascii rein, das sollte dem eigentlich entgegen wirken können ... oder dir nen ASCII Stream implementieren der das automatisch macht und einfach 1 zeichen = 1 byte schreibt, sense Smile (sprich writebyte(asc(mid(string,i,1))))
kannst aber auch das ganze einfach in ne funktion packen.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group