KIGO DB Operation Manual
この文書は、IBM関東囲碁部が管理しているDB(DataBase)のOperation Manualです。
DB(Database)とは、関東囲碁部で管理する部員情報データベースのことを指します。 1-2-3のファイル(.123 .WK4 Format)になっています。 部員の氏名、組織、内線、住所、電話番号、E-Mail Address等、多くの情報を含んでいます。おもな利用目的は以下のとおりです。
DBは、各年度ごとに作成され、新しい年度のファイル作成のさいは、昨年分のファイルをコピーして、微修正します。
DBは、Lotus-123のファイルで、中に複数のワークシートがあり、以下のような構成になっています。
| ワークシートの構成 | ||
|---|---|---|
| 1 | データベース | 囲碁部員総合情報 |
| 2 | 名簿 | 囲碁部内配布用名簿 |
| 3 | HTML File | 囲碁部 Webage用Tableデータ |
| 4 | Mail Address | 関東囲碁部配送アドレスリスト |
更新する場合は、第1ワークシートのみを更新します。第2から,第4ワークシートまでは第1ワークシートの情報を相対コピーしており、更新は自動反映されるようになっています。
OriginalのDB(1-2-3のFile)の、概念図は以下のようになっています。 (実際は、Green,OBの区別もなく五十音順でソートされています。)
| DBの中のデータ | |
|---|---|
| Green part 社員情報 | Green Part 部員情報 |
| OB Part 部員情報 | |
IBM社員および関連会社社員でTel/Dirで情報のひける部員を 指します。また、Tel/Dirでひく社員情報(所属組織や在籍事業所、NotesのIDや内線)と、通常の囲碁部員情報(住所、電話番号、E-Mail、その他)に分かれています。
完全にIBMから足を洗った方々でTel/Dirで情報のひけない部員を指します。通常の囲碁部員情報のみが存在しています。
DBは、関東囲碁部部員の氏名の五十音順(あいうえお順)でソートされています。現役、OBの区別はなく、以下のように、ひとつのリストになっています。
| あいものそういちろう | 四十物壮一郎 |
| あおきひろゆき | 青木宏之 |
| あおきみちやす | 青木通泰 |
| . | . |
| . | . |
| わだこうたろう | 和田興太郎 |
データベースのカラムの定義は、以下のようになっています。
| No. | Column | Content |
|---|---|---|
| 1 | No. | 整理番号:あいうえお順の整理番号、これで、囲碁部員数が即座にわかるようになっています。 |
| 2 | Rome字 | 部員氏名のローマ字です。 例) Kishihara Tatsuya |
| 3 | ふりがな | 部員氏名のふりがなです。姓名ともに難しい読みの方がいらっしゃいますので、これで確認できるようになっています。 例) きしはら たつや |
| 4 | 氏名 | 部員氏名です。漢字で記述されます。 例) 岸原 達也 |
| 5 | E_num | 部員の社員番号です。CheckDigitは除きます。OBの人は空欄になってます。また、関連協業会社の方は社員番号とは別の番号がはいっています。 例) 20259 |
| 6 | S_code | 組織コード(Section Code)のこと 例) T0620 |
| 7 | 所属 | 所属組織名称です。例) SWセンターシステム推進 |
| 8 | S_code2 | 2つめの組織コードです。ここには協力会社の会社名がはいることが多いようです。例) CSTS,ISTAFF |
| 9 | 英文組織名 | 英文の組織名称です。例) Systems,Customer SupportCenter |
| 10 | ID | 社員の識別表示で、LはラインをPはP担当を、 Sは、Staffを、Nは、Normal社員を表します。協業関連会社の場合はブランクになっています。 |
| 11 | 職位 | 社員の職員を表します。例)主幹、副部長、 |
| 12 | 内線 | 社内の電話番号です。例)1808-6455 |
| 13 | 外線 | 外線の電話番号です。例)046-215-1234 |
| 14 | FAX | FAXの電話番号です。例)046-215-4321 |
| 15 | 内線2 | 二つ目の社内の電話番号です。例)1808-5564 |
| 16 | 外線2 | 二つ目の外線の電話番号です。例)046-215-6789 |
| 17 | FAX2 | 二つ目のFAXの電話番号です。例)046-215-9876 |
| 18 | 携帯 | 携帯の電話番号です。例)090-1234-5678 |
| 19 | PB | PHSの電話番号です。例)090-1234-0000 |
| 20 | 社内メール | 社内メールアドレスです。例)LAB-T06, HZA-FA0 |
| 21 | 事業所コード | 事業所のコードを表します。例)HZ , LAB, MK |
| 22 | 事業所 | 事業所の名前です。例)築地、六本木、幕張 |
| 23 | 階数 | 事業所の内のロケーション、ビルの何階で、どの位置か、、を示します。例)A5SW,21TN01 |
| 24 | NotesID | Lotus-NotesのIDです。 例)Tatsuya Kishihara/Japan/IBM@IBMJP |
| 25 | ShortID | Lotus-NotesのShortIDです。外部からメールを送信するときは、このShortIDを利用して、xxxxx@jp.ibm.comでメール送信することができます。例)jl20259 |
| 26 | J-Res | 社員の担当業務情報です。例)保守部品 EC/修理部品の管理 |
| 27 | VMID | VMのIDです。例) JL12345 |
| 28 | NODEID | VMのNODEのIDです。例)YMTVM1, FUJVM1 |
| 29 | VM+NODEID | VMのIDとNODEのIDをくみあわせた記述です。例)YMTVM1(JL12345), FUJVM1(SYUUSAKU) |
| 30 | 追加情報 | YellowPage上で、とくに追加情報があったときに記述する情報です。例)秘書の名前等 |
| 31 | 更新日付 | YellowPage上の更新日付です。例) 00-03-23 |
| 32 | E-MailのIDです。NotesのMailしかもたない人は、NotesのShortID@jp.ibm.comになります。 | |
| 33 | 識別 | IJ=IBM社員か、IG=IBM Group つまり、関連社員、OB=OB で識別しています。この情報は手入力で更新しています。 |
| 34 | 〒 | 郵便番号 例)194-0001 |
| 35 | 住所 | 社員の住所です。例)東京都港区赤坂神南123-0001 |
| 36 | 電話番号 | 社員の自宅の電話番号です。例)03-1234-5678 |
| 37 | 社員番号 | 社員の社員番号です。IBMクラブ本部に名簿を提出するときに、名簿とともに、この社員番号を要求されます。例) 202598 |
| 38 | 保険証番号 | 社員の保険証番号です。例) 456-202598 |
| 39 | 本社段位 | 本社同好会での段位です。例) 4.5段 |
| 40 | 大和点数 | 大和同好会でのカードの点数です。例) 210点 |
| 41 | 新宿点数 | 新宿月例会で使用しているのカードの点数です。例) 172点 |
| 42 | 喫煙 | 喫煙するかどうか。合宿等で部屋の配分を考えるときに参考にするデータです。例) する |
| 43 | いびき | いびきの程度をかきます。合宿等で部屋の配分を考えるときに参考にするデータです。例) ほとんどない |
| 44 | 車 | 保有している車を記述します。合宿等で配車等を考えるときに参考にするデータです。例) インテグラ |
| 45 | 囲碁部認定段位 | 囲碁部が認定する段位です。注) 2001年2月現在では、真形杯(旧本社同好会)と一致させることになりました。 例) 6段 |
| 46 | 趣味 | 囲碁部員の趣味を記述します。 例) 将棋 |
| 47 | 携帯(Private) | 囲碁部員の私用の携帯電話の番号です。 例) 090-1234-9999 |
| No.欄の識別 | |
|---|---|
| ___ | Tel/Dirでは、 この色の番号(2番と4番から31番まで)をひいてデータとして定期更新作業の対象となります。 |
| ___ | この色の番号 (1番と3番、32番から47番まで)は囲碁部で独自にまとめている情報です。 |
| Column欄の識別 | |
| ___ | GreenPart のみの社員情報です。OBの場合は、ここは空欄になります。 |
| ___ | GreenPart OB Part共通の部員情報です。Tel/Dirでひいた情報に対して、OB Partに関しても同様のデータを記述しています。 |
DBに対するOperationには、以下のようなものがあります。
新入部員があったとき、囲碁部に新たに加入したいという方があらわれた時、等にエントリーを新たに追加する作業です。行を一つ挿入するということになります。
部をやめたいという方があった場合に、エントリーを削除する作業です。該当行を一つ削除するということになります。
エントリーの内容に変更がはいったときに更新する作業です。例えば、住所の変更、E-MailAddressの変更、会社をやめたために発生する会社関連のデータの削除作業などがこれに該当します。
年に1度発生する作業です。社員は所属や事業所などが移ることは頻繁です。これらの変更作業は、逐次更新で行うのは非常に大変ですから、年に一度、GreenPageのデータ(Blue PageとYellowPageのあわさったもの)から一括して、最新の情報を取得して、DBをリフレッシュします。IBMクラブ本部から、名簿の提出を要求される時期にあわせて、毎年2月頃に実施します。
これらの更新作業のうち、1.から3.まで、すなわち、エントリーの追加、削除、内容の逐次更新はふだん発生する作業で、この修正作業もごく普通の表計算ソフトを扱う方法で更新作業を実施します。1-2-3のファイルを直接、変更することになります。
4.のエントリー内容定期更新作業だけはTel/Dirを利用して、社員情報の検索を行い、一括変換を行います。本Manualの大部分をしめるPeoriodical Changeは、この定期更新作業についてのガイドになっています。これについては、次の章で説明しています。
エントリーの内容を修正したり、更新したりする上で注意点がひとつあります。それは、半角英数字のカンマ「,」をデータ内に含めない、ということです。このDBは、CSV Fileにして操作することが多いのですが、そのさいに、区切り文字として、カンマ「,]を使用していますから、データ内にカンマがあると、うまく処理できないことになります。実際には、BluePge,YellowPageの登録上のデータにカンマをいれている人がいますので、Tel/Dirの入力内容を基準にしている関係で、どうしても、カンマがはいってきます。この場合、このカンマの処理を手修正と既存のわかっている分に関しては、csvPatch(後述)というプログラムで他の記号に変換して、処理するようにしています。
ここでは、定期更新作業に関する作業手順を解説します。
定期更新作業は、単純な作業のくり返しが多いので、1年に1度実行する作業とはいっても、かなりのワークロードが発生します。そこで、スクリプト等を作成して、作業が簡単にできるように工夫されています。
ただし、スクリプトは人間が作成したものなので、そのときは対応できていも、 その後の環境の変化等には対応できないかもしれません。スクリプトを盲信せずに、具体的にどういう処理をするべきか、を考えて作業を実施することが肝要です。
そのため、この作業手順解説書では、やや、くどいとおもわれるくらいスクリプトでの実行している内容やその考え方について説明をいれています。これは、
定期更新作業は、以下のような手順で実施されます。
| No. | Process | Object | method | ||
| 1 | File preparation | Lotus-1-2-3のFile | look | ||
| 2 | CSV export | CSV File (igr1tno.csv) | 1-2-3CSV,1-2-3,Approach | ||
| 3 | Green/OB Part divide | GreenPart | OB Part | igsp5.pl | |
| 4 | Employee part divide | EmployeePart | NormalPart | ↓ | |
| 5 | Key extract | key | ↓ | ↓ | |
| 6 | Tel/dir search | Tel/Dir CSV File | ↓ | ↓ | |
| 7 | CSV Patch | Normal CSV File | ↓ | ↓ | |
| 8 | Green Part Merge | GreenPart CSV File | ↓ | ||
| 9 | OB Part Merge | KIGO CSV File | |||
| 10 | 1-2-3 Export | New Lotus-1-2-3File | |||
データベースファイルを準備、確認する作業です。
最新の1-2-3のファイル(igdb0x.wk4)が存在していればOKです。ファイルはなければ、昨年分からコピーして作ってください。同じ名前でも複数のファイルがある場合は、必ず、最新のものを利用するようにします。(同じ名前のファイルが複数の個所に存在するのは好ましい例ではありませんが、バックアップファイルとして保存しておくのであれば、良い運用だといえるでしょう)
それまでに分かっているエントリーの追加、削除作業、逐次更新作業等があれば、この定期更新作業を実施する前にできるだけ反映させてください。(後が楽です)
処理をしやすいようにするため、Lotus-123のファイルからCSV Fileを生成します
Lotus-123 2000からは、CSV File生成機能をもつようになりました。しかし、昔のLotus-123はCSV File生成機能をもっていないので、Lotus-Approachを経由して、CSV Fileを作成する方法と、さらに、Approachをもっていない方のために力技でCSVFileを作成する方法をガイドしています。自分の環境にあわせて、以下をお読みください。
Lotus-1-2-3 2000以降からCSV Fileを作成する方法
CSV File生成機能を保有していない以前のLotus-1-2-3で力技でCSV Fileを作成する方法
Lotus-Approach経由でCSV Fileを生成する方法
[Lotus-123(2000以降)でcsv Fileを作成する方法]
[CSV File生成機能のないLotus-123でcsv Fileを作成する方法]
ここでは、古いLotus-1-2-3でCSV Fileを生成する方法について記述します。これは、Lotus-Approachが使用できない、あるいは操作が難しいと感じる人のために作成されたものです。2001年現在では、最近使用できるLotus-1-2-3 2000にCSV File生成機能がありますので、このDocumentを読んで操作をするのはよほど特殊な事情の場合に限られます。さらに、この作業は間違いの発生しやすい作業なので、なるべく別の方法を検討して下さい。
囲碁部DBは、Databaseなのですから、もともと、Lotus-Approachのような DB Softで管理する方がよいのです。このApproachにはCSV生成機能があり ますから、非常に楽にCSV File生成をすることが可能です。
CSV Fileの生成方法は、3つのどの方法でも良いですが、最終的に生成されるCSV File (igr1tno.csv)の、第一行は以下のように見出しのカラムから構成される行を想定しています。
"No.","Rome字","ふりがな","氏名","E_Num","S_code","所属","S_code2","英文組織名", "ID","職位","内線","外線","FAX","内線2","外線2","FAX2","携帯","PB","社内メール", "事業所コード","事業所","階数","NotesID","Short ID","J-Res","VMID","NodeID","VM ID+Node","追加情報","更新日付","E-Mail ","識別","〒","住所","電話番号","社員番号 ","保険証番号","本社段位","大和点数","新宿点数","喫煙","いびき","車","囲碁部認定 段位","趣味","携帯(Private)"
csv Fileが生成されたら、次に実施する作業は、igsp5.pl というperlスクリプトを実行し、複数のファイルを生成することです。
$perl igsp5.pl igr1tno.csv
これで、そのDirectoryに複数のファイルが自動生成されます。これで、3.Green/OB Partの分割はもちろん、4.Employee Divde 5. Key Extract も自動で実現できます。
以下では、この作業の実施の意味やスクリプトで実施しているロジックの内容、さらには、自動生成スクリプトを使用しないでファイルをつくる方法などをのべています。
GreenPartとは、、具体的にはTel/Dirで検索対象となる部員のことを指して います。つまり、GreenPageにて検索可能な社員をすべて含み、 転籍、出向や関連会社でIBMに常駐しているような方々ということになります。 この作業の意味は、部員DBからTel/Dirで検索対象となっている 社員のみ抽出して変更作業を実施することにあります。Tel/Dirの検索結果は 現役部員のみのデータとなりますので、このデータを反映させるのに 一番簡単な方法は、受皿としてもGreePart(現役部員)データのみのファイルを用意 しておくことでしょう。 つまり、
現役
OB
現役
現役
OB
OB
といった雰囲気のDBに対して Tel/Dirの検索結果は
現役
現役
現役
といったデータになります。この更新作業を一番楽にするためには 現役のみのデータファイルが必要だということです。これだと元の 順番に戻すには順列番号がついていますので、Mergeしてsortすれば良い だけの話です.簡単に実現できることが想像つくことでしょう。
この作業を実現するには、カラムの中で現役とOBの区分けが可能な列が存在 すれば良いことになります。ひとつはTel/Dirのデータがはいる列がその判定に 利用できるでしょう。 しかし、Tel/Dirのデータにはあったりなかったりする データがあって判定に使えない列が多いようです。例えばGreenPageででてくる 人がいてもLotus-Notes IDをももっている人ともっていない人がありますので, 判定にはつかえません. そういう中で事業所の列が一番よさそうです。 GreenPageに掲載され、NotesIDをもたない人でも事業所の指定はほとんど あります。 そこで、事業所の列 (第22カラム)にBlankがあればOB 、何かデータがあれば 現役という判定を行います。
実際には、この分割作業は、igsp5.plというPerl Scriptを実行して作業します。このScriptにより、オリジナルのCSV Fileを自動分割し、複数のファイルを自動生成します。
CSV Fileの全件数をチェックしておきます。
$cat igr1tbgo.csv | wc
274 1638 77023
274件だということがわかります。
第22カラムのブランクの判定には以下のperlスクリプトを使います。
#!/usr/bin/perl
while (<>) {
@a=split(/,/);
if ($a[22] eq '') {
$cat ig99c.txt | wc
GreenPage(BluePage+YellowPage)のみの情報になり、OBの情報が除外されました。
しかし、このGreenPageのみの情報中の更新対象エリアは社員情報(EmployeePart)のみです。他の情報、たとえば、(社員の住所や電話番号、私用のメールアドレスなど)は、更新対象とはなりません。このため、Tel/Dirで更新する対象エリアとTel/Dirの結果にかかわらず、更新しないエリアとを区別する必要があります。 ここでは、処理は何も行いません。これは、合成を行うときに考えれば良い話です。
囲碁部DBの情報をTel/Dirにて検索を行いますが、 このとき手間を減らすために 複数同時検索を行います。Tel/Dirの仕様でこれは、以下のような 指定をすることで可能です。 (Tel/Dirは1.4以上でないと駄目です。私はふだんは OS/2なのですが、このときはしょうがないのでNTをたちあげて作業をやっています)
Mori;Tani;Yamada
上記の指定で森さんや谷さん、山田さんという人を同時検索することができます. しかし、上記の指定では、目的の森さんや谷さん、山田さんだけでなく、 森川さんや森木さん、谷村さん、谷山さんなど実際には必要のない人まで検索 にひっかかってしまいます。そのため、これをユニークにするために KeyWordの最後に以下のように_(アンダーバー)をつけます。
Mori_;Tani_;Yamada_
これで、目的の森さんや谷さん、山田さんが検索され、森下さん、谷原さんなど 検索したくない方は排除されます。しかし、これでも問題があって、森さんも 谷さんも社内に何名もいて特定できません。そもそも氏名による検索を行う ことに無理があったのです。ここまで読んだ方はNotesのIDは社内でユニークなの でそれをキーワードにしたらどうか?と考える人がいるでしょう。そうです。 NotesのIDは唯一無二のはずなので、キーワードとしては氏名よりはすぐれています。
Hisashi Magata/Japan/Contr/IBMJP;Takeshi Tokuyama/Japan/IBMJP;...以下続く
等とすればよさそうです。しかし、実はこれにも問題があります。 キーワードとしていれるデータには入力バイト数制限があるのです。2つや3つ くらいのNotesIDなら大丈夫でしょうが、もう少しIDを増やすと入力域にデータが はいりません。これだと何度も検索せねばならず非常に不便です。 そこで、NotesのShortIDを使ったらどうか?という案に達します。そうです。これが 一番良い方法です。
MORI;TANI;OOKI;JL202059;
等のデータになりそうです。これでも入力域バイト数 制限はうけますが、少なくともNotesIDよりは多くの複数同時検索が行えるので 非常に効率がよいです。しかし、この方法だと例のユニーク問題が発生します。 すなわち、MORIというShortIDはたしかにユニークなのですが、MORIKIというShortID やMORIKAWAというShourtIDまでヒットしてしまいます。これを避けるために アンダーバーをつけます。
MORI_;TANI_;OOKI_;JL20259_;
これで、完璧なデータができました。このようなデータを作成するための方法を 以下に解説します。現在では、igsp5.pl という自動生成スクリプトでキーも 自動生成されますが、1-2-3等のファイルから生成したCSV Fileから抽出して作成する方法も解説しておきます。
EV3167_; AKAISHI_; E00006_; E00671_; JL08013_; ASADA1_; ASANOM_; VCSTS04_;
EV5871_; EV3167_; AKAISHI_; E00006_; E00671_; JL08013_; ASADA1_; ASANOM_; VCSTS04_; EV1386_; YAMINO_; E13417_; EV5633_; JL21022_; EP8883_; EP9799_;
EV5871_;EV3167_;AKAISHI_;E00006_;E00671_;JL08013_;ASADA1_; YAMINO_;E13417_;EV5633_;JL21022_;EP8883_;EP9799_;PSIKENO_; . .
キーワードとして、NotesのShortIDを利用したのは非常に良いアイデアでしたが、まだ問題があります。GreenPartの方でありながら、NotesやNotesのShortIDをもたない方がいらっしゃるということです。これは非常に珍しいケースですが、この場合、 社員情報は別の方法でひっぱってくるよりありません。そこで、分割プログラム igsp5.plでは、これらの情報をプログラム内にハードコーディングしています。すなわち、
Hirano Katsuhiko;Hosotani Seiji;Kobori Michiaki;Watanabe Toshiaki;Yoshida Minoru;
というデータをキーワードのファイル生成プログラム内に記述して、キーワードを作成しています。
igsp5.plをすでに実行されていることでしょう。キーファイルは、 igr1t.key というファイル名で、すでにできあがっています。
完成したキーワードファイルをPCに転送して下さい。 このファイルを上記の例のとおりnsid6.txtという名前で取得したと過程して このあとの話しを続けます。 なお、FTP Clientソフトとして、FFFFPを推奨する理由は、コード変換(例えばEUC->ShiftJIS) を自動判別して実施してくれるので、UNIX<->PC間が楽だからです。
取得したnsid6.txtをメモ帳で開きます。 検索結果データを保存するためにワードパッドを起動しておきます。
Tel/Dirにより検索を行います。このとき複数同時検索を行うわけですが、 現在確認されているのは、Tel/Dir V1.4以上でないと実行できません。 この後の作業は、Keyを表示しているメモ帳と データ保存用のワードパッドと Tel/Dirの3つを使う作業になります。
nsid6.txt の 一行目をマウスでマークして下さい。
EV5871_;EV3167_;AKAISHI_;E00006_;E00671_;JL08013_;ASADA1_;
そしてクリップボードにcopyします。つまり、Ctrl+c または、メモ帳Menuの 編集、 コピーを選びます.
Tel/Dirを起動します。 ディレクトリ一覧で GreenPgを選択します。 検索条件のところでスクロールバーを操作して、NotesShort:というデータエリアを出します。 ここで、ペーストします。(Ctrl+v ) キーワードが入力されたはずです。 検索を行います。 複数のデータが同時表示されるはずです。 ここで出力されたデータの行数と入力したキーワードの数が一致していること確認して 下さい。一致していなかったら、原因を調査して下さい。 (退社してNotesIDがなくなってしまった方などがいるかもしれません。)
表示されたデータをマウスでマークします。 Tel/Dirの右下方面にある copyというエリアのListボタンを押します。 Copy List to Clipboardの画面になりますので、全項目 (CSV形式)を選択して、 コピーします。
ワードパッド (まだブランクのまま)にペーストします。 このとき、ワードパッド上では、画面にはいるように、データが改行されています。 そこで、 Menuから 表示 > オプション > Word6 タブ で 右端で折り返すという欄で折り返しなし(N)をチェックします。 これで、ワードパッド内のデータが一行一データの見れるようなFormatになったことと おもいます。
ここで、いったんこのファイルを保存します。 ファイル名をつけて保存を選択し、ファイル名は任意ですが、tdata.txtとして おきましょう。 ファイル名は半角英数字で入力して下さい。 ファイルの種類はテキストドキュメントを選択します。 保存するときに、警告メッセージが出力されますが、その中で再度 テキストドキュメントを指定してクリックして下さい。
このあと、Tel/Dirに戻り、表示されているデータをとじます。 Mainの画面で入力域消去ボタンを押します。さきほどいれたキーワードが消去されると おもいます。次にメモ帳に行き、2行目のデータをcopyします。そしてTel/Dirにいき NotesShortIDの欄にこれをいれて検索、マウスでデータを選択し、リストをcopyして また編集画面のままになっているワードパッドに追加するようにデータをペーストします。
このキー入力、検索、データのペーストという一連の作業を18行分(keyの数だけ)実施します。 この操作をやっているうちに、あれ、順番が変だ!とおもうかもしれませんが、気にしない で下さい。あとで修正します。また、勘違いで同じキーワードで二度検索してしまった。 ということもあるかもしれません。これらは後でまとめて面倒をみますのでただ、もくもく と検索作業を続けて下さい。(ただし、キーワードを入力漏れしてしまった場合は面倒 みきれません) すべてのキーワード入力による検索結果が保存されたtdata.txtができあがったら、 上書き保存して下さい。しつこく、警告メッセージが表示されますが、 テキストドキュメントをまた選択します。最終的にできあがります。 tdata.txtをUNIXの環境にfile転送して下さい。
tel/dir での検索結果のファイルは、BluePage,yellowPageの生データを含んでいます。ここには、ユーザーがBluePageやYellowPageに入力した情報内にカンマ(,)を含むケースがあります。この後の処理では、カンマ,により区切りを設定したという前提でプログラムをくんでいますので、正確な後処理を行うために、この予期せぬカンマを除去する必要があります。
もうすこし、具体的に説明すると、
no. , Rome Name , 氏名 , 役職 , 段位 1 , ooki kenshi , 大木建志 , 囲碁部長 , 4.5段 2 , Kishihara Tatsuya , 岸原達也 , 囲碁部会計, 事務長 , 5.5段 3 , Yano Masayoshi , 谷野正義 , 大和同好会幹事 , 3.5段上記の例で、2の岸原氏は、囲碁部会計と事務長を兼任しているので、役職の欄に、囲碁部会計,事務長と2つを併記しています。そのさい、併記の途中に、カンマを使っていますから、全体のFieldの数がくるってきます。 このあとのプログラムの処理でエラーが発生します。岸原氏の段位のところが事務長と認識されてしまったりするでしょう。
実際には、このカンマ除去作業は、csvp.plというPerl Scriptを実行して作業します。使用例は、perl csvp.pl ign1.csv です。このScriptにより、オリジナルのCSV Fileから、すでに過去に発生したことのあるカンマを自動除去します。中のファイルをみていただければ、簡単ですが、単に s/ABC,DEF/ABC DEF/ のように列挙しているだけです。だれでも修正、追加等ができるでしょう。
このプログラムを実行すると、 igcsv.txtというファイルに除去したあとのファイルを生成します。また、igcsv3.txtという欄に30カラム以上のカラム数があったデータをはきだします。igcsv4c.txtには、各行が、何カラムずつあったかを表示します。(本来は、ここが、All 30でなければならないわけです。)
このプログラムは、過去にわかったカンマをとりのぞくというスクリプトですから、その後にはいってきたカンマは認知できません。プログラム実行後、igcsv3.txtに、除去できなかったカンマの存在するデータ行が明示されますから、この行データをにらみ、カンマのはいっている部分を確認してください。
確認したら、実際のデータ、igcsv.txtから、データをとりのぞいても良いのですが、できたら、csvp.plを改版してください。つまり、新たなデータを入力するのです。そして、もう一度、csvp.plを実行し、igcsv3.txtが減るかどうかを確認します。ちなみに、csvp.plに間違ったデータがはいっていても、それは処理しないだけのことですから、気にする必要はありません。(もしかしたら、日本語全角文字と、カンマが微妙にかかわっている場合、csvp.plでは、うまく処理されないかもしれません。そういう場合は元のtel/dirの検索結果データを直接編集してください)
最終的に、すべて30カラムで構成された正当なcsv dataができあがります。ファイル名は、csvp.plの出力で、igcsv.txtとなっています。
GreenPartのTel/Dirでひいた新しいデータと既存のデータとをマージする必要があります。ここでは、そのMergeの作業について解説します。
まず、最初にtel/dirでひくことを期待されながら、実は検索できなかったという人がいることを念頭においておかなければなりません。こういう場合、GreenPageでさえひけなかったのですから、この人達はOB Part行きとなるはずですが、無条件にそちらへおくってはいけません。つまり、OBでないのに、Tel/dirで検索されなかった可能性があるからです。後述のkjoin.shの結果の評価の項目を確認してください。
GreenPartのデータとしては、最初に保存してある out2.txtと、Tel/dir(green)で新たにひいた igcsv.txtとがあります。out2.txtは、社員情報部分(旧)と一般情報を含んでおあり、igcsv.txtは、社員情報部分(新)のみで構成されています。なので、これらを合成すれば良いわけですが、合成には、UNIXのjoinコマンドを利用しています。しかしながら、joinコマンドを使用する前に、両者のテキストファイルはソートされていなければなりません。さらに、joinのためのキーを選定しなければなりません。
これらの一連の作業を kjoin.shというシェルスクリプトを利用して実行します。
単に $./kjoin.sh と実行するだけで、プログラムは実行されます。(最初のrmパートは、最初の実行時のみ、既存のファイルがないので、エラーになりますが、無視してください)
kjoin.shの内容
join -j1 2 -j2 1 -t , A1.txt A2.txtというコマンドで、A1.txtの2番目のFieldとA2.txtの一番目のFiledをKeyにして両者を合成する。両者をつなぐセパレーターは、-t optionで指定したカンマ ,である。
join -j1 2 -j2 1 -v 1 -t , A1.txt A2.txt
で、第一ファイルのみに存在する行を出力する。
あいうえお順ソート
tdata.txtは、データを見るとあいうえお順にはなっていません。 これは、検索のキーを入力した単位でABCD順でソートされてしまっている はずです。 ローマ字で記述されたデータをあいうえお順にソートする機能は私の知る 限りありません.(もし、そのような機能があれば是非、ご一報下さい) そこで、関東囲碁部DBにはすでにローマ字とあいうえおに変換されたデータの 組み合わせが存在しますので、これを利用します。 まず、keyのファイルを作成します。 sort を利用して、データのkeyをソートしておいた上でjoinを使用します。
join -t , -j1 1 -j2 2 -a 2 tdata.txt igkey13.txt > tdata30.txt
OB Partもソートして掲載する必要がある。
kjoin.shの結果の評価
kjoin.shを一度実行したら、outob.txtを参照してください。 これは、今まではGreenPartとして扱ってきた人を今後、OBとして扱う可能性がある人たちの集まりですが、正確には、このoutob.txtにリストアップされている人は、以下のどれかです。
1.2.の可能性がありますので、この人たちすべてに対して、tel/dirにて、名前によるNotesの再検索を行ってください。その結果、出力されなかった場合は、OBになっています。これは、No Actionでかまいません。 NotesのIDが変更されたり、Notesが使えなくなり、ShortIDがなくなった人がいる場合は、Manualで、修正する必要があります。最初に戻って、tel/dirを検索して結果のcsv.txtをtel/dir検索結果ファイルに追加する必要があります。また、NotesのShortIDがない場合は、今後のことも考えて、igsp5.plで、out4.txt (tel/dir用のキー)を抽出するパートにHardcodingしておけば良いでしょう。
#for those who have not Short ID but have Notes ID
という場所に追加しておいてください。また、事業所データのない方のほうは、やはり、igsp5.pl内の
# for those who have not Building info.
という場所に追加しておいてください。
名前が間違っていた場合は、今回で反映されますので、No Actionで大丈夫です。 OBになった場合は、GreenPartから、OB Partにいくわけですが、No Actionでけっこうです。いずれにしろ、上記のいずれかを判定して、しかるべきアクションをとってください。
上記のNotesIDの変更あるいは消失のリカバリーを終えて、再度実施した kjoin.shの出力結果として、できあがった outrslt.txtが最終的なCSV Fileです。
完成したCSV Fileを1-2-3のファイルにExportします。
クラブ本部へ提出する名簿のデータは、以下のスクリプトを通して、CSVFileを作成する。
ktcy@falcon07:/aixw%cat out2.txt | awk -F , '{print $37,",",$4,",",$22}' > out2clb.txt
IGDBのCSVファイルに対して、igsp5.pl → distd.sh の順番に実行すると out10b.txtというファイルができあがります。これが、配送リストです。
$perl igsp5.pl Igdb01.CSV $distd.sh