KIGO DB Operation Manual

Overview

この文書は、IBM関東囲碁部が管理しているDB(DataBase)のOperation Manualです。

作成:岸原達也 as of 2001年1月20日

[1] What is DB ?

DB(Database)とは、関東囲碁部で管理する部員情報データベースのことを指します。 1-2-3のファイル(.123 .WK4 Format)になっています。 部員の氏名、組織、内線、住所、電話番号、E-Mail Address等、多くの情報を含んでいます。おもな利用目的は以下のとおりです。

DBは、各年度ごとに作成され、新しい年度のファイル作成のさいは、昨年分のファイルをコピーして、微修正します。

1999年度のデータ(1-2-3)
2000年度のデータ(1-2-3)

[2] WorkSheet information

DBは、Lotus-123のファイルで、中に複数のワークシートがあり、以下のような構成になっています。

ワークシートの構成
1データベース囲碁部員総合情報
2名簿囲碁部内配布用名簿
3HTML File囲碁部 Webage用Tableデータ
4Mail Address関東囲碁部配送アドレスリスト

更新する場合は、第1ワークシートのみを更新します。第2から,第4ワークシートまでは第1ワークシートの情報を相対コピーしており、更新は自動反映されるようになっています。

[3] Data Part

OriginalのDB(1-2-3のFile)の、概念図は以下のようになっています。 (実際は、Green,OBの区別もなく五十音順でソートされています。)

DBの中のデータ
Green part 社員情報 Green Part 部員情報

OB Part 部員情報

DBは、関東囲碁部部員の氏名の五十音順(あいうえお順)でソートされています。現役、OBの区別はなく、以下のように、ひとつのリストになっています。

あいものそういちろう四十物壮一郎
あおきひろゆき青木宏之
あおきみちやす青木通泰
..
..
わだこうたろう和田興太郎
*実際には多くの行、カラムでできてます。

[4] Data Type Definition

データベースのカラムの定義は、以下のようになっています。

No.ColumnContent
1No.整理番号:あいうえお順の整理番号、これで、囲碁部員数が即座にわかるようになっています。
2Rome字部員氏名のローマ字です。 例) Kishihara Tatsuya
3ふりがな部員氏名のふりがなです。姓名ともに難しい読みの方がいらっしゃいますので、これで確認できるようになっています。 例) きしはら たつや
4氏名部員氏名です。漢字で記述されます。 例) 岸原 達也
5E_num部員の社員番号です。CheckDigitは除きます。OBの人は空欄になってます。また、関連協業会社の方は社員番号とは別の番号がはいっています。 例) 20259
6S_code組織コード(Section Code)のこと 例) T0620
7所属所属組織名称です。例) SWセンターシステム推進
8S_code22つめの組織コードです。ここには協力会社の会社名がはいることが多いようです。例) CSTS,ISTAFF
9英文組織名英文の組織名称です。例) Systems,Customer SupportCenter
10ID社員の識別表示で、LはラインをPはP担当を、 Sは、Staffを、Nは、Normal社員を表します。協業関連会社の場合はブランクになっています。
11職位社員の職員を表します。例)主幹、副部長、
12内線社内の電話番号です。例)1808-6455
13外線外線の電話番号です。例)046-215-1234
14FAXFAXの電話番号です。例)046-215-4321
15内線2二つ目の社内の電話番号です。例)1808-5564
16外線2二つ目の外線の電話番号です。例)046-215-6789
17FAX2二つ目のFAXの電話番号です。例)046-215-9876
18携帯携帯の電話番号です。例)090-1234-5678
19PBPHSの電話番号です。例)090-1234-0000
20社内メール社内メールアドレスです。例)LAB-T06, HZA-FA0
21事業所コード事業所のコードを表します。例)HZ , LAB, MK
22事業所事業所の名前です。例)築地、六本木、幕張
23階数事業所の内のロケーション、ビルの何階で、どの位置か、、を示します。例)A5SW,21TN01
24NotesIDLotus-NotesのIDです。
例)Tatsuya Kishihara/Japan/IBM@IBMJP
25ShortIDLotus-NotesのShortIDです。外部からメールを送信するときは、このShortIDを利用して、xxxxx@jp.ibm.comでメール送信することができます。例)jl20259
26J-Res社員の担当業務情報です。例)保守部品 EC/修理部品の管理
27VMIDVMのIDです。例) JL12345
28NODEIDVMのNODEのIDです。例)YMTVM1, FUJVM1
29VM+NODEIDVMのIDとNODEのIDをくみあわせた記述です。例)YMTVM1(JL12345), FUJVM1(SYUUSAKU)
30追加情報YellowPage上で、とくに追加情報があったときに記述する情報です。例)秘書の名前等
31更新日付YellowPage上の更新日付です。例) 00-03-23
32E-mailE-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に関しても同様のデータを記述しています。
データベースのカラムについては、不要になったものもありますので、 2001年秋以降に整理統合を予定しています。

