French GEDCOM et B4A - Phase 2

Marc DANIEL

Active Member
Licensed User
Exploitation d'un GEDCOM déjà préchargé avec l'application «GEDCOM3» . Donc les fichiers nécessaires «BASEGED.txt» puis «ListeALPHA.txt» ont déjà été créés dans un répertoire appelé «GEDCOM» La suite «GEDCOM4» ne pourra fonctionner que si les deux fichiers texte cités ci-dessus, sont effectivement existants.

Klaus, si tu passes par là, j'aimerais que tu m'expliques comment accélérer le défilement de CustomListView dans GEDCOM4 surtout pour des gros fichiers longs. Tu m'avais fourni une table (CustomView) Table , qui fonctionnait avec un petit curseur permettant de faire défiler très vite la liste, mais je n'ai pas réussi à adapter ce système à mon application.

Rien d'urgent car je continue à développer la suite.
Cordialement.
Marc
 

Attachments

  • GEDCOM3.zip
    66.9 KB · Views: 82
  • GrosFichiers.zip
    128.6 KB · Views: 77
  • PetitsFichiers.zip
    5.5 KB · Views: 91
  • GEDCOM4.zip
    87 KB · Views: 82

klaus

Expert
Licensed User
J'ai regardé tes projets.

Avec les gros fichiers, le programme GEDCOM3 prend énormément de temps et plante.
J'ai effectué plusieurs essais en diminuant le fichier et en réduisant le nombre limite pour sortir de la routine.
J'ai constaté que jusqu'à 350 ajouts, ça n'est pas trop long et puis ça ralentit de plus en plus.
J'ai alors regardé en détail la routine LectureFichierTexte et j'ai vue que pour chaque ligne tu faisait le tri.
Il n'est pas nécessaire de faire le tri pour chaque ajout, il suffit de le faire une seule fois à la fin.
En mode Release, le tri est fait en moins de 2 secondes avec les gros fichiers d'origine!

J'ai mis le programme GEDCOM32 modifié en pièce jointe.

En ce qui concerne l'affichage de liste des personnes, la classe Table n'est pas forcément la plus appropriée.
Les données pour une personne ne seraient que sur une ligne dans des colonnes et on ne peut pas inclure des images.
Donc ton choix d'utiliser la xCustomListView est judicieux, la lecture est plus facile et mieux structurée.
Je n'ai pratiquement pas utilisé xCustomListView , mais je sais que Erel a ajouté un scroll rapide avec 'lazy loading', avec une classe complémentaire PreoptimizedCLV, que je n'ai jamais utilisée.
Tu trouves les détails ICI.
Ces deux Threads pourraient aussi être utiles, je ne sais pas s'ils utilisent le 'fast scroll':
https://www.b4x.com/android/forum/t...lazy-loading-newer-developers.114096/#content
https://www.b4x.com/android/forum/t...lazy-loading-newer-developers.113843/#content

Je te laisses regarder, et si tu tu as des problèmes je pourrais regarder plus en détail.

Amicalement.
Klaus
 

Attachments

  • GEDCOM32.zip
    66.8 KB · Views: 78

Marc DANIEL

Active Member
Licensed User
Merci Klaus. Toujours aussi réactif et efficace ! Je vais immédiatement me remettre au travail pour tenir compte du tien.
 

Marc DANIEL

Active Member
Licensed User
Je viens d'essayer ton «GEDCOM32», impressionnant, le classement alphabétique se fait à la vitesse de la lumière !!! même avec un très gros fichier !
Mille remerciements, Klaus !
Cordialement,
Au plaisir.
Marc
 

Marc DANIEL

Active Member
Licensed User
Klaus, c'est encore moi ! Juste un petit problème avec GEDCOM3 et le tri alphabétique. Je t'ai mis un exemple de petit fichier GED : la généalogie de Victor HUGO.
J'obtiens avec GEDCOM3 le fichier «BASE.txt» non classé mais sans bug et avec les 34 personnes figurant dans la généalogie de Victor HUGO mais après le tri alphabétique, la ligne du haut est incomplète ou la personne est "coupée",dans le fichier final «ListeALPHA.txt» . Je t'ai mis dans les fichiers joints la «ListeALPHA.txt» obtenue par l'application et la «ListeALPHACorrigée» modifiée manuellement par moi-même.

Si tu arrives à trouver la cause de ce bug, tu me rendrais un grand service.
Bien cordialement,
Marc
 

Attachments

  • GEDCOM3-02-10-2020.zip
    66.7 KB · Views: 72
  • Fichiers.zip
    7.1 KB · Views: 76

Marc DANIEL

Active Member
Licensed User
C'est moi qui suis désolé, voilà le fichier créé par l'application. Le nom écourté situé en haut correspond à CHARCOT Jean-Baptiste qui a été scalpé lors du tri et qui se trouve bien dans le fichier BASE.txt non classé
 

Attachments

  • ListeAlpha.zip
    1.7 KB · Views: 73

Marc DANIEL

Active Member
Licensed User
Screenshot_20201002-174717.PNG


