CSV_CR10.lzh 桐8用 CSV内「強制改行」変換CMD Copyright (c) 2001 by Ogo mailto:ogou@icity.or.jp ●はじめに(小難しい前説) 桐8用 CSV内「強制改行」変換CMDをアップロードします。 単刀直入に言えば、 CSV テキストファイルの項目内(セル内)改行を 「¶」JIS #2279 (段落記号) という文字に置き換えてしまいます。 もちろん、桐の TBL や WFM, RPT の定義で 「¶」JIS #2279 (段落記号) を強制改行文字として扱うことを前提にしています。 - - - - この一括処理は、桐8の困った仕様をクリアする目的で作成しました。 とは言っても、そもそもの原因はマイクロソフトのクソ仕様にあります。 コンピューターの異ソフト間でデータを交換するのにテキスト経由での コンバートは最も互換性があって、全く問題がない「はず」なのです。 桐が標準としている K3 形式などは、項目の数値型と文字列型との区別 がハッキリしていて、データベースのデータ交換には最も問題が発生し にくい手段と言えましょう。 が、世に最も多く出ているマイクロソフト製の標準のテキスト交換形式 は、その K3 を簡便に崩したようなテキトーな内容と言わざるを得ない のではないでしょうか? それでもまだ MS-Access はマシなのです。データベースソフトなのだ から、やはりデータの一意性に気を配っていると言えます。 どうにも始末に負えないのは MS-Excel です。 文字型の項目値だよと指定のあるテキストファイルを読み込んでも、 勝手に数値型だとか果ては日時型に変更して読み込んだり、項目先頭の 空白や数字(文字としての)の 0 (ゼロ) を勝手に削除したりする仕様 は呆れ返るばかりです。 が、データ流用にとって更にすさまじい問題があります(データベース のデータをテキトーな表計算ソフトなんぞで運用しようとする姿勢こそ が問題だとは思うが、表計算ソフトで入力したデータをデータベースの 側に取り込もうとした時に問題が発生するのでは何をか言わんや)。 それは、マイクロソフトのアプリでは項目内(セル内)改行を入力でき る仕様にあって(それはもちろん、重要な事なのですが)、このデータ をテキスト( CSV )形式で書き出す時に素晴らしい問題が発生します。 桐では「強制改行文字」として使う文字を設定できて、データとしては 当該文字が入力されているが、表示する時はこれを改行として扱うとい う仕様になっています(だから、テキストとしてデータを書き出す際に もまず問題は発生しない。使うことがあり得ない文字を強制改行文字に 指定すれば良い----外字がよく使われていた)。 ところが、マイクロソフトのアプリは改行をそのまま書き出すのです。 しかし、1レコード(1行)の終わりが改行というのは、データを相互 交換する際の極めて当たり前の(歴史的)仕様なのですが…… つまり、改行があるからと言って、それが1レコード(1行)の終わり だというコンピューター界の大前提はマイクロソフトが一方的に自分の 勝手で破綻させたのです(他にも MS-WORD がテキストファイルの拡張子 として常識的に使われていた .DOC を自分の会社のワープロのバイナリ ファイルの拡張子に使ってしまい、世界中の人がマイクロソフトの勝手 に立腹したという事件もあったなぁ)。 で、ここでマイクロソフトの真骨頂です。 このような項目内(セル内)改行がある場合に、CSV テキストファイル に保存しようとした時に、 MS-Access と MS-Excel では互換性のない 形式で書き出してしまうのです。 具体的には、項目内(セル内)改行を MS-Access では通常の改行コード (x0D0A)で書き出すのだが、 MS-Excel では 極めて異常な改行コード (x0A これは MS-DOS/Windows では異常コードで、 UNIX 環境での標準 改行コード)で書き出すのです。 その結果、MS-Access でさえも MS-Excel の CSV データを正常に読み 込むことが不可能になっているという「超クソ仕様」です。 で、ここまでがマイクロソフトの問題なのですが、ここに更に管理工学 側の対応が出て来るのです。 何かと言えば、「桐8は MS-Excel の仕様の CSV のみに対応しており、 同じデータベースソフトの MS-Access の CSV データを正常に扱えない」 という極めて信じがたい中途半端な仕様になっているのです(もちろん、 データの中に項目内改行がない場合には全く問題がありませんが)。 通常の処理ではこの壁を乗り越えることはできません。 私自身は「まぁいいや、ハン!」と思っていたのですが、仕事の関係で どうしても大量のこの手のクソデータを一括取り込みする必要に迫られ てしまいました。 (T_T) 仕方ないので、この一括処理を作ったということです。 (あ〜、長い前振りだった (^^;; )。 この辺りの試行錯誤について、詳しくは下記をお読み下さい。 http://www.fuku3.com/~habata/kbbs/kakov8/08884.htm もちろん、桐9以降ではこんな変な仕様は直っていてほしいものです。 ●インストール この圧縮ファイルの中には、$$$$_CSV.CMD , $$$$_CSV.TBL , Choice.WFM , Confirm.WFM, Display.WFM , CSV_CR.Txt の6ファイルが入っています。 この中で稼働に必要なのは、テキストを除く5ファイルだけです。 インストールと言っても、適当に何でもいいからディレクトリを作って、 その中にファイルを移動・複写するだけです。 ●実行してみましょう インストールしたフォルダの「 $$$$_CSV.CMD 」をダブルクリックすれば このシステムが動き始めます(もし関連づけをしていない場合は、桐8 のメニューかファイルパレットから「 $$$$_CSV.CMD 」を開いて下さい)。 - - - 最初に変換したい「 CSV ファイル」を指定する窓が開きます(インストール 先と、 .CSV ファイルの所在は全く独立していてかまいません)。 このシステムで扱う CSV ファイルは MS-Access の吐き出したファイルでも MS-Excel が吐き出したファイルでも問題なく処理が可能です。 拡張子が「 .CSV 」以外だと拒絶します。 後は勝手に作業経過を表示しながら、当該 .CSV ファイルの項目内(セル内) 改行コードを「¶」JIS #2279 (段落記号) に置き換えてしまいます。 置換後の .CSV ファイルを桐8のファイル変換機能で TBL にする際には、 必ず1レコード(1行)の最後のみに改行が入っているので、異常な変換が 発生しなくなります(その筈です (^^;; )。 変換後の TBL ファイルのファイル属性を変更して、 「¶」JIS #2279 (段落 記号) を強制改行文字に設定することをお忘れなく。 尚、変換前の .CSV ファイルは同一フォルダに拡張子「 .ORG 」のファイル として残します(既に同名の .ORG ファイルがある場合は、上書きを行なわ ず、既存の .ORG ファイルが残ったままになります)。 中身に興味のある方、強制改行文字を「¶」JIS #2279 (段落記号) 以外に 変更したい方は、CMD ファイルを再定義で開いて下さい。 ●最後に この「 桐8用 CSV内「強制改行」変換CMD」は Ogo の著作物です。 Ogo は これのバグ訂正やバージョンアップの義務を一切負いませんし、 ユーザーサポートの義務も負いません。 この一括処理を使った結果、生じた損害に関しては Ogo は一切関知し ません。ご自分の責任とリスクにおいてお使い下さい。 この一括処理を使った結果、生じた喜びや感謝や感想は、動作環境と 共に Ogo に伝えてもらえれば、 Ogo は大喜びするでしょう。(^_^) この一括処理を配布するなら、この説明書も添付して下さい。 不特定多数の方への配布でなければ、再譲渡は自由です。 物好きにも転載等をしたい人がいれば、事前に Ogo まで E-Mail でご 連絡下さい。 Ogo mailto:ogou@icity.or.jp URL=http://www.icity.or.jp/usr/ogou/ --------------------------------------------------------------------------- 蛇足 1. これは「フリーソフトウェア」です。代金支払いの義務は全くありません。 ただしよっぽど気にいった方がいらしたら、寄付金をいただくのにやぶさか ではありません。 その際には下記まで送金下さい。領収証が必要なら送付も可です。 もちろん金額に要望なぞはありません。 郵便振り替え 口座番号: 01320-2-15048 加入者名: Office Ogo 2.某社や某社のように、普及した頃合を見計らって、後になってライセンス を強制するような姿勢は人間の信義を踏みにじる最低の行為だと Ogo は 考えています。 また、オンラインその他で「相互扶助」精神でフリーソフト(オープン・ ソースに限定せず)公開やボランティア行為を行なっている人々の精神を 貶めようようとしたり、その行為を妨害しようとしたりするMS社の行動 も顰蹙を買ってしかるべきだと Ogo は考えています。 心当たりのある会社の関係者は、この一括処理を利用することを自発的 にご辞退下さるよう、 Ogo は強く望んでいます。