Christian Heurich: .dbf datei mit umlauten auslesen und konvertieren

Hallo zusammen,

ich hoffe ihr könnt mir bei folgenden problem etwas auf die sprünge helfen.

ich versuche aus einem .dbf-File Angaben in eine Textdatei zu schreiben.
In dem dbf-File sind allerdings manche Inhalte mit Umlauten, die dann nicht korrekt in die Textdatei geschrieben bzw. auch im browser nicht korrekt angezeigt werden.

z.B.:

Zubehör - Zubehr
Büromaterial - Bromaterial

utf8_encode/utf8_decode bringt nichts.

ist das eine einstellungssache.

mfg und danke,

christian

  1. ich versuche aus einem .dbf-File Angaben in eine Textdatei zu schreiben.
    In dem dbf-File sind allerdings manche Inhalte mit Umlauten, die dann nicht korrekt in die Textdatei geschrieben bzw. auch im browser nicht korrekt angezeigt werden.

    Da Du die Einlesefunktion nicht ändern kannst (vorausgesetzt, Du verwendest die implementierten dbase-Routinen), mußt Du die Einträge in den dbf-Dateien ändern. Hilfreich wäre es zu wissen, woher die dbf-Dateien stammen (dBase/clipper, Foxpro, VFP oder ...).
    Wenn Du ein Foxpro oder Visualfoxpro älter gleich 2.5 besitzt, kannst Du die Funktion oemtoansi verwenden, sonst wirst Du selbst etwas schreiben müssen respektive denk ich es gibt sicher irgendwelche Tools im Netz, die ich allerdings nicht kenne ...

  2. Hello,

    da fehlt das Daten-Zeit-Zustandsdiagramm.
    Wann machst Du auf welcher Plattform was mit welchem File?
    Wird noch ein dbase betrieben? Dann kann man mit export und "sdf" die Sätze in eine Textdatei übertragen.
    Soll der Import ständig mit PHP erfolgen oder handelt es sich nur um eine einmalige Sache?
    Sollem memo-felder mit importiert werden? (das könnte eklig werden)

    Man könnte den Header1 (fix) und Header2 (variable) der dbase-datei einfach abschneiden. Danach liegen die Sätze als Random Access Datei vor, also feste Satzlänge, feste Feldstruktur, feste Feldlänge.

    Ich habe noch einige in Pascal geschriebene Konvertierungsroutinen von dBase nach XYZ irgendwo rumfliegen. Die sind zwar schon 13 Jahre alt, aber vielleicht würden sie Dir helfen.

    Sonst solltest Du dir mal die PHP-Funktionen pack() und unpack() anschauen. Mit deren Hilfe könnte man in PHP eine Datenstruktur aufbauen. Hängt eben davon ab, wie wichtig und häufig diese Importe für dich sind. Alternativ gibt es (glaube ich) in MySQL geeignete Importfunktionen.

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    1. Hello,

      da fehlt das Daten-Zeit-Zustandsdiagramm.
      Wann machst Du auf welcher Plattform was mit welchem File?
      Wird noch ein dbase betrieben? Dann kann man mit export und "sdf" die Sätze in eine Textdatei übertragen.
      Soll der Import ständig mit PHP erfolgen oder handelt es sich nur um eine einmalige Sache?
      Sollem memo-felder mit importiert werden? (das könnte eklig werden)

      Man könnte den Header1 (fix) und Header2 (variable) der dbase-datei einfach abschneiden. Danach liegen die Sätze als Random Access Datei vor, also feste Satzlänge, feste Feldstruktur, feste Feldlänge.

      Ich habe noch einige in Pascal geschriebene Konvertierungsroutinen von dBase nach XYZ irgendwo rumfliegen. Die sind zwar schon 13 Jahre alt, aber vielleicht würden sie Dir helfen.

      Sonst solltest Du dir mal die PHP-Funktionen pack() und unpack() anschauen. Mit deren Hilfe könnte man in PHP eine Datenstruktur aufbauen. Hängt eben davon ab, wie wichtig und häufig diese Importe für dich sind. Alternativ gibt es (glaube ich) in MySQL geeignete Importfunktionen.

      Liebe Grüße aus http://www.braunschweig.de

      Tom

      Hallo,

      mann seid ihr schnell !!! :)

      Ich selbst arbeite nicht mit dbase, ich bekomme das file gepackt von meinen lieferanten. es enthält die artikel/preisliste.
      Ich möchte nun gerne das file (halbwegs) automatisiert in ein txt-file umwandeln mit einigen veränderungen.

      also der ablauf sollte so aussehen:
      per php (mangels ausreichender programmierkenntnisse anderer sprachen):

      1. das zip-file laden
      2. das zip-file entpacken
      3. dbf-file auslesen
      4. daten mit mysql-db (nur auslesen) abgleichen
      5. neue daten in txt.datei schreiben
      (txt-file importieren in mysql-db ... ok ist umständlicher als gleich einfügen aber im moment hab ich noch nicht so eine blickung für die db-struktur als dass ich da direkt was ändern möchte..)

      ...und das mit möglichst wenig aufwand weil das ganze ca. 2-3mal / woche passieren soll :)

      ich hab ja schon ein tool das die dbf-files in txt-dateien konvertieren kann, aber leider nur manuell und auch die änderungen / abgleich mit der mysql-db kann das tool nicht machen.

      Ein direktimport in kommt eigntlich auch nicht in frage, eben weil ich vorher noch die daten anpassen muß.

      Memo-Felder sind nicht dabei, nur char, int, date, real,

      zu der version in der es erstellt wurde kann ich nicht viel sagen.
      aber ich könnte sicher mal nachfragen.

      eine andere möglichkeit wäre das ersetzen der umlaut-zeichen (, usw.) wieder in den jeweiligen strin zu ersetzen aber da in den feldern teilweise auch " vorkommt und das leider das substitut für ä ist kommt da mit sicherheit nicht immer das richtige raus.

      mfg
      christian

      1. Hello,

        eine andere möglichkeit wäre das ersetzen der umlaut-zeichen (, usw.) wieder in den jeweiligen strin zu ersetzen aber da in den feldern teilweise auch " vorkommt und das leider das substitut für ä ist kommt da mit sicherheit nicht immer das richtige raus.

        Hast Du schon die dBase-Funktionen von PHP ausprobiert?

        dBase wird eigentlich immer im ASCII-Format abgespeichert. Da sollten die Umlaute also kein Problem sein. Fehler können also beim Packen und beim entpacken passiert sein. Ich nehme an, dass mindestens einer der Prozesse auf Windows stattgefunden hat. Und dann sollte das ZIP-Tool zum entpacken richtig eingestellt sein.

        Liebe Grüße aus http://www.braunschweig.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        1. Hello,

          eine andere möglichkeit wäre das ersetzen der umlaut-zeichen (, usw.) wieder in den jeweiligen strin zu ersetzen aber da in den feldern teilweise auch " vorkommt und das leider das substitut für ä ist kommt da mit sicherheit nicht immer das richtige raus.

          Hast Du schon die dBase-Funktionen von PHP ausprobiert?

          dBase wird eigentlich immer im ASCII-Format abgespeichert. Da sollten die Umlaute also kein Problem sein. Fehler können also beim Packen und beim entpacken passiert sein. Ich nehme an, dass mindestens einer der Prozesse auf Windows stattgefunden hat. Und dann sollte das ZIP-Tool zum entpacken richtig eingestellt sein.

          Liebe Grüße aus http://www.braunschweig.de

          Tom

          Also ich teste das ganze auf einem xp-system.

          entpackt habe ich es mit winzip und wenn ich in die dbf-datei mit einem editor schaue sind die umlaute noch da. Auch in Access wird alles richtig dargestellt. nur wenn ich folgendes php-script laufen lasse, werden die umlaute vermurkst:

          $table = 'mytable.dbf';
            if (!$FileHandler = dbase_open($table,0) ) {
             echo "Can't open $table\n";
             exit;
            } else {
             $rowcount = dbase_numrecords ( $FileHandler);// How many records?

          for ($i=1; $i <= $rowcount; $i++) {
                   $row = dbase_get_record($FileHandler,$i);
                   echo row[0];
             }
            }

          also ich denke nicht das es am entpacken liegen sollte da wie schon gesagt die umlaute im editor noch korrekt dargestellt werden.

          1. Hello,

            also ich denke nicht das es am entpacken liegen sollte da wie schon gesagt die umlaute im editor noch korrekt dargestellt werden.

            Muss ich halt penetrant werden ;-)

            Um welchen Editor handelt es sich? Kann der ANSI oder ASCII-Mode? ASCII können doch die meisten Windows-Gurken gar nicht mehr ohne Tricks und gut zureden. Da musst Du schon einen für Programmierung benutzen oder das gute alte edit.com von DOS

            Meine Vermutung daher:
            Der Fehler passiert beim entpacken. Der Editor zeigt ANSI an. Daher sind die Umlaute noch da.

            Liebe Grüße aus http://www.braunschweig.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            1. hmm...editPlus...sollte doch funktionieren??
              hab grad mal "edit" im xp-dosfenster ausgeführt und das dbf geöffnet ...auch hier alles noch i.o.

              1. Hello,

                hmm...editPlus...sollte doch funktionieren??
                hab grad mal "edit" im xp-dosfenster ausgeführt und das dbf geöffnet ...auch hier alles noch i.o.

                Statt dass wir hier noch lange rumeiern. Wenn es keine "Geheimdaten" sind, und das File nicht über 1MB geht, dann schick es mir mal auf die email. Ich probier das hier mit meiner PHP-Installation mal aus.

                Kann sowie nicht schlafen.

                Liebe Grüße aus http://www.braunschweig.de

                Tom

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                1. hallo tom,

                  hab dir eine e-mail geschickt.

                  1. Hello,

                    hallo tom,

                    hab dir eine e-mail geschickt.

                    Und ich habe natürlich zu früh getrommelt. Die momentan laufenden Server sind nicht mit --with dbase kompiliert worden. Wir haben aber einen, bei dem es drauf ist. Ich schaue es mir aber trotzdem an. Vielleicht kann man eine eigene Funktion dafür bauen. Das Dateiformat ist ja bekannt.

                    Liebe Grüße aus http://www.braunschweig.de

                    Tom

                    --
                    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                    1. Hello,

                      Datei ist angekommen.
                      bei der Dateigröße verstehe ich, dass Du nicht gerne zu Fuss nachpflegen möchtest. Es sind tatsächich alle Umlaute drin. Habs mir mit nem Hex-Editor angeschaut.

                      Bevor ich jetzt in Aktionismus ausbreche:
                      Die Datei mittels HTTP-Upload-Script auf einen Server hochzuladen, ist wohl Wahnsinn. Da stellt sich mir die Frage, ob das Ganze überghaupt in einem Webinterface statttfinden muss und warum?

                      Auf dem Server kann man eine schöne compilierte Datei laufen lassen, die die neue Datei in eine Zwischentabelle der DB transportiert. Dann wäre alles andere eine Sache der datenbankprogrammierung und eines geeigneten Interfaces.

                      Liebe Grüße aus http://www.braunschweig.de

                      Tom

                      --
                      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen