сравнить два списка неравных записей и получить строки, содержащие совпадающие элементы tcl - PullRequest
0 голосов
/ 02 августа 2020

У меня есть два файла в формате (это столбцы):

color number day
blue   8      Monday
yellow 5      Saturday
green  0      Thursday
orange 6      Tuesday

color number day
yellow 0      Saturday
orange 6      Tuesday

Ожидаемый результат:

color number day
yellow 0      Saturday   different
orange 6      Tuesday    same

фрагмент кода:

set color [lindex $file 0]
set number [lindex $file 1]
set day [lindex $file 2] #same assignments for file2 entries
foreach line $file line1 $file2 {
append name "$color $number $day $number_file2 $day_file2 \n"
}
set final [exec column -t << name]
puts $logfile $final

если в какой-либо строке обнаруживается такой же цвет, вся строка должна быть напечатана в новый файл в столбцах. и я должен иметь возможность сравнивать столбцы с числом. Пожалуйста, предложите

1 Ответ

0 голосов
/ 02 августа 2020

Следующее дает результат:

set f1 [open file1.txt r]
set f2 [open file2.txt r]

set data1 [read $f1]
set data2 [read $f2]

# Insert the file contents in an array file1
foreach line [split $data1 \n] {
    if {[lindex $line 0] eq "color"} {continue}
    lassign [lsearch -all -inline -not [split $line] ""] color number day
    set file1($color) [list $number $day]
}

# Insert the second file contents in an array file2
foreach line [split $data2 \n] {
    if {[lindex $line 0] eq "color"} {continue}
    lassign [lsearch -all -inline -not [split $line] ""] color number day
    set file2($color) [list $number $day]
}

set out [open output.txt w]
puts $out "color number day"

foreach {color num_day} [array get file2] {
    # If the color from file2 exists in file1...
    if {[info exists file1($color)]} {
        # Compare their numbers...
        set comparison [expr {
            [lindex $file1($color) 0] == [lindex $file2($color) 0] ? "same" : "different"
        }]
        # then print in the output file
        puts $out "$color $file2($color) $comparison"
    }
}

close $out

Вывод (интервал и порядок строк не сохраняются, однако, поскольку строки с одинаковым цветом могут находиться в любом месте файла, я не не думаю, что это должно быть проблемой):

color number day
orange 6 Tuesday same
yellow 0 Saturday different
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...