Comme d'autres notes, si vous n'avez pas les lignes de largeur fixe, il est impossible de faire sans construire l'index. Cependant, si vous contrôlez le format du fichier, vous pouvez obtenir une performance ~ O (log (size)) au lieu de O (size) pour trouver la ligne de départ, si vous parvenez à stocker le numéro de la ligne elle-même chaque ligne, soit d'avoir le contenu du fichier ressembler à quelque chose comme ceci:
1: val1, val2, val3
2: val4
3: val5, val6
4: val7, val8, val9, val10
avec ce format du fichier, vous pouvez trouver rapidement la ligne nécessaire à la recherche binaire: commencer par la recherche dans le milieu du fichier. Lire jusqu'à la nouvelle ligne suivante. Lisez ensuite la ligne et analysez le nombre. Si le nombre est plus grand que la cible, alors vous devez répéter l'algorithme sur la première moitié du fichier, s'il est plus petit que le numéro de ligne cible, alors vous devez le répéter dans la seconde moitié du fichier. Vous devrez faire attention aux boîtiers d'angle (par exemple: votre "début" de la gamme et la "fin" de la gamme sont sur la même ligne, etc.), mais pour moi cette approche a fonctionné très bien le passé pour l'analyse des fichiers journaux qui contenaient la date (et j'avais besoin de trouver les lignes qui sont entre les horodateurs).
Bien sûr, cela ne bat pas encore les performances de l'index construit explicitement ou les enregistrements de taille fixe.
Je l'ai vu faire dans Fortran, nous avons dû lire un fichier à partir d'un compteur de données (2 millions de lignes). Donc je suis confiant que c'est faisable – dassouki