Ce script permet de réorganiser le contenu de fichiers DBF.

Jean-Charles BRAUN 8301f4c432 Initial commit 1 year ago
dbfconvert.py 8301f4c432 Initial commit 1 year ago
readme.md 8301f4c432 Initial commit 1 year ago

readme.md

dbfconvert.py

Ce script permet de réorganiser le contenu de fichiers DBF.

Prérequis

  • python3-colorama
  • python3-dbf

Utilisation

Placez le fichier dbfconvert.py dans le dossier contenant vos fichiers DBF, puis faites :

$ python3 dbfconvert.py

Fonctionnement

Ce script fonctionne dans un cadre bien précis : il permet de manipuler le contenu de fichiers DBF créés avec QGIS, quand celui-ci importe un fichier DXF contenant des XDATA (Extended Entity Data).

!!! WARNING !!!
>> bêta <<
+ TODO +
- détection des colonnes vides
- détection des champs incorrects
- prise en charge des caractères spéciaux
- création d'un journal (log file)

Exemple avec un fichier DXF contenant des données étendues (XDATA) sur les tracés, les points et les blocs :

Dans un logiciel de type CAD, les XDATA ne sont pas directement visibles à l'écran. Selon les possibilités du logiciel, en sélectionnant une entité, la commande XDLIST retourne :

* Registered Application Name: TABLE_UE
* Code 1002, Starting or ending brace: {
* Code 1000, ASCII string: 28
* Code 1000, ASCII string: Structure
* Code 1000, ASCII string: 094268
* Code 1000, ASCII string: 20160222
* Code 1000, ASCII string: Saulx
* Code 1000, ASCII string: 70478
* Code 1002, Starting or ending brace: }

Lorsque QGIS importe ce fichier DXF, ce dernier est alors divisé en plusieurs couches :

  • entities LineString
  • entities Point
  • ...

En utilisant la fonction Séparer une couche vecteur et en choisissant Layer pour chacune des couches, on obtient une série de fichiers du type CPG, DBF, PRJ, QPJ, SHP et SHX.

Lorsqu'on charge les fichiers SHP ainsi obtenus dans un nouveau projet QGIS, on obtient des couches qui correspondent aux anciens calques du fichier DXF. Chacune des couches contient des entités graphiques ainsi qu'une table attributaire à 6 colonnes. L'une de ces colonnes est nommée ExtendedEn, elle contient les données étendues (XDATA) associées à chaque entité.

Le script dbfconvert.py crée une copie des fichiers CPG, DBF, PRJ, QPJ, SHP et SHX. Puis, il va modifier les fichiers DBF selon leur contenu :

Cas n°1 : le fichier DBF est vide
-> tous les fichiers liés à la couche sont effacés

Cas n°2 : le fichier DBF ne contient ni XDATA ni texte
-> tous les fichiers liés à la couche sont effacés

Cas n°3 : le fichier DBF ne contient pas de XDATA mais du texte
-> tous les fichiers liés à la couche sont conservés, sans modifications

Cas n°4 : le fichier DBF contient des XDATA (pas de texte ici)
-> traitement du fichier DBF avec réorganisation des colonnes

Exemple de contenu d'un fichier DBF avec Extended Entity Data :

Layer SubClasses ExtendedEn Linetype EntityHand Text
2-Structures AcDbEntity:AcDb2dPolyline { 13 Structure 094268 20160222 Saulx 70478 } 25E
2-Structures AcDbEntity:AcDb2dPolyline { 14 Structure 094268 20160222 Saulx 70478 } 269
2-Structures AcDbEntity:AcDb2dPolyline { 16 Structure 094268 20160222 Saulx 70478 } 27F
2-Structures AcDbEntity:AcDb2dPolyline { 21 Structure 094268 20160222 Saulx 70478 } 2EA
2-Structures AcDbEntity:AcDb2dPolyline { 22 Structure 094268 20160222 Saulx 70478 } 2FB
2-Structures AcDbEntity:AcDb2dPolyline { 28 Structure 094268 20160222 Saulx 70478 } 33E

Après traitement, seule la colonne ExtendedEn est conservée et les informations sont séparées :

UE TYPE OP DATE COMMUNE INSEE
13 Structure 094268 20160222 Saulx 70478
14 Structure 094268 20160222 Saulx 70478
16 Structure 094268 20160222 Saulx 70478
21 Structure 094268 20160222 Saulx 70478
22 Structure 094268 20160222 Saulx 70478
28 Structure 094268 20160222 Saulx 70478

Le fichier DBF est prêt !

Licence

Le programme ci-joint est publié sous licence GPLv3.
www.gnu.org/licenses/gpl-3.0.fr.html