TCL扫描从文本文件中排序

时间:2015-06-26 01:50:12

标签: arrays tcl text-files

我想使用tcl从包含300个asicgetmse循环的txt文件中扫描以下值。

这是我的计划。

1st设置空数组

asicmse{0 0 0 0 0 0 0 0}

然后,设置正文

*mse {set s s_getmse}

最后进行扫描,

这是一个例子 扫描程序。

s_readhs
{
   set y [scan $x {%[^:]: %i %i %i %i}]
   switch -nocase [string trim [lindex $y 0]] pga {
       set a(hsbus) [lreplace $a(hsbus) 0 3 {*}[lrange $y 1 4]]
   } mse {
       set a(hsbus) [lreplace $a(hsbus) 4 7 {*}[lrange $y 1 4]]
   } rms {
       set a(hsbus) [lreplace $a(hsbus) 8 11 {*}[lrange $y 1 4]]
   } lo {
       set a(hsbus) [lreplace $a(hsbus) 12 12 {*}[lindex $y 1]]
   }
   if [string first { -- '} $x]>-1 {set s s_body}
}

此过程正在扫描此参数的值

Enabling High Speed Bus
PGA:  0x173  0x161  0x15a  0x165 
MSE:  0x024  0x018  0x02a  0x028 
RMS: 0x2107 0x1f97 0x2003 0x1fbc 
LO : 0x01fd6 (167.178MHz) 
PASS -- 'readhsbus'

有人可以帮我修改扫描asicgetmse值的程序吗?

HI MSE 0x017 (1.1%, -19.50dB)
HQ MSE 0x01a (1.3%, -18.96dB)
VI MSE 0x031 (2.4%, -16.21dB)
VQ MSE 0x027 (1.9%, -17.20dB)
PASS -- 'asicgetmse'

.plt文件

中的预期值
HI% HIdB  HQ%  HQdB    VI% VIdB   VQ%  VQdB
1.1 -19.5 1.3  -18.96  2.4 -16.21 1.9  -17.20 



     s_getmse
     {
        set y [scan $x {%[^:]: %i %i %i %i}]
        switch -nocase [string trim [lindex $y 0]] Percentage {
            set a(asicmse) [lreplace $a(asicmse) 0 3 {*}[lrange $y 1 4]]
        } dB {
            set a(asicmse) [lreplace $a(asicmse) 4 7 {*}[lrange $y 1 4]]
        } 

        if [string first { -- '} $x]>-1 {set s s_body}
     }

我不熟悉索引和数组。有人可以帮我吗?

 s_getmse
 {
    set y [scan $x {%*s %*s %*s (%f%*s, %f%*s)}]
    switch -nocase [string trim [lindex $y 0]] himse {
        set a(asicmse) [lreplace $a(asicmse) 3 4 {*}[lrange $y 1 2]]
    } hqmse {
        set a(asicmse) [lreplace $a(asicmse) 8 9 {*}[lrange $y 1 2]]
    } vimse {
        set a(asicmse) [lreplace $a(asicmse) 13 14 {*}[lrange $y 1 2]]
    } vqmse {
        set a(asicmse) [lreplace $a(asicmse) 18 19 {*}[lrange $y 1 2]]
    } 
    if [string first { -- '} $x]>-1 {set s s_body}
 }
}

希望这可能有效。

现在我可以复制该值。

  {HI MSE*} { set a(asicmse) [lreplace $a(asicmse) 0 0 [lindex $x 3]] }
  {HQ MSE*} { set a(asicmse) [lreplace $a(asicmse) 1 1 [lindex $x 3]] }
  {VI MSE*} { set a(asicmse) [lreplace $a(asicmse) 2 2 [lindex $x 3]] }
  {VQ MSE*} { set a(asicmse) [lreplace $a(asicmse) 3 3 [lindex $x 3]] } 

它复制了整个索引3 (1.1%,

2 个答案:

答案 0 :(得分:1)

这对你有用吗?

SongListActivity.java

我相信您错过了SongDetailActivity.java来扫描十六进制数字。 更正:我的意思是NavigationDrawerFragment.java(是:set line "HI MSE 0x01b (1.3%, -18.80dB)" scan $line "%s %s %x (%f%%, %fdB)" hi mse hex_number percent db )。

答案 1 :(得分:0)

OP在编辑中写道:

  

行。完成后终于明白了。

 s_getmse
 {
    set y [lindex $x 3]
    set v [string trim $y "(%,"]
    switch -nocase [lindex $x 0] {
    HI {set a(asicmse) [lreplace $a(asicmse) 0 0 $v]}
    HQ {set a(asicmse) [lreplace $a(asicmse) 1 1 $v]}
    VI {set a(asicmse) [lreplace $a(asicmse) 2 2 $v]}
    VQ {set a(asicmse) [lreplace $a(asicmse) 3 3 $v]}
    default {if [string first " -- " $x]>0 {set s s_body}}}

    set z [lindex $x 4]
    set w [string trim $z "dB)"]
    switch -nocase [lindex $x 0] {
    HI {set a(asicdb) [lreplace $a(asicdb) 0 0 $w]}
    HQ {set a(asicdb) [lreplace $a(asicdb) 1 1 $w]}
    VI {set a(asicdb) [lreplace $a(asicdb) 2 2 $w]}
    VQ {set a(asicdb) [lreplace $a(asicdb) 3 3 $w]}
    default {if [string first " -- " $x]>0 {set s s_body}}}
 }