Une technique que j'utilise lors du codage est de mettre les données dans mes scripts comme un littéral:
set values {
24.215729
24.815729
25.055134
27.123499
27.159186
28.843474
28.877798
28.877798
}
maintenant, je peux les intégrer dans une commande un à la fois avec foreach
, ou les envoyer comme un seul argument:
# One argument
TheCommand $values
# Iterating
foreach v $values {
TheCommand $v
}
Une fois que vous avez votre code fonctionnant avec un littéral, le changer pour extraire les données d'un fichier est assez simple. Vous remplacez simplement le littéral avec le code pour lire un fichier:
set f [open "the/data.txt"]
set values [read $f]
close $f
Vous pouvez également extraire les données de stdin:
set values [read stdin]
S'il y a beaucoup de valeurs (plus que, disons, 10-20MB) alors vous feriez mieux de traiter les données une ligne à la fois. Voici comment faire à la lecture de stdin ...
while {[gets stdin v] >= 0} {
TheCommand $v
}
juste pour être clair, 'gets' lit une ligne et supprime le saut de ligne de fuite (de sorte que le nom de la variable' data' est un peu trompeur), et 'read' lit un tas de caractères (y compris les nouvelles lignes). –
@ glenn, à droite, à des fins de la démo, je n'ai pas mentionné ces points. Notez aussi que le '[read stdin $ fsize]' lira au plus $ fsize caractères de stdin (ie lit moins si EOF se produit avant que beaucoup) et $ fsize pourrait bien être indifférent à tout ce qui apparaît sur stdin. –
Si vous voulez tout lire, lisez '$ channel '; Tcl a une bonne gestion de tampon. –