Recherche par ordre alphabétique dans un fichier
Fermé
hymenoptera
Messages postés
36
Date d'inscription
mercredi 24 août 2016
Statut
Membre
Dernière intervention
18 décembre 2018
-
Modifié le 21 sept. 2018 à 12:59
[Dal] Messages postés 6057 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 17 mars 2023 - 22 sept. 2018 à 06:53
[Dal] Messages postés 6057 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 17 mars 2023 - 22 sept. 2018 à 06:53
A voir également:
- Recherche par ordre alphabétique dans un fichier
- Le fichier contient une liste de prénoms. triez ce tableau par ordre alphabétique des prénoms. quel mot est formé par les 6 premières lettres de la colonne code ? - Forum Bureautique
- Recherche par image - Guide
- Fichier rar - Guide
- Recherche musique - Guide
- Le fichier contient une liste de prénoms. triez ce tableau par ordre alphabétique des prénoms - Forum Excel
2 réponses
yg_be
Messages postés
21303
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 mars 2023
1 326
21 sept. 2018 à 13:40
21 sept. 2018 à 13:40
bonjour, moi, pour réaliser cela, je lirais une fois tout le fichier, je créerais en mémoire une structure d’accès, qui indexe le fichier, puis, pour chaque chaîne de caractères, j'utiliserais la technique expliquée ici pour lire la partie utile du ficher.
[Dal]
Messages postés
6057
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
17 mars 2023
1 043
Modifié le 22 sept. 2018 à 06:57
Modifié le 22 sept. 2018 à 06:57
Salut hymenoptera,
J'ai 3 questions :
Les lignes sont-elles longues ?
Il y a combien de lignes dans ton fichier ?
Quelle est sa taille sur le disque ?
Si les lignes sont relativement courtes, que le nombre de lignes correspond à un entier pouvant être représenté par les types standard du C et que sa taille sur le disque est raisonnable par rapport à ta mémoire vive disponible pour que tu puisses le charger en totalité et gérer un index, et vu que les lignes de ton fichier sont déjà triées alphabétiquement, tu devrais juste :
- déclarer un tableau de pointeurs sur char pouvant contenir un nombre de pointeurs sur char égal au nombre de lignes du fichier
- avec fread charger la totalité du fichier dans un tampon mémoire
- sur ce tampon utiliser strtok avec '\n' comme caractère séparateur pour délimiter les chaînes en insérant au fur et à mesure au tableau de pointeurs, les pointeurs vers les chaînes délimitées
pour programmer cela, tu peux t'inspirer de ce code que j'ai posté il y a quelques temps : https://forums.commentcamarche.net/forum/affich-35265601-novice-dans-la-programmation#17 (exemple sur un fichier de 575133 mots d'un dictionnaire libre de mots en grec comportant un mot par ligne)
à ce stade tu as ton index vers les chaînes chargées en mémoire sous la forme d'un tableau ordonné de pointeurs sur char, que tu peux utiliser en implémentant un algorithme de recherche dichotomique pour rechercher l'existence d'une chaîne.
https://fr.wikipedia.org/wiki/Recherche_dichotomique
Tu pourrais aussi utiliser un hash ou d'autres algorithmes de recherche, mais si ton fichier présente les caractéristiques décrites ci-dessus, c'est probablement des complications pour pas grand chose :-)
Dal
J'ai 3 questions :
Les lignes sont-elles longues ?
Il y a combien de lignes dans ton fichier ?
Quelle est sa taille sur le disque ?
Si les lignes sont relativement courtes, que le nombre de lignes correspond à un entier pouvant être représenté par les types standard du C et que sa taille sur le disque est raisonnable par rapport à ta mémoire vive disponible pour que tu puisses le charger en totalité et gérer un index, et vu que les lignes de ton fichier sont déjà triées alphabétiquement, tu devrais juste :
- déclarer un tableau de pointeurs sur char pouvant contenir un nombre de pointeurs sur char égal au nombre de lignes du fichier
- avec fread charger la totalité du fichier dans un tampon mémoire
- sur ce tampon utiliser strtok avec '\n' comme caractère séparateur pour délimiter les chaînes en insérant au fur et à mesure au tableau de pointeurs, les pointeurs vers les chaînes délimitées
pour programmer cela, tu peux t'inspirer de ce code que j'ai posté il y a quelques temps : https://forums.commentcamarche.net/forum/affich-35265601-novice-dans-la-programmation#17 (exemple sur un fichier de 575133 mots d'un dictionnaire libre de mots en grec comportant un mot par ligne)
à ce stade tu as ton index vers les chaînes chargées en mémoire sous la forme d'un tableau ordonné de pointeurs sur char, que tu peux utiliser en implémentant un algorithme de recherche dichotomique pour rechercher l'existence d'une chaîne.
https://fr.wikipedia.org/wiki/Recherche_dichotomique
Tu pourrais aussi utiliser un hash ou d'autres algorithmes de recherche, mais si ton fichier présente les caractéristiques décrites ci-dessus, c'est probablement des complications pour pas grand chose :-)
Dal