French GEDCOM et B4A

Marc DANIEL

Well-Known Member
Licensed User
Quelle est la meilleure façon d'effectuer un tri alphabétique dans une très grosse liste de noms ? Merci à vous.
 

Attachments

  • GEDCOM.zip
    62 KB · Views: 343

klaus

Expert
Licensed User
Longtime User
J'ai voulu essayer ton application, mais malheureusement elle il manque le fichier Download/base.ged.
Je n'ai pas d'expérience dans les procédés de tri, mais introduire les donnés dans une List pourrait être une solution.
Par-contre, je suppose que tu as des caractères accentués, ce qui pourrait poser des problèmes, je ne suis pas sûr que les différents algorithmes en tiennent compte.
Par exemple, dans SQLite, les tris n'en tiennent pas compte.
J'ai trouvé sur internet une fonction qui supprime les accents:
B4X:
'returns a new string without accented characters
Private Sub RemoveAccents(s As String) As String
    Dim normalizer As JavaObject
    normalizer.InitializeStatic("java.text.Normalizer")
    Dim n As String = normalizer.RunMethod("normalize", Array As Object(s, "NFD"))
    Dim sb As StringBuilder
    sb.Initialize
    For i = 0 To n.Length - 1
        If Regex.IsMatch("\p{InCombiningDiacriticalMarks}", n.CharAt(i)) = False  Then
            sb.Append(n.CharAt(i))
        End If
    Next
    Return sb.ToString
End Sub

Tes données sont sous quelle forme ?
 

Marc DANIEL

Well-Known Member
Licensed User
Merci Klaus, il suffit de renommer n'importe quel fichier. GED en base. GED et le placer dans le répertoire Download pour tester. L'application n'est pas terminée, je suis en phase expérimentale. Je vais améliorer et renvoyer le ZIP...
 

klaus

Expert
Licensed User
Longtime User
Tu ne réponds pas à ma question:
Tes données sont sous quelle forme ?
Je ne sais pas ce qu'est un fichier GED.
Est-ce une base de données, un fichier texte etc.
Il serait plus facile si tu fournissais un fichier, à la place que celui qui cherche à aider doive se débrouiller à faire fonctionner l'application.
 

Marc DANIEL

Well-Known Member
Licensed User
C'est un fichier texte avec des balises spécifiques. Je ne suis pas chez moi et loin de mon PC, donc je t'enverrai un lien demain pour le fichier GED ou gedcom... Ce sont les Mormons qui ont créé ces codes pour sauvegarder des généalogies...
Cordialement.
Marc DANIEL
 

Marc DANIEL

Well-Known Member
Licensed User

Attachments

  • Les fichiers GED.pdf
    266 KB · Views: 364
  • Extrait.png
    Extrait.png
    74.5 KB · Views: 349
  • Extrait n°2.png
    Extrait n°2.png
    61.6 KB · Views: 358

Marc DANIEL

Well-Known Member
Licensed User
Merci Klaus pour la fonction anti-accents. Je pense que je ne vais classer par ordre alphabétique que les NOMS qui sont tous en MAJUSCULES mais certaines sont effectivement accentuées comme É par exemple, donc je vais utiliser ta fonction...
Bonne journée. Au plaisir.
Marc
 

klaus

Expert
Licensed User
Longtime User
J'ai essayé ton dernier programme. J'ai cherché un ficher exemple sur internet.
Je ne sais pas ce qu'il vaut, mais le programme le reconnait et puis plus rien, haut de l'écran jaune et la partie inférieure en blanc.
Je suppose que les données ne correspondent pas.
Le fichier que j'ai trouvé sur internet a des lignes vierges, ton programme plante sur des lignes vierges dans cette partie à la ligne 84:

1596532057383.png


Car dans ce cas lgmot est égal à zero donc lgmot - 4 = -4 qui fait planter Ligne.SubString.

Pour tes layouts tu devrais regarder les Anchors (ancres) car sur mon appareil le bas de l'écran reste noir. Est-ce voulu?
Image de droite avec ancres.
J'ai joint le projet avec les ancres pour la page d'accueil.

1596532973544.png
1596532961409.png
 

Marc DANIEL

