Textcodierung BMAX ist anders als bei BBPlus
Übersicht BlitzMax, BlitzMax NG Allgemein
GarfieldBetreff: Textcodierung BMAX ist anders als bei BBPlus |
Do, Dez 06, 2007 0:42 Antworten mit Zitat |
|
---|---|---|
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 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 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 |
Do, Dez 06, 2007 16:02 Antworten mit Zitat |
|
---|---|---|
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 |
Do, Dez 06, 2007 20:31 Antworten mit Zitat |
|
---|---|---|
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 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 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 |
Fr, Dez 07, 2007 20:56 Antworten mit Zitat |
|
---|---|---|
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 und hier für die Datei aus BMAX 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 |
#ReaperNewsposter |
Fr, Dez 07, 2007 21:16 Antworten mit Zitat |
|
---|---|---|
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? |
||
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 |
Fr, Dez 07, 2007 21:50 Antworten mit Zitat |
|
---|---|---|
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 |
Fr, Dez 07, 2007 23:36 Antworten mit Zitat |
|
---|---|---|
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 |
#ReaperNewsposter |
Fr, Dez 07, 2007 23:53 Antworten mit Zitat |
|
---|---|---|
Ö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 |
||
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 |
Sa, Dez 08, 2007 0:54 Antworten mit Zitat |
|
---|---|---|
und was ist Dreamoras Lösung? | ||
BlitzPlus|BMax|BMax-GUI -- Sony VAIO Win7 * MacBookPro Sierra |
#ReaperNewsposter |
Sa, Dez 08, 2007 2:02 Antworten mit Zitat |
|
---|---|---|
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 |
Sa, Dez 08, 2007 11:12 Antworten mit Zitat |
|
---|---|---|
und wie geht das?? | ||
BlitzPlus|BMax|BMax-GUI -- Sony VAIO Win7 * MacBookPro Sierra |
Vertex |
Sa, Dez 08, 2007 16:47 Antworten mit Zitat |
|
---|---|---|
Zeig doch mal, was der Hexeditor ausspuckt! Sonst rätseln wir hier noch Ewigkeiten herum. | ||
vertex.dreamfall.at | GitHub |
Garfield |
Sa, Dez 08, 2007 21:01 Antworten mit Zitat |
|
---|---|---|
OK, ich kann, außer daß ich in den Daten die Leerzeichen nicht entfernt habe, keinen Unterschied, insbesondere in der ersten Zeile erkennen.
Die Zeile wird offensichtlich immer mit 0D 0A beendet 09 ist der Tabulator, ich habe keine Idee mehr. Hier jetzt mit einem Mac Hexeditor [/img] |
||
Garfield |
So, Dez 09, 2007 12:23 Antworten mit Zitat |
|
---|---|---|
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 |
So, Dez 09, 2007 13:55 Antworten mit Zitat |
|
---|---|---|
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 |
BladeRunnerModerator |
So, Dez 09, 2007 14:02 Antworten mit Zitat |
|
---|---|---|
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 |
So, Dez 09, 2007 15:30 Antworten mit Zitat |
|
---|---|---|
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 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. |
||
BlitzPlus|BMax|BMax-GUI -- Sony VAIO Win7 * MacBookPro Sierra |
Dreamora |
So, Dez 09, 2007 17:49 Antworten mit Zitat |
|
---|---|---|
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 |
Mo, Dez 10, 2007 17:31 Antworten mit Zitat |
|
---|---|---|
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 Also spielt das absolut keine Rolle Und das ist eigentlich sehr gut 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 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 |
Mo, Dez 10, 2007 18:04 Antworten mit Zitat |
|
---|---|---|
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 (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. |
Übersicht BlitzMax, BlitzMax NG Allgemein
Powered by phpBB © 2001 - 2006, phpBB Group