You are here

다시 아래와 관련된 질문 올립니다. 어레이에 관련해 질문 드립니다. 또 수정했습니다.

아래에도 감사하다는 말씀을 드렸는데
다시 한번 감사드립니다.
많은 도움이 됬습니다.

set file1 [open "C:/usr/home/dongyo/data.txt" r]

set str [gets $file1]

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

foreach line [split [read $file1] "\n"] {
set MatchREQ [string match *$testREQ* $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} {
set time [lindex $line 5]
set readIn "$DvIN"
set writeOut "$DvOUT"
lappend ary($readIn) $time
lappend ary($writeOut) $time
incr i
set keeplooking 1
continue
}
if {$keeplooking == 0} {
continue
}
set keeplooking 1
}
close $file1

foreach readIn [array names ary] writeOut [array names ary] {
set values $ary($readIn)
set maxr [lindex [lsort -real $values] end]
set values $ary($writeOut)
set maxw [lindex [lsort -real $values] end]
puts "Drive $readIn read = $maxr"
puts "Drive $writeOut write = $maxw"
}

만약 하나의 어래이가 아니라, 여러개의 어래이에서 찾으려면 어떻게 할까요?
예를 들어,
데이터를 보시면 알겠지만, 이 코드에서는 값이

D:\>tclsh85 a.tcl
Drive d read = 2894.704543
Drive d write = 2894.704543
Drive b read = 522.152530
Drive b write = 522.152530
Drive c read = 2894.704543
Drive c write = 2894.704543

하지만 이건 잘못된 값이라서,

예를 들어 원래 이 밑에 제가 드린 질문의 답변으로 주신 코드로 값을 산출하면, (제가 조금 수정 하고)

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