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 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 - 22 sept. 2018 à 06:53
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 - 22 sept. 2018 à 06:53
A voir également:
- Recherche par ordre alphabétique dans un fichier
- Classer par ordre alphabétique excel plusieurs colonnes - Guide
- Fichier rar - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Ouvrir un fichier .bin - Guide
2 réponses
yg_be
Messages postés
23401
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 décembre 2024
Ambassadeur
1 557
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
6198
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 décembre 2024
1 096
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