[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[orca-users:10209] Re: etch ORCA でのデータ移行



結縁晃治 先生   まずは、データ移行成功、おめでとうございます。hskitagawaです。

 前回、お名前に'0'が付いているのに気が付かずに申し訳ありませんでした。


>やはり、うまく変換できなかった原因は 漢字コードの問題だったようです。

 敵は本能寺におりましたか。nkf の場合、外字に出会うとそこで処理を中止して「何食わぬ顔で正常終了してしまう」はずですから、使い物にならないファイルができてしまいます。このまま移行プログラムにかけると、患者情報では、「必須データ未入力」とかのエラーは出るでしょうが、CSVファイルが悲惨な状態になっていることなど知らんぷりです。エラーメッセージやORCVTPTINF_ERR.txtからは絶対にわかりません。CSVファイルが尻切れトンボなのをエデイタで見て初めてうろたえることになります。ちょん切れた部分の、正に次の文字が外字であったことに思い至らなければ、原因は、この時点でさえ、想像もつかないでしょうね。膨大な時間と労力をかけて、全然関係のない所に原因を求めるはめにならざるをえないのです。(私の場合1週間まるまるムダにしました)

 信用できないメッセージどころか(どこかの組織のように)「自らの不祥事に沈黙を守って事態をさらに悪くする」プログラムもめずらしくありませんのでご注意を。

>区切りが'−'(SJISでJIScode8541)では駄目で'ー'(JIScode8508)で

 0x8541 はSJISの範囲内ですがSJIS表によれば欠番のはずでは?また、0x8508 はSJISの範囲外でしょう。SJIS外字にもあてはまらないと思いますが?

>漢字コードは、やはりEUC-JPが正解で、UTF-8では文字化けしてしまいます。

 EUC でも gedit で表示すると文字化けすることはあります。当方もユーロ記号だらけの画面が表示されてのけぞったことがあります。ただし、これはエラーとは限りません。emacs で'まともに'表示されれば正常です。問題なくコンバートできます。

>ただどうしたわけか手順書のとおりではうまくいかず....

 当方は Excel に詳しくはありませんが、CSVファイルとは「各フィールドのデータを文字列として、それを(半角)コンマを区切りとしてフィールド数だけ結合した1行の文字列をデータベースの1レコードとしてデータベースファイルを表現したもの」ですから、できたファイル形式の違いではなく、フィールドのデータ文字列そのもの、あるいは、CSVファイルを解析して再びデータを再現するルーチンのロジックが問題なのでは?
 Excel --> SJIS CSV --> nkf --> tr --> ECU CSV と Excel --> OoCalc --> EUC CSV の違いですね。こう書いてみると、やはり nkf あたりが怪しいのではないでしょうか?

 データ移行マニュアルでは、旧レセコンからデータの取り出し、CSVファイル(SJIS)の作成、外字がある場合はレポート(外字患者一覧表)作成、本文外字データの'■'(0x81A1)への書き換え(** これは var 4.00 のマニュアルでは仕様から削られています)、までを業者の責任範囲、その先の、Debian Linux と ORCA のインストール、CSV(SJIS)からCSV(EUC)への変換、移行プログラムによるORCAへのデータ入力、までは、できれば認定業者による作業を奨励、と言うことになっていると思います。自力によるデータ移行をされる場合は、たとえ後半部だけの場合でも、前半の作業が望み通りにできあがっているか(当然、何が望みかを知ってなければなりません!)を確認する必要があります。そうでないと、エラーになった時に原因がわからないことになります。

** しかし、なぜこれを仕様から削除したんでしょうか?これ抜きでは、業者から渡されたCSVファイルには外字が含まれたままなので、外字があれば、このまま移行作業をすれば必ず失敗します。外字データを'■'に書き換えるのは「外字をSJISに含まれる文字に置き換える」と言う意味があります。その結果、CSVファイルは「SJISの文字だけからなるファイルに変身した」ことになるのです。つまり、(他にエラーがなければ)間違いなく移行ができるファイルになったわけです。'■'の部分は移行後にORCAの上で書き直せばいいわけです。そのための「外字レポート(外字患者一覧表)」なのですよ。何を考えているのでしょうか?

 今まで「SJISに含まれる文字」と簡単に書いてきましたが、正しくは「SJISの全角記号および全角英数文字、SJIS第1水準および第2水準漢字」です。ただ、現在使用されていない「欠番」がかなり存在します。「それ以外は全て外字」です。ただし、「SJIS外字」は範囲が決まっています。第3水準は使えないのかと、どなたかが書いておられましたが、第3水準漢字は、先ほどの範囲に入っていませんので、外字です。何でそうなるの?と思われるでしょうが、SJISがどのように構成されているのかを知れば「必然である」と思われるでしょう。このあたりは、DOSの時代にC言語等でプログラムをされていた方なら御存知のかたも結構おられると思いますが、Windows はアプリケーションに応じて「勝手に相互変換してしまう」ので意識することはあまりありません。それで、若い人ではプロでもそれほど詳しくない方もありますね。長文になってきましたので、別稿で「外字を理解するための、SJIS、JIS、EUCの怪しい関係」をお話しようかと思います。