ein Problem wie dieses wird um einen Auftrag oder Größe leichter zu lösen, wenn Sie reguläre Ausdrücke nicht verwenden.
package require fileutil
::fileutil::foreachLine line somefile.txt {
if {[lindex $line end] == 1} {
puts $line
}
}
Diese Lösung sieht in jeder Zeile in der Datei und prüft, ob das letzte Element gleich 1 ist, wenn dem so ist, die Zeile gedruckt wird.
Sie auch sie zählen konnte/sie summieren:
set count 0
set sum 0
::fileutil::foreachLine line somefile.txt {
if {[lindex $line end] == 1} {
puts $line
incr count
incr sum [lindex $line end] ;# yeah, I know, always 1
}
}
puts "Number of lines: $count"
puts "Sum of items: $sum"
Wenn fileutil
ist in Ihrer Tcl-Installation nicht zur Verfügung und Sie können es nicht oder wollen nicht installieren, der Minus- verwenden können Ebene Kern äquivalent:
set f [open somefile.txt]
while {[gets $f line] >= 0} {
if {[lindex $line end] == 1} {
puts $line
}
}
close $f
Wenn Sie unbedingt einen regulären Ausdruck, in diesem Fall verwenden, müssen Sie dies tun könnte:
::fileutil::foreachLine line somefile.txt {
if {[regexp {\m1$} $line]} {
puts $line
}
}
Dieser reguläre Ausdruck findet Zeilen, die mit der Ziffer 1 in einem Wort enden (d. H. davor gibt es keine Ziffern oder Wortzeichen).
Dokumentation: close, fileutil Paket, gets, if, lindex, open, package, puts, Syntax of Tcl regular expressions, regexp, while
Sie Frage ist sehr unklar: Welche Ausgabe möchten Sie sehen? –
Also, wollen Sie 1 + 1 zusammenfassen? –
OK, ich wollte nur die Zeile sehen, die mit 1 (nur 1, nicht einmal 111,101 oder 100) außerhalb der geschweiften Klammern endet. Es gibt Millionen von Zeilen, ich habe hier nur vier gezeigt, innerhalb der Klammer sind Zeichen wie "", [], /, zB {a/b "[c]} 1 auch da. – ShivankG