PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → statistique sur fichier txt
statistique sur fichier txt
Débuté par infobarquee, 14 nov. 2025 20:47 - 12 réponses
Membre enregistré
3 messages
Posté le 14 novembre 2025 - 20:47
bonjour tout le monde,
je découvre et créé ma première application avec windev mobile
connaissant assez bien le php, je sais comment faire, mais je ne connais pas assez bien windev

j'ai un fichier txt avec des données dedans du style
latitude; longitude; date; animal; sexe; nb
47.00;-2.00;17/12/25;oiseau bleu ;male;2
47.00;-2.00;17/12/25;oiseau bleu ;indetermine;2
47.01;-2.01;17/12/25;oiseau bleu;femelle;5
47.01;-2.01;17/12/25;oiseau rouge;femelle;5
47.06;-2.01;17/12/25;oiseau rouge;femelle;10

le but est donc de connaitre par type animal sexe le nb
ce qui donnerait
oiseau bleu male 2
oiseau bleu indetermine 2
oiseau bleu femelle 5
oiseau rouge femelle 15 ==>5+10

en php je lis les ligne, mets en tableau [i] les données pour les grouper et les compter
mais avec windev, je ne trouve pas
j'ai chercher avec occurence, mais rien n'a l'air de correspondre

si vous avez une idée et un exemple, merci d'avance
bonne soirée
Membre enregistré
4 308 messages
Posté le 15 novembre 2025 - 09:24
Bonjour,
La gestion séquentielle des bases de données a commencé à disparaitre au début des années 1970.
A priori, il n'y a pas qu'en WLangage que tu as des lacunes, mais aussi en ce qui concerne les SGBDR.
La première chose à faire est de te documenter sur l'un et l'autre. (Avant de conduire, on va à l'auto-école)
Tu verras qu'il est plus simple et plus rapide d'utiliser une requête SQL (avec la clause d'agrégation SUM) que de boucler, surtout si tu vas faire vivre ta base.

--
Il y a peut être plus simple, mais, ça tourne
Quand tout a échoué, utilise l'option RTFM
Membre enregistré
2 294 messages
Posté le 15 novembre 2025 - 09:35
Bonjour,

Voir dans l'aide en ligne COUNT(DISTINCT Rubrique) :
https://doc.pcsoft.fr/fr-FR/?2034005&name=fonctions_sql_utilisables_dans_les_requetes_sql#SQL_COUNT
--
Bon dev,
Jean-Pierre
Message modifié, 15 novembre 2025 - 09:36
Membre enregistré
4 308 messages
Posté le 15 novembre 2025 - 11:42
COUNT va donner le nombre d'enregistrement concernant un (Race,Sexe) mais en aucun cas le nombre de spécimens observés.
Dans l'exemple on aura Oiseau rouge,Femelle, 2 et non 15, qui est le SUM de 5 et 10

--
Il y a peut être plus simple, mais, ça tourne
Quand tout a échoué, utilise l'option RTFM
Message modifié, 15 novembre 2025 - 11:42
Membre enregistré
993 messages
Posté le 15 novembre 2025 - 12:39
Bonjour,
si vous souhaitez rester sur un fichier txt, il y a les "Fonctions de gestion des chaînes de caractères" :

https://doc.pcsoft.fr/fr-FR/?3024015

où vous trouverez "ChaîneVersTableau", "ExtraitChaîne", etc ...
Mais il faudra ensuite boucler pour calculer.

Une autre solution serait d'utiliser une table avec ruptures et un champ libellé dans le Bas de Rupture pour effectuer le calcul (somme).

Rupture dans un champ Table
https://doc.pcsoft.fr/fr-FR/?1013305

voir la section "Calculs automatiques dans les ruptures d'un champ Table" sur cette même page pour obtenir la Somme.
Par exemple, en utilisant la fonction "ExtraitChaîne" pour remplir une table "Table1" contenant 2 colonnes :

MaChaine est une chaîne = [
47.00;-2.00;17/12/25;oiseau bleu ;male;2
47.00;-2.00;17/12/25;oiseau bleu ;indetermine;2
47.01;-2.01;17/12/25;oiseau bleu;femelle;5
47.01;-2.01;17/12/25;oiseau rouge;femelle;5
47.06;-2.01;17/12/25;oiseau rouge;femelle;10
]

POUR TOUTE chaîne MaLigne de MaChaine SEPAREE PAR CRLF
TableAjouteLigne(Table1, SansEspace(ExtraitChaîne(MaLigne, 4, ";", DepuisDébut)) + " " + SansEspace(ExtraitChaîne(MaLigne, 5, ";", DepuisDébut)), Val(ExtraitChaîne(MaLigne, 6, ";", DepuisDébut)))
FIN


Cdlt
Membre enregistré
3 messages
Posté le 15 novembre 2025 - 16:17
Voroltinquo a écrit :
Bonjour,
La gestion séquentielle des bases de données a commencé à disparaitre au début des années 1970.
A priori, il n'y a pas qu'en WLangage que tu as des lacunes, mais aussi en ce qui concerne les SGBDR.
La première chose à faire est de te documenter sur l'un et l'autre. (Avant de conduire, on va à l'auto-école)
Tu verras qu'il est plus simple et plus rapide d'utiliser une requête SQL (avec la clause d'agrégation SUM) que de boucler, surtout si tu vas faire vivre ta base.

--
Il y a peut être plus simple, mais, ça tourne
Quand tout a échoué, utilise l'option RTFM



je gère des fichiers de plus de 2Go sur mon appli php, ce n'est pas pour rien, car par jour il y a plusieurs RUN générés
une bdd serait saturées en très peu de temps

dans mon cas précis, effectivement, la bdd serait un plus, mais mon choix se fait sur le txt pour des traitements ultérieurs afin d'afficher les données sur qgis par la suite
je pourrais remplir une bdd, puis exporter en txt ou csv, utiliser sum etc...
mais tellement eu des déboires suite au crash de bdd, que le txt est plus facile, on efface le fichier et on recommence
Membre enregistré
993 messages
Posté le 15 novembre 2025 - 16:43
si vous souhaitez récupérer les calculs réalisés dans les ruptures, vous pouvez le faire par programmation.
Par exemple, le code suivant va Tracer les résultats de "Libellé1" placé sur le "Bas de Rupture" qui calcule la somme par type d'animal :

i est un entier
MaChaine est une chaîne
POUR i = 1 _À_ Table1..Occurrence
SI Table1[i][1]..Valeur <> MaChaine ALORS
Trace(Table1[i][1]..Valeur + " - " + Table1[i].BasRupture1.Libellé1..Valeur)
MaChaine = Table1[i][1]..Valeur
FIN
FIN
Membre enregistré
4 308 messages
Posté le 15 novembre 2025 - 18:25
Les ruptures sur un champ table, oui, mais.... il faut travailler sur des données triées.
La rupture se fait sur la race et le sexe. Si on ajoute :
47.00;-2.00;18/12/25;oiseau bleu ;male;5

Les ruptures concernant oiseau bleu/male seront scindées. Une en début de champ table, l'autre après les oiseaux rouges femelles.
Il faut donc alimenter le champ table avec un tableau de structures/classe que l'on aura préalablement trié sur race et sexe, voire sur race+sexe.

Rq Il serait dans ce cas judicieux de travailler en XML ou en JSON pour simplifier la récupération de données via une désérialisation.

--
Il y a peut être plus simple, mais, ça tourne
Quand tout a échoué, utilise l'option RTFM
Message modifié, 15 novembre 2025 - 18:56
Membre enregistré
993 messages
Posté le 15 novembre 2025 - 18:41
Salut Voroltinquo,

C'est la raison pour laquelle j'ai donné un exemple avec "ExtraitChaîne" sur le Post #5.
En construisant la chaine à destination de la table, ça fonctionnera.
Ainsi, pas besoin de trier.

Mais il y a de nombreuses possibilités, c'est donc un exemple parmi tant d'autres.

Cdlt
Message modifié, 15 novembre 2025 - 18:43
Membre enregistré
4 308 messages
Posté le 15 novembre 2025 - 19:06
Cédric_34 a écrit :
En construisant la chaine à destination de la table, ça fonctionnera.

ça n'empêche pas la scission des données. Le cahier des charges demande
le but est donc de connaitre par type animal sexe le nb

On aura donc (en reprenant mon exemple
oiseau bleu ;male;2
oiseau bleu ;indetermine;2
oiseau bleu;femelle;5
oiseau rouge;femelle;15
oiseau bleu ;male;5

et non
oiseau bleu ;male;7
oiseau bleu ;indetermine;2
oiseau bleu;femelle;5
oiseau rouge;femelle;15


Ou alors, il faut ajouter un TableTrie à l'issue du remplissage
--
Il y a peut être plus simple, mais, ça tourne
Quand tout a échoué, utilise l'option RTFM
Message modifié, 15 novembre 2025 - 19:30
Membre enregistré
993 messages
Posté le 15 novembre 2025 - 19:21
Tu ne tiens pas compte du Post #5 concernant le "ExtraitChaîne".

Test Flash avec le code brut du Post #5 :






Edit : je viens de m'apercevoir que je n'ai pas copié le TableTrie et qu'il n'apparait pas dans le code (si c'est ce que tu voulais dire).

MaChaine est une chaîne = [
47.06;-2.01;17/12/25;oiseau rouge;femelle;10
47.00;-2.00;17/12/25;oiseau bleu ;male;2
47.00;-2.00;17/12/25;oiseau bleu ;indetermine;2
47.01;-2.01;17/12/25;oiseau bleu;femelle;5
47.01;-2.01;17/12/25;oiseau rouge;femelle;5
]

POUR TOUTE chaîne MaLigne de MaChaine SEPAREE PAR CRLF
TableAjouteLigne(Table1, SansEspace(ExtraitChaîne(MaLigne, 4, ";", DepuisDébut)) + " " + SansEspace(ExtraitChaîne(MaLigne, 5, ";", DepuisDébut)), Val(ExtraitChaîne(MaLigne, 6, ";", DepuisDébut)))
FIN

TableTrie(Table1)
Message modifié, 15 novembre 2025 - 19:42
Membre enregistré
4 308 messages
Posté le 15 novembre 2025 - 19:32
Cédric_34 a écrit :
Tu ne tiens pas compte du Post #5 concernant le "ExtraitChaîne".

Si, mais ajoute une nouvelle donnée, tu verras que cette donnée n'est pas ajoutée avec les autres données du même type. Le tri, quel qu'il soit, est nécessaire.
Cela provient du fait que la création d'un haut de rupture est lié à l'événement "affichage d'une ligne" et qu'il n'y a pas de vérification à postériori.
--
Il y a peut être plus simple, mais, ça tourne
Quand tout a échoué, utilise l'option RTFM
Message modifié, 15 novembre 2025 - 19:41
Membre enregistré
993 messages
Posté le 15 novembre 2025 - 19:40
oui, désolé je viens de rectifier le post 11, je n'avais pas compris ta remarque.
Mea-Culpa
Message modifié, 15 novembre 2025 - 19:45