Well-Known Member
Licensed User
Merci Klaus pour ta réactivité et le temps que tu passes sur mon projet.
Je travaille actuellement sur le classement alphabétique des listes.
Les imperfections des Layouts sont dues au fait que je ne suis qu'au début d'un long processus d'améliorations,. Je vais prendre en compte les fichiers GED avec des lignes vides. Merci à toi...
Mon but final est de permettre à l'utilisateur de trouver à partir d'un nom, la date de naissance, etc. les parents, enfants... Mais je suis encore loin de la fin...
Bonne journée. Cordialement. Marc
 

Marc DANIEL

Well-Known Member
Licensed User
Klaus, je crois avoir réglé le problème des lignes vides en effectuant des trous dans mon propre fichier GED et en le réenregistrant... Merci de m'avoir signalé ce problème. Je poursuis mes travaux... Cordialement.
 

Attachments

  • GEDCOM.zip
    62.2 KB · Views: 365

klaus

Expert
Licensed User
Longtime User
Tu peux simplifier la routine Lecture:
B4X:
Sub Lecture
    Tribu.Initialize
    Reader.Initialize2(File.OpenInput(File.DirRootExternal, "/Download/base.ged"),"Windows-1252")
    Ligne=Reader.Readline
    Do While Ligne <> Null
        Log(Ligne)
        Ligne = Reader.ReadLine
        If dt=1 Then
            Individu=Ligne.substring(7)
            TRi
            NOMS
        End If
        If Ligne<>Null  Then
            lgmot=Ligne.Length
            If lgmot<>0 Then
                If Ligne.substring(lgmot-4)="INDI"  Then
                    dt=1
                Else If Ligne.SubString(lgmot-3)="FAM" Then
                    TF=TF+1
                Else If Ligne.SubString2(2,5)="SEX" And Ligne.SubString(lgmot-1)="F" Then
                    Femmes=Femmes+1
                Else If Ligne.SubString2(2,5)="SEX" And Ligne.SubString(lgmot-1)="M" Then
                    Hommes=Hommes+1
                End If
            End If
        End If
    Loop
    Reader.Close
End Sub

Un autre conseil, effectues de temps en temps un clic droit avec la souris et tu obtiens le menu ci-dessous:

1596555036310.png

Et cliques sur Auto Format, ça reformate le code avec toutes les indentations.
 

Marc DANIEL

Well-Known Member
Licensed User
Trop sympa Klaus !!! J'ai l'impression d'avoir un assistant. Quelle efficacité ! Merci pour la simplification de la routine Lecture. Je viens de modifier illico...
et merci pour tes précieux conseils que je vais suivre ...
Je m'arrête pour aujourd'hui, il y a un incendie dans le sud où j'habite ... et des Canadairs volent au dessus du village ...
Cordialement. Au plaisir.
Marc
 

klaus

Expert
Licensed User
Longtime User
Incendies dans le sud est un sujet que revient chaque année.
Mais quand on habite dans la région je pense que ça peut être angoissant.
Dans quel coin habites-tu?
Moi, j'habite à Fully, dans la vallée du Rhône avant le lac Léman presque au pied du col du Grand St. Bernard.
 

Marc DANIEL

Well-Known Member
Licensed User
Klaus, j'ai trouvé une routine de tri alphabétique en VB. Je suis en train de tenter de l'insérer dans mon projet avant l'affichage des noms en désordre. Il faut cependant que je convertisse correctement le VB en B4A
 

Attachments

  • Classement alphabétique.txt
    5.5 KB · Views: 330

Marc DANIEL

Well-Known Member
Licensed User
Bon, ça bogue gravement, il va falloir que je trouve autre chose
 

Attachments

  • GEDCOM.zip
    63.4 KB · Views: 299

klaus

Expert
Licensed User
Longtime User
Je suis un peu confus.
J'ai une routine de tri dans la classe Flexible Table.
Je t'ai proposé la routine de suppression de caractères accentués et j'ai complètement occulté la question de base le tri. Toutes mes excuses.
Je devrais modifier la routine car elle spécifique aux données de la table.
Trois possibilités:
1. Je peux t'envoyer la routine telle quel.
2. Je peux l'adapter à tes donnés. Dans ce cas j'aurais besoin d'un ficher données.
3. Je suppose que tu veux afficher les données dans un tableau. Dans ce cas tu pourrais utiliser la classe Flexible Table qui contient une routine de tri.
 

Marc DANIEL

Well-Known Member
Licensed User
Merci Klaus, je vais étudier tes propositions plus tard. J'ai été obligé de m'absenter de chez moi.
Cordialement.
Marc
 
Top