Для строк с включенными цифрами вы, вероятно, могли бы прочитать их так:
scan $string "%f %f" time hg
Если это возвращает 2 (для двух обработанных полей), вы успешно прочитали два числа (с плавающей запятой) из этой строки , В противном случае линия это нечто другое. Это приводит к такому коду (с некоторыми стандартными построчными идиомами, которые, должно быть, уже были написаны в каком-то другом вопросе):
# Skipping all the code for opening files
# While we successfully read a line from the input file
while {[gets $PROCESSING_FILE line] >= 0} {
# Attempt to parse two floats (with at least one whitespace between) out of line
if {[scan $line "%f %f" time hg] == 2} {
# Action to take on a matched line
puts "input line: '$line' time:$time HG:$hg"
} else {
# Action to take on an unmatched line
puts $fileId $line
}
}
# Skipping the code for closing files
Для файлов с полями действительно фиксированной ширины вы используете string range
, чтобы выделить фрагменты строки, а затем попытаться разобрать их (или вы пишете грязное регулярное выражение и используете regexp
). Те, как правило, нуждаются в большей настройке на данные.