2017-08-03 2 views
0

J'ai ce numéro:
J'ai besoin parfois de traiter des fichiers texte énormes.
Dans certains cas, je sais que les données qui m'intéressent sont dans la queue du fichier. Si j'utilise l'ouverture normale, j'ai besoin de faire défiler les lignes. Y at-il un moyen de "commencer à la fin", et gagner du temps, peut-être lire le fichier à l'envers?Dans TCL, l ouvrir un fichier de la queue

+0

Que voulez-vous dire par "faire défiler"? Voulez-vous littéralement utiliser les touches fléchées de la souris pour faire défiler ou voulez-vous dire lire le fichier ligne par ligne? – slebetman

+0

Vérifiez la commande ['seek'] (https://tcl.tk/man/tcl8.6/TclCmd/seek.htm). –

Répondre

2

Vous pouvez utiliser la commande seek:

set linesz 256 ; # assume an approximate line size 
set fh [open myfile.txt] 
seek $fh [expr {$linesz*-5}] end 
gets $fh line ; # this first line is probably a partial line, ignore it. 
while { [gets $fh line] >= 0 } { 
    # process 
} 
close $fh 

Références: seek

+1

Les seules complications de cette approche sont l'estimation de la longueur de ligne et le nombre de lignes à remonter ('-5'). Obtenir de bonnes valeurs pour eux nécessite de connaître les données. –

+1

Si la longueur de la ligne de données est très variable ou si la connaissance des données est éparse, la taille de ligne et/ou le nombre de lignes à sauvegarder devront être augmentés. –

+0

Je vois qu'il n'y a aucun moyen d'y parvenir d'une manière exacte, c'est-à-dire qu'il faut utiliser des conjectures. Je m'en doutais autant, je voulais juste être sûr – user1134991