You are here

각 항목별로 array 에 집어 넣고, 그리고 나서 다시 그중에 값을 추출하려 하는데, 잘 안되네요 조언좀,

set file1 [open "data.txt" r]
set str [gets $file1]

set Cpr " Copy Rate"
set testIN " IN source"
set testOUT " IN dest"
set keeplooking 0

foreach line [split [read $file1] "\n"] {

set MatchREQ [string match *$Cpr* $line]
set MatchIN [string match *$testIN* $line]
set MatchOUT [string match *$testOUT* $line]
set i 0

if {$MatchIN} {
set DvIN [string index [lindex $line 5] 0]
continue
}

if {$MatchOUT} {
set DvOUT [string index [lindex $line 5] 0]
continue
}

if { $MatchREQ == 1 } {
if {$DvIN == "a"} {
set time [lindex $line 5]
set Opa "$DvIN"
lappend ara($Opa) $time
set valuea $ara($Opa)
puts "A"
set keeplooking 1
continue
}
if {$DvIN == "b"} {
set time [lindex $line 5]
set Opb "$DvIN and $DvOUT"
lappend arb($Opb) $time
puts "B"
set valueb $arb($Opb)
set keeplooking 1
continue
}
if {$DvIN == "c"} {
set time [lindex $line 5]
set Opc "$DvIN"
lappend arc($Opc) $time
set valuec $arc($Opc)
puts "C"
set keeplooking 1
continue
}

if {$DvIN == "d"} {
set time [lindex $line 5]
set Opd "$DvIN"
lappend ard($Opd) $time
set valued $ard($Opd)
puts "D"
set keeplooking 1
continue
}

if {$DvIN == "e"} {
set time [lindex $line 5]
set Ope "$DvIN"
lappend are($Ope) $time
set valuee $are($Ope)
puts "E"
set keeplooking 1
continue
}
continue
}
set at [array exists $valuea]
}
close $file1
puts "$at"
while {$keeplooking != 0} {
set at [array exists $valuea]
set bt [array exists $valueb]
set ct [array exists $valuec]
set dt [array exists $valued]
set et [array exists $valuee]

if {$at==1} {
set max [lindex [lsort -real $valuea] end]
puts "$opa = max value is $max"
set keeplooking 0
continue
}
if {$bt==1} {
set max [lindex [lsort -real $valueb] end]
puts "$opb = max value is $max"
set keeplooking 0
continue
}
if {$ct==1} {
set max [lindex [lsort -real $valuec] end]
puts "$opc = max value is $max"
set keeplooking 0
continue
}
if {$dt==1} {
set max [lindex [lsort -real $valued] end]
puts "$opd = max value is $max"
set keeplooking 0
continue
}
if {$et==1} {
set max [lindex [lsort -real $valuee] end]
puts "$ope = max value is $max"
set keeplooking 0
continue
}
}

puts "$valueb"
puts "$valued"

만약 하나의 어래이가 아니라, 여러개의 어래이에서 찾으려면 어떻게 할까요?

Drive From b Drive to d = max value is 522.152530
Drive From d Drive to c = max value is 2894.704543

이렇게 산출 됩되면. 여기서

Drive from b Drive to d Copy Rate is 522.152530 -> 이 산출된 값에서는
522.152530 이란 숫자는 b Drive 이게는 Read speed의 값이되며, d Drive에게는 Write speed 가 됩니다.

그리고
Drive from d Drive to c Copy Rate is 2894.704543 -> 이 산출된 값에서는
2894.704543 이란 숫자는 d Drive 에게는 Read speed의 값이되며, C Drive에게는 Write speed 가 됩니다.

산출된 값이 저렇게 됬을때, 모든 값에서
b drive 나 c drive 처럼 하나의 값만 있는것은 버리고,
d drive 처럼, Read 와 Write을 모두 가지고 있는 값만,

d drive Read Speed == 2894.704543 and Write Speed == 522.152530
이렇게 값을 산출하려면,

여러개의 Array를 돌려야 하나요?
조언 부탁드립니다. 코드는 어떻게 수정하면 좋을까요?

스스로 하고 있는데
drive 값을 저장해서 따로 산출 하려고 해도, 모든 값이 큰값으로 되서 결국 두 값모두 자꾸 2894.704543 으로 나와 버리네요
해보니 문제가 drive 값과 저값이 맞지 않아 고생하고 있습니다.

그리고 아래 제가 드린 질문에서 While을 사용하신 것을 잘 봤습니다.
혹시 코드를 바꾸시면, While문도 한번 보여주시면 안될까요?

답을 확인하고 조금 창피한 생각이 들더군요.
이렇게 간단하게 하는데 왜 그렇게 foreach만 사용하려 했을까 하고요.
아무쪼록 답변 부탁드립니다.
첨부한 Data 파일은 같은 파일이지만 한번 더 올립니다.

첨부 파일파일 크기
Plain text icon data.txt222.89 KB