用于搜索字符串并存储在变量中的Tcl脚本

用于搜索字符串并存储在变量中的Tcl脚本,tcl,Tcl,我不熟悉tcl脚本。我有一个以上格式的txt文件。使用tcl脚本,我必须将字符串(节、名称、标记和缺勤天数)存储在不同的变量中,以存储在csv文件中。 我尝试在下面的代码中搜索关键字 Loop = ( { Value = ( { { Key : { A = "B"; C = "D"; Cla

我不熟悉tcl脚本。我有一个以上格式的txt文件。使用tcl脚本,我必须将字符串(节、名称、标记和缺勤天数)存储在不同的变量中,以存储在csv文件中。 我尝试在下面的代码中搜索关键字

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