2014-10-24 2 views
0

저는 tcl에 새로운 사용자입니다.이 프로그래밍 스크립트를 4 일 동안 만 경험하십시오.msgread를 사용하여 특정 행을 읽으십시오.

메시지 파일에 액세스하려고했습니다. 강사는 msgcreate, msgget, msgread ..... 등과 같은 msg 명령만을 소개했습니다. 나는이 코드 만 먼저 읽어 실현 인덱스 5 O 또는 I.

##Field 
set field [string match *|O|* [msgget $mh]] 
set out "|O|" 
if {$field == $out} { 
    echo Patient class field: Outpatient 
} else { 
    echo Patient class fiedl: Inpatient 
} 

경우 detemine하는 3 라인을 읽을 수

 
NK1|1|ELIZABETH POTTER^^^^^^L|MOTHER|RIDLEYTON NURSIN 
NK1|1|MARK DAVIES^^^^^^L|CARER|C/- CARA Pty.Ltd.^""^WOODVIL8|C2||||||||||||||||||||||||||||||| 
PV1||I|EPIC^^^0014^^084^0014^^EMERGENCY PATIENTS IN CARE|""||| 

:

이 파일보기와 같은 방법입니다 줄의 파일, 그래서 그것은 항상 내게 다시 입원 환자를 에코.

+2

을 수행해야 그들이하는 일을 설명하십시오. 'field'는'string match'의 반환 값을 얻으므로 항상 1이나 0을 값으로 가지며''| O | "'와 같지 않습니다. –

답변

1

msgget은 레코드에 해당하는 한 줄을 읽습니다. 어느 것이 좋습니다. 이것은 표준 Tcl 명령 gets 둘레의 추상화입니다. 이 답변의 나머지 부분은 이것이 사실이라고 가정합니다.

일단 레코드가 있으면 필드로 나눠서 값을 확인할 수 있습니다. 이 |는 레코드 분리가 나타납니다 때문에, 당신은 물건을 따로 분리 할 수 ​​있습니다 목록을 생성

set fields [split $record "|"] 

, 당신은 함께 두 번째 요소에서 선택할 수 있습니다 :

set secondField [lindex $field 1]; # <<< zero-base indexes, like in C 

이 결합 :

set fields [split [msgget $mh] "|"] 
set out "0" 
if {[lindex $fields 1] eq $out} { 
    # ... 
} 

마음 당신, 당신은 아마, 많은 분야로는 Tcl 8.5의 새로운 기능 lassign 명령을 (를 처리 할 겁니다, 그러나 희망 당신은에 아닙니다 때문에 구 버전)은 경이로움을 나타냅니다 :

그것은 가장 잘 작동하는 작업입니다.

코드에서 표준이 아닌 명령을 사용 할 때 (당신이 고정 폭 필드를 처리하는 경우 - - 가능성,하지만 어쩌면. 당신은 string range 또는 scan한다)

관련 문제