[5] DB Operation

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(後述)というプログラムで他の記号に変換して、処理するようにしています。

[6] Peoriodical Change

ここでは、定期更新作業に関する作業手順を解説します。

定期更新作業は、単純な作業のくり返しが多いので、1年に1度実行する作業とはいっても、かなりのワークロードが発生します。そこで、スクリプト等を作成して、作業が簡単にできるように工夫されています。

ただし、スクリプトは人間が作成したものなので、そのときは対応できていも、 その後の環境の変化等には対応できないかもしれません。スクリプトを盲信せずに、具体的にどういう処理をするべきか、を考えて作業を実施することが肝要です。

そのため、この作業手順解説書では、やや、くどいとおもわれるくらいスクリプトでの実行している内容やその考え方について説明をいれています。これは、

のためです。予期せぬ事態が発生したときは、スクリプトに頼らず、自力で解決すべきでしょうし、場合によっては、スクリプトを改変する必要がでてくるかもしれません。。そのとき、それを実行するのは、あなたです。。本書は、そのためのヒントになるような解説書にもなっているわけです。

定期更新作業は、以下のような手順で実施されます。

No. ProcessObjectmethod
1File preparationLotus-1-2-3のFilelook
2CSV exportCSV File (igr1tno.csv)1-2-3CSV,1-2-3,Approach
3Green/OB Part divideGreenPartOB Partigsp5.pl
4Employee part divideEmployeePartNormalPart
5Key extractkey
6Tel/dir searchTel/Dir CSV File
7CSV PatchNormal CSV File
8Green Part MergeGreenPart CSV File
9OB Part Merge KIGO CSV File
101-2-3 ExportNew Lotus-1-2-3File

1. File preparation

データベースファイルを準備、確認する作業です。

最新の1-2-3のファイル(igdb0x.wk4)が存在していればOKです。ファイルはなければ、昨年分からコピーして作ってください。同じ名前でも複数のファイルがある場合は、必ず、最新のものを利用するようにします。(同じ名前のファイルが複数の個所に存在するのは好ましい例ではありませんが、バックアップファイルとして保存しておくのであれば、良い運用だといえるでしょう)

2000年版囲碁部DBファイル

それまでに分かっているエントリーの追加、削除作業、逐次更新作業等があれば、この定期更新作業を実施する前にできるだけ反映させてください。(後が楽です)

2. CSV export

処理をしやすいようにするため、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を作成する方法]

  1. 囲碁部DB(123ファイル)をLotus-123で開きます。
  2. 第一ワークシートのデータベース全域をマウスで選択します。具体的には、A2から、AU 269付近(2000年版囲碁DBの場合)ということになります。
  3. Menuから、ファイル → 名前をつけて保存 を選択します。
  4. ファイルの種類から CSV カンマ区切り(CSV)を選択します。
  5. 左下の □選択範囲のみ保存にチェックをいれます。
  6. ファイルの名前を入力してOKを押します。
    ファイル名は、なんでも良いですが、分かりやすくするため、以降の説明にあわせて、 igdb00.csvとしてください。(注) 01は、2000年の下、00を意味します。2001なら、01になります。
  7. CSV Fileが完成したら、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を読んで操作をするのはよほど特殊な事情の場合に限られます。さらに、この作業は間違いの発生しやすい作業なので、なるべく別の方法を検討して下さい。

  1. 123ファイルにて別に新規ワークシートを作成します。
  2. 第一ワークシートからデータの第一列をCopyします。(相対コピーにして 参照するようにします。つまり、新規ワークシートのセルで=を入力して その後、第一ワークシートのその位置のセルでEnterKeyを押します。)
  3. 第二列に,(カンマ)のみの列を追加します。 (全行に対して)
  4. 第三列に第一ワークシートの第二列を相対Copyします。
  5. 第四列に,(カンマ)のみの列を追加します。 (全行に対して)
  6. 以下、全列に対して、上記のデータの相対コピーと,カンマ列の追加を 繰り返します。(普通の人はこの作業をやっている途中でいやになること でしょう(笑) あくまで、1-2-3のみでやろうとするとこれほど苦労する わけです。
  7. 別のワークシートへの全列生成が終わったら、データ領域を広げます。 つまり、データの枠をはみだしていたり、次の列のデータに邪魔されて 表示されていないデータがあったりしている状況を解消します。 第一行の列の境目をマウスでドラッグするなりして、全データがもれなく 表示されるようにします。 (この作業もまた、神経を使う作業です。 十分なデータ領域を確保しないとデータ欠落が発生してしまいます)
  8. データ全域を選択し、テキスト保存します。 これで CSV Fileができあがるはずです。ただし、中のデータは大量の ブランク文字を含んでいるので、二つ以上のブランクを削除しておく ほうがよいでしょう。 例) sed s'/ //g' csvdata1 > csvdata2
  9. この方法は非常に非効率的ですので、他の方法をおすすめします。
  10. CSV Fileが完成したら、CSV fileについてに進んでください。

