У меня есть очень большой файл, содержащий данные, как показано ниже:
*1 RES L1 N1 0.32
*22 RES L2 N2 0.64
*100 CAP A1 B1 0.3
*200 CAP A2 B1 0.11
*11 IND K1 K2 0.002
*44 IND X1 Y1 0.00134
... and so on
Для таких файлов (предположим, что приведенные выше данные находятся в файле с именем «example.txt»), я могу легко создать хэш хэшей в Perl и передать эти вложенные хэши в другие части моей программы Perl:
#!/usr/bin/perl
use strict;
use warnings;
open(FILE,"<", "example.txt") or die "Cannot open file:$!";
if (-f "example.txt") {
while(<FILE>) {
chomp;
if(/^\s*(\S+)\s+(RES|CAP|IND)\s+(\S+)\s+(\S+)\s+(\S+)\s*$/) {
$hoh{$1}{$2}{$3}{$4} = $5;
}
}
close FILE;
}
Каков аналогичный способ создания Tcl Hash of Hashes (или, скорее, Dictionary of Dictionaries)?
Я попробовал небольшой фрагмент кода, устанавливающий словарь, как показано ниже (не печатая здесь полный код, чтобы сосредоточиться на проблеме):
...
set dod [dict create]
if [regexp {^\s*(\S+)\s+(RES|CAP|IND)\s+(\S+)\s+(\S+)\s+(\S+)\s*$} $line all id type x y elemValue] {
dict set dod $id $type $x $y $elemValue
}
Но это, похоже, не работает. Я проверил это, как показано ниже:
foreach id [dict keys $dod] {
if [dict exists $dod "RES"] {
puts "RES KEY EXISTS"
} else {
puts "RES KEY NOT FOUND"
}
}
Спасибо.