Самый простой способ - прочитать все данные в, split
в строках, а затем использовать regexp
с каждой строкой для извлечения фрагментов.
set f [open "theFile.txt"]
set lines [split [read $f] "\n"]
close $f
set keys [set values {}]
foreach line $lines {
if {[regexp {^([^=]*)=(.*)$} $line -> key value]} {
lappend keys $key
lappend values $value
} else {
# No '=' in the line!!!
}
}
# keys in $keys, values in $values
puts "keys = \[[join $keys ,]\]"
puts "values = \[[join $values ,]\]"
Run, что (при условии, что имя файла правильно), и вы получите выход как:
keys = [a,b,c,d]
values = [1,2,3,4]
Сбор двух списков, как это не может быть самое лучшее, что делать с такими вещи. Часто, это лучше вместо того, чтобы хранить в массиве:
# Guarded by that [regexp] inside the foreach
set myArray($key) $value
Как это, вы можете сделать Lookups от имени, вместо того, чтобы вручную искать. Предполагая, что ключи уникальны, порядок не имеет значения.
* a = 1, b = 2, c = 3, d = 4 * - одна строка? – jkshah
да, но между ними нет запятой, и все они находятся в новой строке, например, a = 1 в новой строке b = 2 и т. Д. – user2901871