Salut,
Peut-être - étant donné que tu as un nombre de colonnes connues - serait-il intéressant d'envisager un simili fichier ISAM (le I étant pour "indexed"
)
Dans un fichier à part, tu indiques les offsets de chaque début de ligne, et tu charges ces offset dans un tableau en début de programme.
Quand tu dois accéder à un élément X, tu calcule pos = X / nombre_colonnes à l'arrondi inférieur, et tu récupères l'offset en tab_offset[pos].
Cet offset te permet (à l'aide de fseek) de sauter directement au début de ligne qui t'intéresse, et tu n'a plus au maximum qu'à lire la totalité des colonnes de cette ligne
Nous ne sommes pas encore en O(log(n)), cela te permet de garder un temps "presque constant"
(constant pour aller chercher la ligne, en O(N) pour aller chercher la colonne)
Pour obtenir l'index, l'idéal serait de modifier l'application qui crée ton fichier CSV de manière à ce qu'elle crée l'index, mais, sinon:
- tu peux créer une petite application qui s'en charge (ca doit pas faire beaucoup plus de 5 lignes )
- Tu peux lire une fois le fichier au lancement de ton application, et créer l'index "à la volée" (ici aussi, cela ne fait pas beaucoup plus de 5 lignes )
Cependant, ces deux dernières solutions seront plus lentes que la solution idéale
[EDIT]Il est aussi possible de prévoir un index d'offset toutes les X données (ou X peut varier à ton gré de 1 - qui n'est pas vraiment intéressant au vu de la taille du tableau qu'il implique - à autant que tu veux
)
Partager