-
Lecture fichier TXT
Bonjour,
Je NE souhaite lire QUE les 10 premiers caracteres de chaque ligne (+/-8000) d'un fichier texte afin de vérifier si je rencontre une séquence précise laquelle déclenche des traitements.
Ce fichier possede un grand nombre de caracteres exotiques au point que la fonction readln until eof(filename) s'arrete avant la fin effective du fichier.
L'exemple delphi de FileRead/FileSeek ne me renvoit rien et je n'arrive pas a renvoyer a la ligne la fonction Blockread apres la lecture de 10 caractères.
Que me conseillez-vous ?
Merci
Oncle Pete
-
Tu as essayé avec TFileStream ?
-
J'ai le meme souci qu'avec FileRead/FileSeek, a savoir, je lis les donnees par groupe de 10 sans pouvoir aller a la ligne apres mon 1er groupe de 10.
Oncle pete
-
Regarde ce thread (fonction BuildLinesIndexes ou ReadLineRaw), avec un filestream, j'implémente une lecture ligne par ligne, après à toi de greffer ce qu'il te faut, mais une string delphi gère parfaitement les caractères entre 0 et 31 ... si c'est cela qui t'inquiète ...
En fait, je pense que tu peux utiliser mon objet TTextFileReader directement, il devrait t'envoyer les lignes peu importe ce qu'elles contiennent (#14, #26, #27 qui provoque des ruptures avec un TextFile ReadLn par exemple) ...
-
Merci ShaiLeTroll
Je suis stupefait, mais ..... ca marche !!!
Le temps de comprendre le minimum necessaire, et d'inclure tes fonctions.
Je t'avoue que la necessite de creer un fichier d'index me laisse un peu perplexe sur son utilite.
En tout cas, bravo et encore merci a toi
Oncle Pete
-
La création du fichier d'index n'est valable que dans l'utilisation avec un seek ...
si tu utilise ReadStrings, cela fonctionne comme un ReadLn normalement, tu ne peux que avancer dans le fichier ... cela devrait être ton mode de fonctionnement, Indexed à False, et ne pas appeler BuildLinesIndexes ...
si tu utilise ReadLines, tu peux utiliser sans index, mais il va relire tout le fichier à chaque fois, pour trouver la chaine à l'indice n ... donc il vaut mieux activer Indexed, il génère l'index, et comme le fichier d'index est en enregistrement fixe, le seek est facile à faire, ensuite rien de plus facile de prendre la ligne associé ...
et l'avantage c'est tu peux lire dans le fichier grace à l'index n'importe où, n'importe quand, tu peux aller en avant, en arrière ... libre comme l'air, ce qu'un fichier genre TextFile + ReadLn n'autorise pas ...
Autre point, si l'on ne gère pas de caractères entre #0 et #31, on peut utiliser une TStringList ...
J'ai créé cette classe TTextFileReader pour un membre du forum, qui a des fichiers textes de 4Go, et j'attends une réponse crucial de sa part pour l'aider dans son problème, la fréquence de mise à jour des fichiers, si c'est 1 fois par jour, la création de l'index prenant 10 minutes, c'est tout à fait raisonnable surtout que l'accès au fichier par la suite est instantané durant toute la journée (maj + index en nocturne ni vu ni connu) ... si c'est plus souvent, je lui renouvellerais dans mettre cela dans une table (Oracle, MySQL, ...) sera la mieux pour gérer un grand volume d'enreg indexé ...