作者: 水羽信男
日時: 2004/2/28(12:04)
ご無沙汰しています。水羽です。

以下のようなプロシージャを作ってみました。
添削していただければ、幸甚です。

1)目的:特定のフィールドを指定して、並べ替えを行い、頻度を表
    示する
 ※sortfだと -uNのようなものです。

2)データの形式は、空白区切り
   王贛愚 おうかんぐ 1906 − 清華大学
   伍啓元 ごけいげん 1912 − 滬江大学
   任鴻雋 にんこうしゅん 1886 1961 清華大学
 ※【,】や【/】などを考えていましたが、当面、【 】で統一し
  てゆくことにしました。

3)プロシージャの出力は、たとえば次のような形
   1906 5
   1912 10
 ※カラム=2(これは生年)を指定し、その分布を調べる

4)プロシージャ

proc unique1 {filename column encode} {
    set fd [open $filename]
    fconfigure $fd -encoding $encode
     set data [read $fd 1]
     if [string equal $data \ufeff] {
         set data [read $fd]
     } else {
         append data [read $fd]
     }
     close $fd
     set data2 [lsearch -all -regexp -inline \
[split $data \n] .+]
     set num [llength $data2] 
     for {set x 0} {$x<=$num} {incr x} {
     lappend data3 [lindex $data2 $x $column]
     }
     set data4 {}
     foreach i $data3 {
         lappend data4 "$i [regexp -all $i $data3]"
    }
     set data5 [join [lsort -unique $data4] \n]
     puts $data5
}

5)並べ替えの原則(辞書順etc.)については、今後、必要に応じ
 て加えてゆくつもりです。
6)上記のプロシージャでは、何か分かりませんが、僕にとって不要
 なデータも数えて教えくれますが、それはいまのところ差し障り
 がないのでそのまま出力しています。

みずは

追伸:
山本さんのstring repeat [format %c 10084] 1000には、心打た
れました(笑)