Partage
  • Partager sur Facebook
  • Partager sur Twitter

Trier un fichier

    25 avril 2019 à 14:29:40

    Bonjour à tous,

    J'aimerais trier un fichier assez conséquent (minimum 1 000 000 de lignes avec deux données sur chacune des lignes).

    Je pensais d'abord mettre mes données dans un tableau, le trier puis réécrire sur mon fichier mais un tableau est limité en valeur et il ne peut accueillir mes 1 000 000 de valeurs.

    Je suis donc bloqué par le fait que je ne vois pas comment trier directement dans le fichier .txt.

    Merci d'avance !

    • Partager sur Facebook
    • Partager sur Twitter
      25 avril 2019 à 14:39:21

      Tu ne peux pas "trier directement dans un fichier". Un programme ça agit sur des données qui sont en mémoire - tes données il faut bien les mettre en mémoire pour agir dessus à un moment.

      Un tableau peut très bien accueillir 1000000 valeurs. Si tes valeurs font chacunes 8 octets (taille d'un double), ça te fait un tableau à 8 MB : je pense que ta RAM a suffisamment de capacité.

      Par contre, il est possible que tu doives l'allouer sur la heap (pointeur puis malloc) au lieu de la pile (tableau statique en tant que variable locale), c'est à dire allouer ton tableau avec malloc.

      Tu peux donc allouer un tableau avec 1000000  cases de type par exemple double (ou un autre type ? ça dépend ce dont tu as besoin), charger tes données, les trier, puis les remettre dans le fichier.

      Si t'as besoin de traiter un fichier plus gros qui ne tiendrait pas dans ta RAM, il faut que tu découpes ça en plusieurs itérations, en utilisant un algo de type merge sort

      https://fr.wikipedia.org/wiki/Tri_fusion

      • Partager sur Facebook
      • Partager sur Twitter
        25 avril 2019 à 16:58:23

        Hello, 


        De quelles types de données dois tu trier ?
        Des caractères ou des chiffres ?
        Si ce sont des caractères ( 1 octet ), il te faut, 1M de lignes plus 2*1M pour chacune des 2 données soit 3M d'octets = 3Mo, ça devrait aller. Si des entiers ou des floats, tu multiplies par 4 ou 8. Dans le pire des cas, il s'agit de 24Mo.
        Tu peux partager le fichier en question ? 

        • Partager sur Facebook
        • Partager sur Twitter

        Trier un fichier

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        • Editeur
        • Markdown