Sinon, j'avance sur le GEDCOM4, j'ai l'intention d'y installer à titre d'exemple, en fichiers internes, l'exemple de la généalogie de Victor HUGO avec une dizaine de petites photos en plus de l'exploitation d'un fichier GEDCOM extérieur. Je t'envoie ça dès que c'est un peu plus «fini».
Cordialement,
Marc
 

klaus

Expert
Licensed User
J'ai regardé ton programme, je constate aussi que la première ligne est tronquée.
J'ai commencé par investiguer mais je ne pas encore compris.
Je constate que ta dernière version tourne en boucle.
J'ai repris la dernière version que je t'avais envoyée, qui fonctionne correctement.
Je ne sais pas ce que tu as ajouté ou modifié.
Demain je ne pourrais pas analyser, je serais absent de la maison.
 

Marc DANIEL

Active Member
Licensed User
Klaus, j'ai identifié le problème dans la routine «LectureComplete» car j'ai constaté que les numéros de code identifiant de chaque personne étaient décalés d'une ligne par rapport au fichier GedCom Source utilisé. C'est à dire que le n° de l'identifiant d'une personne était attribué à la personne précédente dans le GEDCOM, cela explique pourquoi j'obtenais un numéro seul en tête des fichiers «BASE.txt» non trié puis «ListeaALPHA.txt» après le tri alphabétique. J'ai donc remplacé la boucle «DO While Ligne <> NULL - LOOP» par «FOR i=0 to File.Size-1 - NEXT» et j'ai modifié les lignes 217 et 218 pour éviter le décalage généré par les versions précédentes.
Cela a l'air de fonctionner avec les quelques GEDCOM que j'ai testés.
Je te dois donc des excuses, le tri alphabétique n'avait rien à voir avec ce bug. C'était ma routine «LectureComplete» qui générait cette erreur !

Klaus, excellent week-end !
Cordialement.
Marc
 

Marc DANIEL

Active Member
Licensed User
Le chantier avance à mon rythme de retraité .
 

Attachments

  • GEDCOM3-04-10-2020.zip
    66.5 KB · Views: 73
  • GEDCOM4-4-10-2020.zip
    462.3 KB · Views: 73
  • VictorHUGO.zip
    2.5 KB · Views: 75

klaus

Expert
Licensed User
J'ai regardé tes programmes et j'ai constaté, que dans la routine LectureComplete, le premier nom est vide.
Est-ce la même chose chez toi?
Si oui, as-tu déjà résolu le problème?
Si non je pourrais regarder plus en détail demain.

Autre question:
Pourquoi deux applications?
Il me semble plus rationnel d'en n'avoir qu'une qui fait le tout: lire, trier, filtrer et afficher.
Je suis persuadé qu'il serait intéressant d'établir une base de données pour les données.
Ça permettrait des filtrages beaucoup plus faciles.
 

Marc DANIEL

Active Member
Licensed User
Oui, Klaus, il y a encore des bugs et notamment, le décalage des "codes" identifiants de chaque personne d'un individu sur le suivant. Je ne parviens pas à trouver l'erreur de programmation mais je ne veux pas te barber avec les GECOMs. Pour tenter de trouver une solution à tout cela, je me concentre actuellement sur un petit GEDCOM de seulement 35 noms où tout est regroupé en fichiers internes en une seule application, ce que tu me conseilles fort justement de faire et c'est mon intention finale lorsque j'aurai réglé tous les problèmes.
Voici le brouillon inachevé de mon travail actuel. C'est un exemple d'utilisation d'un GEDCOM sur une petite généalogie autour de Victor HUGO avec, pour les Français, des personnages célèbres comme le Commandant CHARCOT ou Alphonse DAUDET, bizarrement reliés à Victor HUGO dans ce petit GEDCOM mais là-aussi, j'ai des imperfections à régler (Doubles mariages, date et lieu de mariage que je ne parviens pas à afficher) mais j'avance lentement. Je me bats avec B4X mais j'y arriverai ...
Je te préviens, il y a des bugs dans ce projet. Les GEDCOM et la liste alphabétique (dont je te dois la réalisation) sont inclus en fichiers internes ...
Bonne journée.
Cordialement,
Marc
 

Attachments

  • VictorHUGO-06-10-2020.zip
    448.3 KB · Views: 72

Marc DANIEL

Active Member
Licensed User
Dans l'exemple ci-dessus, Victor HUGO est marié avec sa seconde épouse (Juliette DROUET) car la seconde union a écrasé la première avec la mère de ses 5 enfants.
Donc, j'ai modifié manuellement le GEDCOM et la liste ALPHA pour qu'il apparaisse marié avec la mère de ses enfants Adèle FOUCHER. Donc, j'ai encore de gros progrès à faire pour maîtriser l'exploitation des GEDCOMs...
Bonne journée à toi !
Cordialement,
Marc
 

Attachments

  • VictorHUGO.zip
    448.3 KB · Views: 73

Marc DANIEL

