Zwei FritzFax.dbf zusammen führen

Hallo, ich habe zwei FritzFax.dbf mit den jeweiligen *.sff. Wie kann ich diese zusammen führen.

Gipfelkreuz

Hallo,

ich habe das selbe Problem, und folgenden Hinweis mal gefunden, aber es dann bislang noch nicht geschafft das Programm herunterzuladen/auszuprobieren.

http://www.ip-phone-forum.de/showthread.php?t=162372…

Musst mal sehen, ob in dem Anhang wirklich die letzte Version des DBF-Tools drin steht, oder ob es da inzwischen eine neuere gibt (dann bitte auch Hinweis an mich.

Gruß vom Wiz

Hallo liebe Menschen, die immer noch die letzte Version 3.07.61 des phantastischen Fritz!fax benutzen,

der Verfasser dieses Post - im Weiteren richard genannt - hatte ein ähnliches Problem… konnte es lösen… und möchte seine Erkenntnisse mit Euch teilen, damit Ihr Euch selbst helfen könnt, wenn dieses Problem wieder akut werden sollte.

richards Problem bestand darin, dass er über mehrere Monate an einem ANDEREN als seinem eigenen Rechner arbeiten und Faxe verschicken musste.
Diese Faxe galt es bei Gelegenheit in die Fax Datenbank des „Hauptrechners“ zu integrieren.
Es handelte sich also um einen zusammenhängenden Block von Faxen, der an eine bestimmte Stelle in die Hauptdatenbank einzufügen war.

richard hat sich dann entschlossen, das Problem „manuell“ zu lösen, nachdem er ein bisschen recherchiert hatte… und die wichtigsten Fakten seiner Recherche seien hier mit Euch geteilt:

  1. Es handelt sich bei der Datei FritzFax.dbf (Version 3.07.61) um eine dBASE III Datenbank.
    Diese Datenbanken bestehen aus einem binären Header und einem Text [ASCII/ANSI] Datenteil.
    Der genaue Aufbau kann dieser wundervollen Seite entnommen werden:

https:
//www
.
clicketyclick
.
dk
/databases
/xbase
/format
/dbf
.html

Daraus geht hervor, dass am Anfang des binären Headers in dem zweiten 32Bit-Word (Byte Offsets 04-07) die Anzahl der Datensätze in der Datenbank steht.

Dieser Wert muss nach einer manuellen Veränderung des Datenteils also unbedingt angepasst werden!

richard konnte das ganze Problem mit seinem Lieblings-Editor GNU emacs lösen… wie sich nach der Zusammenführung der Datenbanken allerdings zeigte, war das noch nicht genug. Aber dazu etwas später.

  1. Das nächste 16Bit-Word im Header der Datenbank an den Offsets 08 und 09 gibt an, WIE LANG der binäre Header der dBASE III/xBASE Datenbank ist.
    Dies dürfte bei allen FritzFax.dbf der Version 03.07.61 der selbe Wert von 0x02e1 = 737 Bytes sein.

Ab dem Byte 738 beginnt also der Datenbank [ASCII/ANSI] Textteil, der aus den einzelnen Datensätzen (Records) besteht, die einfach direkt hintereinander liegen und alle die selbe Länge haben.
Wie lang ein einzelner Datensatz ist steht auch im Header und da in dem 16Bit-Word an den Byte Offsets 10 und 11.
Das dürfte bei allen FritzFax.dbf der selbe Wert sein: 712 Bytes.

Wer emacs nicht kennt und nur mit Text-Editoren umgehen kann, kann also erst einmal alle zusammenzuführenden FritzFax.dbf-Dateien in ihre Header und Textteile trennen.

Grob gesagt können die Textteile dann zu EINER Datei zusammengefügt werden und zum Schluss „klebt“ man einen (um die Anzahl der Datensätze in den Bytes 04-07) korrigierten Header mit dieser Datei zusammen.

  1. Jeder Daten- bzw. Textteil der Datenbank ist mit dem EOF-Zeichen +Z == +Z == ^Z abgeschlossen… zumindest bei richards FritzFax.dbf Dateien.

Das muss beim Zusammenführen ebenfalls bedacht werden:
Es darf nur EIN EINZIGES ^Z am Ende der zusammengeführeten Datenbank vorhanden sein.

  1. Die Trennung des Headers vom Textteil der Datenbank läßt sich sehr einfach mit dem UN*X/LINUX Tool „dd“ bewerkstelligen, das es auch für Windows gibt, z.B. hier:

[hmmm… kann keine Links in den Beitrag einfügen.
Sucht bitte nach „GnuWin CoreUtils“ oder nach „UnxUtils“ ]

Der folgende Befehl kopiert den Header der xBASE FritzFax.dbf in die Datei FritzHeader.bin
Und wie gesagt: Davon braucht man nur EINEN:

dd if=FritzFax.dbf bs=1 count=737 >FritzHeader.bin

Die folgenden Befehle kopieren den Datenteil der xBASE FritzFax.dbf in die Datei FritzData1.txt und den Datenteil der xBASE Fax\FritzFax.dbf in die Datei FritzData2.txt

dd if=FritzFax.dbf bs=1 seek=737 >FritzData1.txt
dd if=Fax\FritzFax.dbf bs=1 seek=737 >FritzData2.txt

  1. Im einfachsten Fall kann man die Datenteile nun einfach mit dem Header zusammenkopieren, wobei sich der „copy“-Befehl ausgezeichnet selbst um das jeweilige ^Z kümmert.
    Der folgende Befehl sorgt dafür, dass es bei beliebig vielen Datenteilen nur ein einziges ^Z am Ende der Ausgabedatei gibt:

copy /b FritzHeader.bin + FritzData1.txt /a + FritzData2.txt [ + FritzData3.txt …] FritzFax.dbf /a

  1. Nicht vergessen, das zweite 32Bit-Word (Byte Offsets 04-07) der neuen Datei noch so zu verändern, dass die richtige Anzahl an Datensätzen drin steht, also die Summe aus allen Datensätzen aller zusammengeführten xBASE FritzFax Datenbanken.

Nach Änderung der Einstellung „Fax-Ordner“ in den FRITZ!fax-Einstellungen (Tab „FRITZ!fax“) auf das Verzeichnis, in dem die neue FritzFax.dbf liegt, erscheint die Liste aller zusammengeführten Faxe…
ABER…

  1. … die Faxdateien *.sff bzw. *.cff müssen in den selben Verzeichnissen verbleiben, in denen sie bisher lagen, sonst werden sie nicht gefunden, wenn man sie ansehen möchte.
    Sollte man die .sff/.cff Dateien allerdings verschoben haben…
    … kann man sich in einem ersten Schritt damit behelfen, symbolische Links mit den alten Verzeichnisnamen anzulegen, die auf das Verzeichnis zeigen, in dem die Dateien jetzt liegen, z.B.

mklink /j AltesFaxVerzeichnis NeuesFaxVerzeichnis

Das liegt daran, dass in dem FritzFax.dbf Datenbankfeld mit dem Namen DATEI der gesamte Pfad für jedes einzelne Fax eingetragen ist, z.B.

C:\Users\richard\AppData\Roaming\FRITZ!\Fax\01140001.sff oder D:\Faxe\richard\08160004.cff

Natürlich können auch die Pfadangaben in der FritzFax.dbf entsprechend korrigiert werden.
Wie das am einfachsten geht, wenn man kein dBASE III o.ä. Programm mehr hat, soll in einem nächsten Post besprochen werden.

  1. Und wem das alles zu viel ist, der möge sich direkt an richard wenden, damit ihm geholfen werden kann.
    Das Problem ist dann innerhalb 1h gelöst.

Bis sehr bald wieder.
In Liebe,
richard

Hallo!

Ich weiß nicht, das klingt für mich doch sehr masochistisch.

Dbase ist ein in die Jahre gekommenes Datenbankformat, aber es gibt haufenweise Editoren dafür, mit denen das zusammenführen einfacher sein sollte.
Ich hätte ja gerne mal so ne Dbase-Datei, um mir das anzuschauen.

Hallo lieber sweber,

ja ja, klingt ziemlich masochistisch… vor allem für diejenigen Mitmenschen, die keine Programmiererfahrung haben.

Und richard hat sein Problem tatsächlich mit dem Editor emacs gelöst, aber auch der ist für Programmierer entwickelt.

Auf die Schnelle ist richard bei der Suche nach einem Tool über den „gtkdbfeditor“ gestossen, bei dem man aber nur je einen Datensatz anfügen kann.

Der „DBF Manager“ von Astersoft Co. ist hervorragend geeignet, aber der ist halt nicht ganz kostenlos.

Weiter hat richard nicht gesucht, aber wenn sweber einige freie Tools kennt, dann kann er sie ja hier posten.
Damit wäre das Problem dann sowieso wahrscheinlich „für immer“ aber wenigstens für die nächsten 10 Jahre gelöst, nicht?
Das wäre tatsächlich das Beste und keiner hätte mehr Mühe mit Suchen oder mit so einem Programmier-Kram.

Herzlichen Dank für Dein Feedback, Danke.

Bis sehr bald wieder.
In Liebe,
richard

Naja, nach ner kurzen Suche kann ich sagen, daß wohl Excel auch DBase-Dateien lesen und schreiben kann. Dann wäre das Rüberkopieren vermutlich nicht so das Problem.

Mangels einer DBF-Datei von FritzFax kann ich aber wenig dazu sagen, wie gut das konkret funktioniert.