2017-06-01 1 views
0

raisonnable J'ai lu un fichier dans une chaîne et de diviser les éléments par saut de ligne ombleindice TCL get de l'élément en cours dans la chaîne avec des frais généraux

if {[file exists $inputFile] == 1} { 
    set fpI [open $inputFile r] 
    set input [read $fpI] 
    set lines [split $input "\n"] 
    close $fpI 
} else { 
    return "File does not exsist" 
} 

Maintenant, je voudrais revenir sur le fichier entier, ligne par ligne et quand je reçois une correspondance pour certaines conditions, je veux stocker la ligne #, qui est, en fait, le numéro de l'élément dans la chaîne $ lignes. Comment puis-je obtenir le numéro de ligne sans utiliser de variable supplémentaire et sans exécuter de recherche à chaque fois (frais généraux élevés)?

Répondre

0

De loin le mécanisme le plus simple est de garder votre propre compteur de lignes. Bien qu'un foreach ait un compteur d'index interne, il n'est pas du tout exposé aux scripts.

set lineNumber 0 
foreach line $lines { 
    incr lineNumber 
    # ... 
} 
0
set fp [open inputfile r] 
while {[gets $fp line]!=-1} { 
    incr line_num 
    if {$line eq "SOMETEXT"} { 
     break 
    } 
} 
close $fp 
puts "line_num : $line_num"