Извлечь данные в другой файл, используя скрипт - PullRequest
0 голосов
/ 02 июля 2018

Я пытаюсь извлечь каждую проверку в каждый новый файл.

Содержимое файла извлечения данных (report.txt)

 Information: Checking 'data_check_multiple_clock'.
 Information: Checking 'data_check_no_clock'.  
 Information: Checking 'no_driving_cell'.
 Warning: There are 5 ports with parasitics but with no driving cell.

 Ports
 ------------------------------------------------------------
 atb0_uib
 atb1_uib
 a[0]
 b[1]
 b[2]

 Information: Checking 'cell'.

Пример вывода, который я хочу:

В содержании data_check_multiple_clock.txt, файл пуст, так как ошибок не написано.

То же самое относится к data_check_no_clock.txt и cell.txt

Однако содержимое no_driving_cell.txt выглядит следующим образом:

atb0_uib
atb1_uib
a[0]
b[1]
b[2]

есть идеи, как это сделать? Ниже приведена кодировка с ошибкой при пустой ошибке, когда все файлы получают одинаковую ошибку, найденную в no_driving_cell.

        set var "Information: Checking '[lindex $argv $i]'"
        set fi [open "$line" r]
        set fo [open "check_[lindex $argv $i].csv" a]

        # Extract data to output file
        while {[gets $fi line1] !=-1} {
            if {[regexp "$var" $line1]} {
                puts "check_timing_info: Found $line1"
                puts $fo $line1
                puts $fo $line
                set flag 1
            }
            if {$flag eq 1} {
                if {[regexp "$var1" $line1]} {
                    set flag 2
                } elseif {[regexp "^Error" $line1]} {
                    set flag 2
                }   
            } 
            if {$flag eq 2} {
                if {[regexp "Information: Checking" $line1]} {
                    set flag 0
                } elseif {[regexp "$var1" $line1]} {

                } else {    
                #   puts $line1
                    puts $fo $line1
                }
            }

        }
        close $fo
    }
    } else {

    } 
     }
}

1 Ответ

0 голосов
/ 02 июля 2018

Я не могу честно сказать, что у меня есть какая-то хорошая подсказка, что вы пытаетесь сделать здесь, но может что-то вроде этой работы?

set fi [open report.txt]

while {[gets $fi line] >= 0} {
    switch -glob $line {
        Information:* {
            set filename [lindex [regexp -inline {'(.*)'\.$} $line] 1]
        }
        --* {
            puts $filename
            while {[gets $fi line] >= 0} {
                if {[string is space $line]} {
                    break
                }
                puts $line
            }
        }
    }
}

Он производит вывод (я выводлю на stdout, поскольку это облегчает эксперименты):

no_driving_cell
atb0_uib
atb1_uib
a[0]
b[1]
b[2]
...