Nouvelles:

SMF - Just Installed!

Menu principal

6.7 - export Gedcom, mariages

Démarré par jlsviro, Mai 14, 2022, 06:37 PM

« précédent - suivant »

jlsviro

Message de mbuono 13 Déc 2016, 10:38
Bonjour,
Encore un problème que je détecte mais que j'ai un peu de mal à analyser...

Contexte :
J'essaye différents outils permettant de tracer des arbres à partir d'un fichier ged, donc j'exporte (en gedcom complet).

A la lecture du fichier ged au moyen de l'outil "WinAncetre", je reçois "pas mal" de messages d'erreur indiquant :
"uneTelle  ne fait pas référence au mariage @F0_186@ dont elle est l'épouse"
ou
"unTel ne fait pas référence au mariage @F10_32@ dont il est l'époux"

Dans tous les cas, il s'agit d'individus ayant contracté plusieurs mariages ou ayant eu des enfants hors union.

J'ai cherché à vérifier lequel des 2 logiciels était en cause :
avec VisuGed (qui ne voit aucune erreur sur les mariages), j'ai importé mon fichier ged (provenant donc de Généamania) puis je l'ai exporté au même format.

Cette fois, avec le fichier provenant de VisuGed, WinAncêtre ne détecte aucune erreur.

En conclusion :
Ça ne veut pas dire à 100% qu'il y ait un problème dans Généamania puisque VisuGed ne voit rien d'anormal... On peut donc conclure
- soit que la sortie ged de Généamania peut être améliorée
- soit que la lecture ged de VisuGed n'est pas assez tolérante ou est imparfaite...

Je ne peux rien dire de plus précis pour l'instant.

suite :
dans Geneamania, je viens de faire un test en exportant en ged un seul individu marié plusieurs fois (donc par exp_Gedcom_Personne.php) ; dans ce cas, ses 3 mariages apparaissent dans le fichier ged.
Dans le fichier produit par exp_Gedcom.php, un seul de ses mariages est présent.

Si l'on compare le traitement des unions dans les 2 fichiers php, on voit - dans exp_Gedcom.php - que la requête sql contient 'limit 1' (ce qui n'existe pas dans exp_Gedcom_Personne.php)...
J'ignore pour quelle raison ce 'limit 1' est utilisé, mais si on le supprime, les mariages multiples figurent  bien dans le fichier ged ; mais je ne sais pas s'il y a des effets induits néfastes...
En revanche, les naissances hors mariage ne sont pas affectées et continuent à être ignorées par WinAncetre.

Message de jlsviro 13 Déc 2016, 22:15
Bonsoir,

Le 'limit 1' n'a effectivement pas de sens car une personne peut avoir plusieurs conjoint dans le temps.

Bien vu  ^^; Je rectifie dans la prochaine version.

Jean-Luc

Message de jlsviro 13 Déc 2016, 22:35
D'un autre côté, le 'limit 1' n'empêche pas d'avoir toutes les unions dans le fichier Gedcom. En effet, les unions manquantes du côté d'un conjoint seront présente de l'autre. Donc un export / import Gedcom fonctionne et les unions multiples ne sont malgré tout pas perdues...

A creuser, donc...  x)

Message de mbuono 14 Déc 2016, 7:42
Bonjour,
C'est pour cela que je me demandais si le problème ne venait pas d'une lecture trop restrictive dans WinAncetre...
leur message d'erreur apparaît quand une union est définie et qu'elle n'est pas utilisée dans les données d'un des deux partenaires.
C'est aussi vrai dans le cas des enfants "hors union" :
le fichier ged contient bien une union avec un parent "normal" plus un parent "0" ; WinAncetre proteste car il attend que le parent "normal" utilise l'union.

Je ne m'y connais pas assez en format des fichiers ged pour savoir quel est le comportement adéquat... peut-être n'y a-t-il pas lieu d'intervenir dans généamania !

Message de mbuono 21 Déc 2016, 10:47
Bonjour - et bonnes fêtes de fin d'année !

Voilà, bug ou pas, j'ai résolu mon problème avec WinAncetre de la façon suivante :

dans exp_Gedcom, juste avant "ecriture de la ligne parents", j'ai ajouté une recherche des enfants ayant le père (ou la mère) absent et j'ai écrit une ligne du style "1 FAMS n°pere 0" (ou "1 FAMS 0 n°mere).

Ça satisfait WinAncetre, VisuGed ne proteste pas et j'ignore s'il y a des effets indésirables ailleurs...

Voilà le code ajouté (environ à ligne 72):

// mbuono definition famille avec enfant hors union
$sql = 'select Enfant from '.$n_filiations.' where ';
$Pere = 0; $Mere = 0;
switch ($enreg[3]) {
case 'm' : $Pere = $Refer; break;
case 'f' : $Mere = $Refer; break;
}
$sql = $sql.'Pere = '.$Pere.' and Mere = '.$Mere;
if ($resXX = lect_sql($sql)) {
if ($resXX->rowCount() ) fwrite($fp,'1 FAMS @F'.$Pere.'_'.$Mere.'@'.$cr);
}
         
// Ecriture de la ligne parents

Message de jlsviro 24 Déc 2016, 17:27
A voir...

Je regarde plus en détail pendant les vacances.

Merci pour vos efforts  ^^;

jean-Luc