囲碁部DB管理Manual (作成中)
作成:岸原達也 as of 2000/1/18
この章は囲碁部DBの管理方法を解説します。
ここでは一部でUNIXの知識が要求されます。 ご了承下さい。
(なお、現在大半の作業をperl scriptで実現するようなプランがあります)
囲碁部DBはLotus-1-2-3のファイルになっています。
1999年度の囲碁部DBファイル(1-2-3 WK4)
1999年度の囲碁部DBファイル(CSV)
このDBは、以下の目的で使用されます。
- 囲碁部管理業務 (第一ワークシート)
緊急時の電話連絡やメール連絡のための情報として使用
合宿運営時の喫煙、保険証などのチェック
- 囲碁部内名簿 (第二ワークシート)
囲碁部員に配る名簿作成
- クラブ本部提出用名簿 (第二ワークシート)
年に一度提出が義務づけられている名簿作成
この名簿の表紙は第四ワークシートになっている。
- ホームページ掲載用HTMLファイル (第三ワークシート)
社内ホームページ上の名簿
- 関東囲碁部報送信リスト (第五ワークシート)
関東囲碁部報を送信するさいの送信リスト(NotesIDとE-Mail ID @internet)作成
に利用。
囲碁部DBに関して、以下の手順に分けて解説します。
1)囲碁部DB定期更新手順
ここでの更新は、年に1度あるいは2度程度実施する定期更新を指します。
これは DBに元々存在するデータの更新を実施する手順のことです。
部員(社員)は1年経過すると所属が変わったりすることがあるので
それを反映させるためのものです。このような目的の更新であるためTel/Dir
を使用して、GreenPageに出力される方のみが対象になります。
2)囲碁部DB臨時更新手順
ここでの更新は、DBから部員を追加したり、削除したりするすることや、
部員からの連絡により、当該部員の住所やNotesIDやE-MailのIDが変更された
場合に臨時にその変更を実施することがありますが、こういった類いの更新の
ことを指します。
囲碁部DB定期更新手順の概要
- 関東囲碁部員DB(既存ファイル)の確認
|
- CSV Fileの作成
|
- GreenPart/Otherへのファイル分割
|
- Tel/Dir用キーワードファイルの作成
|
- Tel/Dirによる検索
|
- Tel/Dir CVS Filの確保
|
- GreenTel/Dir CVS Filの確保
|
- HTMLファイルの作成
|
- HTMLファイルの作成
|
- 囲碁部DBの更新
|
- 名簿の印刷
|
- 囲碁部DB(既存ファイル)の確認
- Lotus-123のファイル囲碁部DBを確認します。
(この囲碁部DBは第一ワークシート部分がDBに相当します)
- CSV File の作成
すでに、1999年度版のCSV Fileがありますが、このようなFileを生成する
方法を記述します。
Lotus-123のファイルの第一ワークシート部分から CSV Fileを作成します.
さて、Lotus-123の致命的な欠点としてCSV File生成機能がありません。
CSV Fileとして保存することができないのです。このため、CSV Fileを作成
するには多少の工夫が必要です。あくまで、Lotus-1-2-3のみで実施するには
以下のようにすることで実現できますが、非常に手間がかかります。さらに、
正確な作業を行わないとデータの欠落などが発生してしまいます。
ですから、この方法はお勧めではありません。
[Lotus-123のみでcsv Fileを作成する方法]
- 123ファイルにて別に新規ワークシートを作成します。
- 第一ワークシートからデータの第一列をCopyします。(相対コピーにして
参照するようにします。つまり、新規ワークシートのセルで=を入力して
その後、第一ワークシートのその位置のセルでEnterKeyを押します。)
- 第二列に,(カンマ)のみの列を追加します。 (全行に対して)
- 第三列に第一ワークシートの第二列を相対Copyします。
- 第四列に,(カンマ)のみの列を追加します。 (全行に対して)
- 以下、全列に対して、上記のデータの相対コピーと,カンマ列の追加を
繰り返します。(普通の人はこの作業をやっている途中でいやになること
でしょう(笑) あくまで、1-2-3のみでやろうとするとこれほど苦労する
わけです。
- 別のワークシートへの全列生成が終わったら、データ領域を広げます。
つまり、データの枠をはみだしていたり、次の列のデータに邪魔されて
表示されていないデータがあったりしている状況を解消します。
第一行の列の境目をマウスでドラッグするなりして、全データがもれなく
表示されるようにします。 (この作業もまた、神経を使う作業です。
十分なデータ領域を確保しないとデータ欠落が発生してしまいます)
- データ全域を選択し、テキスト保存します。
これで CSV Fileができあがるはずです。ただし、中のデータは大量の
ブランク文字を含んでいるので、二つ以上のブランクを削除しておく
ほうがよいでしょう。 例) sed s'/ //g' csvdata1 > csvdata2
- この方法は非常に非効率的ですので、以下のLotus-Approachを使う方法を
おすすめします。
[Lotus-Approachを経由してcsv Fileを作成する方法]
囲碁部DBは、Databaseなのですから、もともと、Lotus-Approachのような
DB Softで管理する方がよいのです。このApproachにはCSV生成機能があり
ますから、非常に楽にCSV File生成をすることが可能です。
- Lotus-Approachを起動します。
- ファイル-> 開くを選択し、ファイルの種類を1-2-3にして、
囲碁部DBのファイルを指定します。
- 範囲の選択でシート情報が表示されるので、第一ワークシート つまり
データベースという部分を選択してOKを押します。
1行目をフィールド名にするの部分はチェックされているとおもいますが、
そのままにして下さい。
- 変換先というダイアログが表示されます。
ファイル名が igdb99.dbf 等になっているとおもいます。そのまま
選択しましょう。ファイルがオープンされます。
- ファイルが無事にとりこまれたことを確認したら、
ファイル > エクスポートを選択します。
- ファイル名は任意です。 igcsv.txt とでもしておきましょう。
- ファイルの種類の欄は
テキスト-区切り文字 (*.TXT)を選択して下さい。
- データベースフィールドは、データベースの中のすべての列を選択して、
追加ボタンを押します。 出力フィールドにその選択された列が表示されます。
- テキストファイルオプションとして、区切り文字が表示されますから、
カンマを選択して下さい。 文字セットは Windows(ANSI)のままで良いでしょう。
- 現役部員/その他部員への分割
この作業は、どんな意味をもっているでしょうか? 現役部員と
書いていますが、具体的にはTel/Dirで検索対象となる部員のことを指して
います。つまり、GreenPageにて検索可能な社員をすべて含みますから、
転籍、出向や関連会社でIBMに常駐しているような方々も現役部員と称して
います。この作業の意味は、部員DBからTel/Dirで検索対象となっている
社員のみ抽出して変更作業を実施することにあります。Tel/Dirの検索結果は
現役部員のみのデータとなりますので、このデータを反映させるのに
一番簡単な方法は、受皿としても現役部員データのみのファイルを用意
しておくことでしょう。 つまり、
現役
OB
現役
現役
OB
OB
といった雰囲気のDBに対して Tel/Dirの検索結果は
現役
現役
現役 といったデータになります。この更新作業を一番楽にするためには
現役のみのデータファイルが必要だということです。これだと元の
順番に戻すには順列番号がついていますので、Mergeしてsortすれば良い
だけの話です.簡単に実現できることが想像つくことでしょう。
この作業を実現するには、カラムの中で現役とOBの区分けが可能な列が存在
すれば良いことになります。ひとつはTel/Dirのデータがはいる列がその判定に
利用できるでしょう。 しかし、Tel/Dirのデータにはあったりなかったりする
データがあって判定に使えない列が多いようです。例えばGreenPageででてくる
人がいてもLotus-Notes IDをももっている人ともっていない人がありますので,
判定にはつかえません. そういう中で事業所の列が一番よさそうです。この
事業所の列 (第22カラム)にBlankがあればOB 、何かデータがあれば 現役という
判定を行います。
まず、CSV Fileの全件数をチェックしておきます。
$cat ig99c.txt | wc
274 1638 77023
274件だということがわかります。
第22カラムのブランクの判定には以下のperlスクリプトを使います。
#!/usr/bin/perl
while (<>) {
@a=split(/,/);
if ($a[22] eq '') {
$cat ig99c.txt | wc
- 現役部員ファイルのカラム分割
現役部員ファイルのみの抽出ができましたが、Tel/Dirのデータはすべてでは
ありません。部員の現住所や電話番号などは、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_;
これで、完璧なデータができました。このようなデータを作成するための方法を
以下に解説します。
- CSV Fileを使って生成します。CSV File の25カラム目がこのデータに相当
します。 CSV Fileが準備できない方は以下を参照してKeyFileを作って下さい。
- Lotus-123の囲碁部DBファイルの第一ワークシートのNotesShortIDカラムを
他所の列からの干渉をうけないようにします。つまり、前の列の枠をじゅうぶんに
広げます。ShortIDがブランクのところにNotesのIDのデータがはいっている部分が
あるとおもいます。その状態を解消するために、NotesIDの列に十分なスペースを
与えるというわけです。目でみて重なってなくてもデータとしては重なるケースが
ありますので、おもいきって広げておくことをおすすめします。
- Lotus-123の囲碁部DBファイルの第一ワークシートのNotesShortIDカラムを選択
します。その列の一番上のカラム(Y列)をクリックするだけでOKです。
この際、前述の前列枠拡大作業をやっていないと、NotesIDの後半部までデータと
して拾ってしまいますので、ご注意下さい。
- Lotus-123のMenuから ファイル > 名前をつけて保存を選択し、保存のオプション
で選択範囲の保存のチェックボックスをチェックしておきます。そして、ファイル
の種類でテキスト(.txt)を選択して下さい。ファイルの名前も選択するDirectoryも
任意です。仮に nsid.txt でもしておきましょう。それで保存します。
- できあがったテキストファイルを念のため確認してみて下さい。メモ帳や
ワードパッド、システムエディタ(OS/2の場合)で確認できるでしょう。
ブランクはあってもかまわないです。NotesのShortIDのみのデータになっていれば
成功です。
- 作成したnsid.txtをUNIXまたはUNIXの使える環境に転送します。
(注)ASCII モードで転送して下さい。)
余談ですが、Windows環境ではFFFTPというGUI FTP クライアントソフトが
おすすめです。
- これから以降の作業は実際にはスクリプトをくんでやるのでStep by Step
でやることはないのですが、念のために丁寧に解説しておきます。
- まずは、ブランク行を排除しましょう。
$grep -v ^$ nsid.txt > nsid2.txt
- 先頭行 (ShortIDと書いてある)はいらないので削ってしまいましょう。
$sed '1d' nsid2.txt > nsid3.txt
- 制御文字を挿入しましょう。
$sed s/$/\_\;/g nsid3.txt > nsid4.txt
これで、以下のような雰囲気のデータになったはずです。
EV3167_;
AKAISHI_;
E00006_;
E00671_;
JL08013_;
ASADA1_;
ASANOM_;
VCSTS04_;
- 不良データの削除
データを簡単に目チェックしておきます。さーっと眺めてみてください。
T 1文字とか NET とか、そのようなデータがあった場合はかなり怪しいです。
元の1-2-3ファイルを見比べて チェックし、Notes の Short IDでない場合は
その行をけしておいてください。
- データ件数の保存
念のためにデータ件数をメモしておきます。
$cat nsid4.txt | wc -l
ここで出力される数(データ件数)をメモしておいてください。
2000年1月18日付のチェックでは175でした。
- 行ごとにデータをまとめましょう。
$cat nsid4.txt | paste - - - - - - - - > nsid5.txt
(注意)実際には -の数を10回程度にして下さい。
このようなデータになったことでしょう。
EV5871_; EV3167_; AKAISHI_; E00006_; E00671_;
JL08013_; ASADA1_; ASANOM_; VCSTS04_; EV1386_;
YAMINO_; E13417_; EV5633_; JL21022_; EP8883_;
EP9799_;
- データ間のTabを削除しましょう。
tr -d '\t' < nsid5.txt > nsid6.txt
以下のような感じのデータになったでしょうか?
これで、tel/dir検索のためのKeywordの完成です。
EV5871_;EV3167_;AKAISHI_;E00006_;E00671_;JL08013_;ASADA1_;
YAMINO_;E13417_;EV5633_;JL21022_;EP8883_;EP9799_;PSIKENO_;
- 完成したキーワードファイルをPCに転送して下さい。
このファイルを上記の例のとおりnsid6.txtという名前で取得したと過程して
このあとの話しを続けます。
なお、FTP Clientソフトとして、FFFFPを推奨する理由は、コード変換(例えばEUC->ShiftJIS)
を自動判別して実施してくれるので、UNIX<->PC間が楽だからです。
- 検索準備 (エディタの起動)
取得したnsid6.txtをメモ帳で開きます。
検索結果データを保存するためにワードパッドを起動しておきます。
- Tel/Dirによる検索
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転送して下さい。
cat tdata.txt | wc -l でデータ数をチェックします。
- あいうえお順ソート
tdata.txtは、データを見るとあいうえお順にはなっていません。
これは、検索のキーを入力した単位でABCD順でソートされてしまっている
はずです。
ローマ字で記述されたデータをあいうえお順にソートする機能は私の知る
限りありません.(もし、そのような機能があれば是非、ご一報下さい)
そこで、関東囲碁部DBにはすでにローマ字とあいうえおに変換されたデータの
組み合わせが存在しますので、これを利用します。
まず、keyのファイルを作成します。
sort を利用して、データのkeyをソートしておいた上でjoinを使用します。
join -t , -j1 1 -j2 2 -a 2 tdata.txt igkey13.txt > tdata30.txt
- 囲碁部DBの更新
- HTMLファイルの作成
- 名簿の印刷