dbf ANSI/ASCII

Zugriff, Engines, Konvertierung. Von ADS über DBF bis zu SQL.

Moderator: Moderatoren

Antworten
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

dbf ANSI/ASCII

Beitrag von Jan »

Im Zuge der Umstellung der Daten meines Kunden auf ADS bin ich auf ein Problem gestoßen. Das mich ehrlich gesagt irritiert.

Ich hatte Schwierigkeiten mit den Zeichensätzen. In Vorbereitung auf die ADS-Umstellung hatte ich Ende vergangenen Jahres alle dbf von DBFNTX auf FOXCDX umgestellt. Das habe ich mit ein paar Zeilen Xbase++-Code automatisch über alle über 50 dbf laufen lassen. Und dabei keine SET CHARSET TO-Zeile im Code gehabt! Da DBFNTX nur ASCII kann sollte damit alles passen.

Aber Pustekuchen. Ich stelle jetzt fest, das einige dbf ASCII sind, andere ANSI. Da alle möglichen Editoren schlau sind und automatisch korrekt anzeigen, sehe ich das auch nur, wenn ich die dbf im Hex-Editor lade. Der Unterschied dürfte daher rühren, das manche dbf schon seit Jahrzehnten hier laufen (die sind noch ASCII), andere aber aus zwischenzeitlich ausprobierten ERP-System (Büroware, Navision) rauskonvertiert wurden (die sind dann ANSI).

Xbase++ scheint damit sauber umgehen zu können. Jedenfalls habe ich bislang nie sehen können, daß die unterschiedliche Zeichenformate haben. Aber beim ADS knallt es jetzt. Ich muß also alles auf einen einheitlichen Zeichensatz bekommen. Ob jetzt ASCII oder ANSI ist mir im Prinzip vollkommen egal. Wobei natürlich ANSI nicht schlecht wäre, damit bin ich dann doch ein wenig näher am aktuellen Standard. Andererseits sind die Programme fast alle noch mit OEM-Oberfläche, und das Problem hatte ich schon einmal, das ein SET CHARSET TO ANSI mir die komplette Oberfläche zerschießt.

Interessant ist in dem Zusammenhang, das Xbase++ offensichtlich erkennt, ob die dbf ASCII oder ANSI ist. Denn alle aktuellen Daten in den dbf sind sauber formatiert in dem jeweiligen Datensatz. Ich habe also nicht, wie ich erwarten würde, die alten Datensätze ANSI und die neuen ASCII, da die neuen ja ohne SET CHARSET TO ANSI gespeichert worden waren. Fängt eine dbf mit ANSI-Daten an, dann ist auch der Rest ANSI. Genau so mit ASCII-dbf.

Nur: Wie konvertiere ich das jetzt alles sauber? Also erstens möglichst automatisch erkennen, welcher Zeichensatz das ist, und dann in das gewünschte rüber-konvertieren. Manuell all die Datenbanken durchzugehen ist mir ehrlich gesagt ein wenig zu zeitaufwändig. Auch wenn der Kunde das natürlich zahlen würde.

Abgesehen davon würde mich da mal der Mechanismus von Xbase++ interessieren, der mit solch einem Wirrwar sauber umgehen kann.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: dbf ANSI/ASCII

Beitrag von brandelh »

Es gibt da ein Feld im DBF header der auch bei einer DBFNTX den ANSI Zeichensatz erzwingen soll.
dbinfo kann den abfragen solte unter DBFDBE in der Hilfe stehen.
Gruß
Hubert
Antworten