[Lotus-Approachを経由してcsv Fileを作成する方法]

囲碁部DBは、Databaseなのですから、もともと、Lotus-Approachのような DB Softで管理する方がよいのです。このApproachにはCSV生成機能があり ますから、非常に楽にCSV File生成をすることが可能です。

  1. Lotus-Approachを起動します。
  2. ファイル-> 開くを選択し、ファイルの種類を1-2-3にして、 囲碁部DBのファイルを指定します。
  3. 範囲の選択でシート情報が表示されるので、第一ワークシート つまり データベースという部分を選択してOKを押します。 1行目をフィールド名にするの部分はチェックされているとおもいますが、 そのままにして下さい。
  4. 変換先というダイアログが表示されます。 ファイル名が igdb99.dbf 等になっているとおもいます。そのまま 選択しましょう。ファイルがオープンされます。
  5. ファイルが無事にとりこまれたことを確認したら、 ファイル > エクスポートを選択します。
  6. ファイル名は任意ですが、 以降の説明の都合で igr1tbgo.csvという名前にしておきます。
  7. ファイルの種類の欄は テキスト-区切り文字 (*.TXT)を選択して下さい。
  8. データベースフィールドは、データベースの中のすべての列を選択して、 追加ボタンを押します。 出力フィールドにその選択された列が表示されます。
  9. テキストファイルオプションとして、区切り文字が表示されますから、 カンマを選択して下さい。 文字セットは Windows(ANSI)のままで良いでしょう。
  10. CSV Fileが完成したら、CSV fileについてに進んでください。

生成される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)"

3. Green/OB part divide

概要

csv Fileが生成されたら、次に実施する作業は、igsp5.pl というperlスクリプトを実行し、複数のファイルを生成することです。

$perl igsp5.pl igr1tno.csv

これで、そのDirectoryに複数のファイルが自動生成されます。これで、3.Green/OB Partの分割はもちろん、4.Employee Divde 5. Key Extract も自動で実現できます。

以下では、この作業の実施の意味やスクリプトで実施しているロジックの内容、さらには、自動生成スクリプトを使用しないでファイルをつくる方法などをのべています。

GreenPart OB Partの分割

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  

4. Employee part divide

GreenPage(BluePage+YellowPage)のみの情報になり、OBの情報が除外されました。

しかし、このGreenPageのみの情報中の更新対象エリアは社員情報(EmployeePart)のみです。他の情報、たとえば、(社員の住所や電話番号、私用のメールアドレスなど)は、更新対象とはなりません。このため、Tel/Dirで更新する対象エリアとTel/Dirの結果にかかわらず、更新しないエリアとを区別する必要があります。 ここでは、処理は何も行いません。これは、合成を行うときに考えれば良い話です。

5. Key Extract

キーワードについて

囲碁部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から抽出して作成する方法も解説しておきます。

[CSV FileからTel/Dir用のKeyファイルを作成する方法]

[CSV Fileを自動生成スクリプトから作成する方法]

igsp5.plをすでに実行されていることでしょう。キーファイルは、 igr1t.key というファイル名で、すでにできあがっています。

キーワードファイルの転送

完成したキーワードファイルをPCに転送して下さい。 このファイルを上記の例のとおりnsid6.txtという名前で取得したと過程して このあとの話しを続けます。 なお、FTP Clientソフトとして、FFFFPを推奨する理由は、コード変換(例えばEUC->ShiftJIS) を自動判別して実施してくれるので、UNIX<->PC間が楽だからです。

6. Tel/Dir Search

検索準備 (エディタの起動)

取得した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 でデータ数をチェックします。

7. CSV Patch

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となっています。

8. Green Part Merge

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. NotesのShortIDが変更された
  2. Notesが使えなくなり、ShortIDがなくなった。
  3. 事業所のデータがないので、あやまってOB Partにいってしまった。
  4. 1-2-3のファイルで、最初にいれたローマ字入力覧がおかしかった。
  5. OBになったので、Notes情報が抹消されている。

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です。

9. 1-2-3 Export

完成したCSV Fileを1-2-3のファイルにExportします。

10. report list(補足)

クラブ本部へ提出する名簿のデータは、以下のスクリプトを通して、CSVFileを作成する。

ktcy@falcon07:/aixw%cat out2.txt | awk -F , '{print $37,",",$4,",",$22}' > out2clb.txt

11. 配信リスト (補足)

IGDBのCSVファイルに対して、igsp5.pl → distd.sh の順番に実行すると out10b.txtというファイルができあがります。これが、配送リストです。

$perl igsp5.pl Igdb01.CSV
$distd.sh