Active Member
Licensed User
J'avance lentement, j'affiche désormais date et lieu de mariage mais, j'ai oublié que je travaillais sur un fichier GEDCOM brut "ANSI", donc j'ai oublié d'utiliser la bonne page de codes et les caractères accentués n'ont pas été traités. Mais j'avance ...
 

Attachments

  • VictorHUGO-BIS.zip
    448.3 KB · Views: 69

Marc DANIEL

Active Member
Licensed User
En fait, grâce aux bons conseils de notre ami Sergey, j'ai simplement réenregistré le GEDCOM (ANSI) avec NOTEPAD en GEDCOM (UTF-8) et les caractères spéciaux ont été correctement affichés.
 

Attachments

  • VictorHUGO-UTF-8.zip
    448.3 KB · Views: 75

Marc DANIEL

Active Member
Licensed User
Je m'aperçois qu'il y a des erreurs, non pas dans le GEDCOM mais sans doute dans la ListeALPHA car il y a des mariages impossibles (voire des incestes) entre parents et enfants. Encore un bug sans doute créé par GEDCOM3
 

Attachments

  • VictorHUGO.zip
    448.5 KB · Views: 75

Marc DANIEL

Active Member
Licensed User
Non, le bug venait de la routine "RechercheCouple" Phase 2 et j'ai modifié les lignes suivantes:

Capture.PNG


ce qui a corrigé le bug qui ne venait ni du fichier GEDCOM, ni du fichier ListeALPHA.txt...

Screenshot_20201007-092410.PNG


Il me reste encore à gérer les unions multiples (qui m'ont provoqué des bugs au départ mais j'ai trafiqué le GEDCOM provisoirement pour ne gérer que la première union), je vais tenter désormais de gérer au moins les deux premières unions.
Ensuite, mon but sera d'utiliser les sub "Pater_Click" et "Mater_Click" pour modifier directement le Layout Affichage avec soit le père, soit la mère.
Puis, je vais m'attaquer aux enfants de chaque couple que je vais afficher en bas d'écran mais ce sera difficile pour les fratries nombreuses...
Donc encore de quoi m'occuper quelque temps.
Lorsque ce but sera atteint, et que le projet «Victor HUGO» sera au point, je reviendrai à mon projet initial d'exploitation d'un fichier GEDCOM extérieur téléchargé et sans doute, comme Klaus me le conseille, le tout compacté dans une seule application.
 

Attachments

  • VictorHUGO.zip
    448.5 KB · Views: 74

Marc DANIEL

Active Member
Licensed User
Klaus, je dois te remercier également car tu m'as indiqué où je pouvais trouver comment effectuer un défilement rapide de la liste déroulante xCustomListView (CLV1).
Finalement, ce fut très simple, il fallait que j'ajoute:

Capture.PNG


dans les déclarations et bien sûr que j'ajoute la bibliothèque correspondante à PreoptimizedCLV

Puis juste avant de remplir la liste, j'ai ajouté les deux lignes essentielles:

PCLV.Commit.png


et donc le petit curseur rond bleu clair est apparu sur le côté droit de la liste déroulante:

Screenshot_20201007-115950.PNG


sachant que l'instruction exacte permettant d'ajouter le curseur de défilement rapide est «PCLV.Commit»
Mais bon, en ce qui concerne ma petite généalogie sur Victor HUGO, ce n'est pas trop utile, vu que la liste ne comprend que 35 noms mais cela me sera absolument indispensable pour traiter les gros GEDCOM de plus de mille noms !

Donc merci aussi à EREL.
Bonne journée.
Cordialement,
Marc
 

Attachments

  • PCLV.Commit.png
    PCLV.Commit.png
    6.7 KB · Views: 71

klaus

Expert
Licensed User
Salut Marc,
Je me suis 'amusé' un peu avec ton programme et je me suis permis quelques modifications:
1. Pour la conversion des dates E en F, j'ai remplacé trois sections de code par une routine.
2. J'ai modifié la lecture de la photo pour respecter le rapport hauteur / largeur.
3. J'ai modifié un peu certains layouts avec des 'achors'
4. Tous les layouts ont en base un Panel.
Ce qui permet de ne les charger qu'une fois et de les afficher et de les cacher selon les besoins.
Une autre solution serait de passer à B4XPages, qui permet une gestion de pages facile et multi-plateforme, vivement conseillé.
Dans ton cas, chaque fois que tu sélectionnes une personne tu recharges un nouveau layout, mais le précédent reste.
Même avec le Panel Fond de l'affichage tu peux sélectionner une autre personne.

Tu peux remarquer que le Panel que j'ai ajouté s'appelle pnlSelection.
J'ai pour habitude de mettre un préfixe de trois lettres avant chaque View qui correspond à son type.
Exemples: pln pour Panel, lbl pour Label, btn pour Button, edt pour EditText etc.

Je pars maintenant en visite chez mon frère jusqu'à dimanche, donc peu ou pas de B4X.
 

Attachments

  • VictorHUGO_K.zip
    449.3 KB · Views: 73
Top