用于搜索字符串并存储在变量中的Tcl脚本
我不熟悉tcl脚本。我有一个以上格式的txt文件。使用tcl脚本,我必须将字符串(节、名称、标记和缺勤天数)存储在不同的变量中,以存储在csv文件中。 我尝试在下面的代码中搜索关键字用于搜索字符串并存储在变量中的Tcl脚本,tcl,Tcl,我不熟悉tcl脚本。我有一个以上格式的txt文件。使用tcl脚本,我必须将字符串(节、名称、标记和缺勤天数)存储在不同的变量中,以存储在csv文件中。 我尝试在下面的代码中搜索关键字 Loop = ( { Value = ( { { Key : { A = "B"; C = "D"; Cla
Loop = (
{
Value = (
{
{
Key :
{
A = "B";
C = "D";
Class = (
{
section = "section_a";
Pairs = (
{
Name = "Ram";
Mark = "80";
},
{
Name = "Latha";
Mark = "70";
},
{
Name = "Mohan";
Mark = "90";
},
{
Name = "David";
Mark = "76";
} );
} );
Id = 1;
};
Absent :
{
DAYS = "Two days";
};
},
{
Key :
{
A = "B";
C = "D";
Class = (
{
section = "section_b";
Pairs = (
{
Name = "Ram";
Mark = "30";
},
{
Name = "Latha";
Mark = "45";
},
{
Name = "Mohan";
Mark = "100";
},
{
Name = "David";
Mark = "76";
} );
} );
Id = 2;
};
Absent :
{
DAYS = "Four days";
};
},
} );
} );
它正在努力找到关键字,并在匹配时打印。它适用于具有单词键的行。但是,我想在这里找到单词Loop
,然后在side Loop中搜索单词Key
。如果它看到单词键
,则必须将循环中的一些字符串复制到变量。单词键
将在文件中重复多次。在单词键
之后将出现{..}
所有文件都有一些内容。脚本必须读取内容并将其存储在某个变量中
Exp:脚本需要在文本文件中找到单词键
,然后查找
节如果存在,则节b
需要存储在变量temp1
(exp.temp1
=节a
),如wise:
如果它看到Ram
,则行下方的Mark
需要存储在temp2
(exp.temp2
=80
)。
如果它看到Latha
,则行下方的Mark
需要存储在temp3
(exp.temp3
=70
)。
然后查找id并需要存储值1需要存储在temp4
(exp.temp4
=1
)。
然后Days
需要存储在temp5
(exp.temp5
=两天
)
每次在csv文件中看到以下格式的文本文件中的关键字时,都需要将这些临时值写入csv文件
set search "Key"
set file [open "Marks.txt" r]
while {[gets $file data] != -1} {
if {[string match *[string toupper $search]* [string toupper $data]] } {
puts "Found '$search' in the line '$data'"
} else {
puts "does not match"
}
}
你能帮我写tcl脚本来实现这一点吗。谢谢。这是awk真正擅长的事情:
awk'
引用的函数(字符串,a){
拆分(字符串,a,/“/)
返回a[2]
}
开始{OFS=“\t”;print“section”、“Ram”、“Latha”、“id”、“Days”}
$1==“节”{section=quoted($0);删除标记}
$1==“Name”{Name=quoted($0)}
$1==“Mark”{marks[name]=引号($0)}
$1==“Id”{Id=gensub(/;/,”,1,$3)}
$1==“天”{打印部分,标记[“Ram”],标记[“Latha”],id,引号($0)}
"档案"
将其翻译为Tcl“一行”,我会这样写
echo'
proc trim{str}{string trim$str{}
放入“区段\tRam\tLatha\tid\tdays”
设置fh[打开[lindex$argv end]]
而{[获取$fh行]!=-1}{
如果{[regexp-->(\S+=(“[^”]+“|\d+;}$line->key value]}{
开关-精确--$key{
节{set节[trim$value];数组集标记{}
名称{set Name[trim$value]}
标记{set marks($name)[trim$value]}
Id{set Id$value}
天{puts[join[list$section$marks(Ram)$marks(Latha)$id[trim$value]]]\t]}
}
}
}
“| tclsh-文件
这是一种中等复杂的格式,您尝试在那里解析它……这是更多的初始工作,但是如果您对这种文件格式做了大量工作,那么使用tcllib中的解析器生成器制作一个包来读取该格式可能是值得的。
section Ram Latha id Days
Section_a 80 70 1 Two days
Section_b 30 45 2 Four days