당신이 랜덤 액세스를, 외부 도구에 의해 처리를 필요로하지 않는 당신은 단지 수 (즉, 구성 파일이 큰 아니며, 각각 완전히 한 번에 slurped 될 수있다)이 필요하지 않은 경우 예를 들어, Tcl리스트가 들어있는 플랫 텍스트 파일을 사용하십시오. "트릭"은 Tcl에서 각 값은 유효한 문자열 표현 (요청시)을 가져야하며 문자열 표현으로 재구성 될 수 있다는 것입니다. 당신은 그것을 무료로 얻을 수 있습니다. 즉, 특별한 패키지가 필요하지 않습니다. 그리고 당신이 제공해야만하는 것은 직렬화 된 값을 그들의 이름에 묶는 일종의 구조입니다.
는 설명하기 위해 :
set a "a string"
set b 536
set c {this is a list {with sublist}}
proc cf_write {fname args} {
set fd [open $fname w]
chan config $fd -encoding utf-8
set data [list]
foreach varName $args {
upvar 1 $varName var
lappend data [list $varName $var]
}
puts $fd $data
close $fd
}
proc cf_read fname {
set fd [open $fname]
chan config $fd -encoding utf-8
set data [read $fd]
close $fd
set data
}
set cfile [file join [file dir [info script]] conf.txt]
cf_write $cfile a b c
foreach entry [cf_read $cfile] {
lassign $entry name value
puts "$name: $value"
}
당신은이 출력을 얻을 것이다 : 이제 당신이 더 많은 공상 또는 "상호 운용"뭔가있는 같이 느끼는 경우에
a: a string
b: 536
c: this is a list {with sublist}
를, '당신에게 (YAML 또는 JSON보고 이 경우 serializer를 작성해야합니다.) 또는 INI 형식 - 모두 Tcllib에서 사용할 수 있으므로 일반 Tcl입니다.
TDOM (expat 기반 C 확장자)을 통해 XML을 사용할 수도 있습니다. 이미 제안 된 SQLite은 그보다 훨씬 더 능력이 있습니다 (데이터에 대한 임의 액세스를 제공하고 거대한 데이터 배열에서 작동 할 수 있습니다). 그러나 귀하의 업무에있어 이러한 도구는 너무 무거운 것처럼 보입니다.
이 예제에서는 cf_write
프로 시저가 자체적으로 저장되는 Tcl 목록을 작성하도록 임의의 임시 변수 목록을 저장/복원하는 방법을 일부러 선택하는 점을 유의하십시오. 물론, 아무도 당신이 임의의 복잡성의 계층 적 구조의 생성을 위해 제공하는 것을 막을 수 없습니다. 한 가지주의 할 점은이 경우 복원 된 목록의 해체 문제에 직면 할지도 모를 수도 있다는 것입니다. 그러나 제 예제 에서처럼 각 요소가 이름/값 쌍이라는 일반적인 규칙을 고수한다면 해체는 어렵지 않습니다.
계층 적 형식의 또 다른 옵션은 [treeql] (http : // tcllib.)과 결합 된 tcllib [struct :: tree] (http://tcllib.sourceforge.net/doc/struct_tree.html) 패키지입니다. sourceforge.net/doc/treeql.html) 패키지에 있습니다. – schlenk
@schlenk, 오, 흥미 롭습니다, 포인터 주셔서 감사합니다. – kostix
JSON 시리얼 라이저를 작성했지만, 정말 까다로운 8.6 요구 사항을 수행합니다. –