過去の桐井戸端BBS (桐ver.8)
10181 K3データをテキスト的に読み込みしたい 悲しげ 2001/03/10-23:05
タイトルに少々窮してしまいましたが、つまりはこう云うことです。
次のようなデータがあったとします(所謂K3フォーマット)。
-----------------------------------------------------------------
123456,123456,123456,123456,123456,123456
"佐田 守弘","悲しげ","Ogo","hidetake","【多遊】","幅田 浩司"
98765,"佐田 守弘","悲しげ","Ogo","hidetake","【多遊】","幅田 浩司"
------------------------------------------------------------------

訳あって、このデータを桐でひとつの項目にこのままの形で読み込みたいのです
(ただしダブルクォーティションは無くても構わない)。
それにはどうしたらいいか? 読み込みの設定でうまいこと桐様をごまかす方法は無いであろうか?
 これが今回の質問です。(^^;)

以下、数日に渡る試行錯誤の経緯を少々。
▼「K3読み込み」でひとつの項目に読み込むことは絶対的に不可能です。
それそもカンマ区切りで読み込むものですから。
▼では、次に「テキスト読み込み」を使いました。そのために、拡張子を他のもの(例えば".$$$"とか)に
リネームコピーしたものを使いました。
もちろん、区切りはカンマではありませんで、タブまたは任意の有り得ない文字(ギリシヤ文字とか)を使いました。
でも駄目でしたね。
上例で云えば、1行目はそのとおり読み込めます。
2行目はカンマ区切りの左端(即ちこの場合は佐田氏)だけしか読み込めない。(;_;)
3行目は苦心を忍ばせる例でして、これはきちんと右端(幅田氏)まで読み込みできるのです。
この場合、実に「行頭のダブルクォーティション」が重大な役割を果たしているようで、
いかにテキストとして我々が主張しても、桐様は頑固に「この行はK3フォーマットである!」と振る舞うのでした。
この「仕様」は実にv5の時からもそうだったことも確認しました。
ま、仕様なのか不具合なのかは判りませんが、もし後者だったとしたら改善をお願いしたいような気がします。
でも、こんなことをやろうとするのは私だけかも?
▼ここで、何をやろうとしているのかについて触れますと、ここの過去ログに拙稿「桐でGrep」云々があります。
これはログ中での(つまりテキストとしての)一括処理の記述に過ぎないのですが、
これに若干の機能を拡張してそのまま使えるようなひとつの作品として公開して欲しいとの希望が、昨年末に約1名(^^;)からありまして。
それならばもう少し改良を加えて汎用版として作り直してみようと、色々試している内に突き当たった泥沼のひとつがこれでした。
つまり、Grepの対象として、無謀にもK3やCSVも扱おうとしたってことです。
不定多項目検索を避ける形で(^^;)。
▼しょうがないので、暫定的に「ファイル入力」コマンドを使ってみました。
これだとそのまま(ダブルクォーティションすら含んだまま)に取り入れが可能のようです。
(ただ、ダブルコテションを残したままだと後でまた面倒に出くわしそうですから、
取り込んだ時点で文字置換で消しておきますが)と云う訳で、暫定的にこのように扱っていますが、
正道たる「読み込み」において、何かうまい方法は無いであろうか? 
繰り返しになりますが、これが本質問の結論部です。
10184 コンマ区切りを無視して1行に読み込み 佐田 守弘 2001/03/10-23:30
記事番号10181へのコメント
悲しげさん
質問の主旨は、付け替えたタイトルの通りですね。

●表に読み込む方法はないかも
「読み込み 表」コマンドで、カンマ区切りのK3データを表に読み込む事は、できないと思います。
私もしばらく前にこれをいろいろ試しました。で、だめでした。

●最奥義!一括処理エディタに読み込む
何と!。一括処理エディタには、カンマ区切りであっても、またダブルクォーテーションがあっても、
そのままの形で1行単位で読み込んでくれます。
読み込んだ後の処理は、悲しげさんでしたら言うまでもないと思いますが、念の為に付け加えれば、
コピー&ペーストで表の方に貼り付けます。
もちろん、K3ファイルは拡張子をtxtに書き替えておいて下さい。
この種のデータ処理は、私はこの方法で対処しております。

ただし、この場合にもダブルクォーテーションを除去しての読み込みはできません。そのまま読み込まれます。
ですから、後で「#文字置換」関数で処理します。
一度MS-Excelに読み込ませてから、CSVに書き出す方法で、ダブルクォーテーションを外す事も考えられます。

佐田守弘(KS-00119)
10186 Re:K3データのテキスト的読み込み? えむに 2001/03/10-23:49
記事番号10181へのコメント
固定長を適当に取って(下記では100)読み込むのどうでしょう。

ファイル変換 固定長,”x.txt”,AA,表番号=1,改行コード=なし,{[処理]文字列/100}

提示されたサンプルを使っては出来てる様です。
10187 Re:K3データのテキスト的読み込み? 宮城 2001/03/10-23:58
記事番号10181へのコメント
思いつきだけ。いっそ全体を「"」でくくってしまってはどうですか。
何個つけたらいいんでしたっけ?

10188 Re:コンマ区切りを無視して1行に読み込み えむに 2001/03/11-00:08
記事番号10184へのコメント
一括で読み込む方法ですよね。
私もまずこれかと思ってV8で試したんですが、2行目の佐田さんの後ろが切れてしまって・・

V5の一括で読み込み、拡張子を変換(cmd→tbl)すれば簡単かと考えたのですが。
私の場合、V5でもダメでした。
10189 Re:K3データのテキスト的読み込み? ezer 2001/03/11-00:21
記事番号10181へのコメント
悲しげさん いつもお世話になっています。

大先輩にコメントするのはきがひけますが、私なりにコメントいたします。

佐田先生のコメントで思い出したのですが、CMDファイルとTBLファイルは基本的に同じ?
と言うような話をどこかで聞きました。ですからこの様な方法はいかがなものでしょうか?
一括処理エディタで読み込みファイルに保存する。
リネームして*.tblにし、それから目的のファイルの項目に読み込みをする。
この方法だとよみこめそうですが、的外れでしたでしょうか?
かなり勇気がいるものですね、恥をかくのを知りつつコメント差し上げました。

10190 Re:K3データのテキスト的読み込み? えむに 2001/03/11-00:43
記事番号10189へのコメント
V8でも出来るんですね・・・先入観で出来ないかと思ってました。

でも佐田さんが言わないって事は・・・チトまずかったのかな・・(汗)
10191 Re:コンマ区切りを無視して1行に読み込み ezer 2001/03/11-00:54
記事番号10188へのコメント
えむにさん こんにちエゼルと申します。いつもお世話になっております。

私もテストしてみました。テキストの読み込みではえむにさんのコメントの通りだったのですが
開くで*.TXTを読み込むとOKでした。但しレコードは3レコードに読み込まれるようですが?
報告までに。

10192 Re:コンマ区切りを無視して1行に読み込み えむに 2001/03/11-01:37
記事番号10191へのコメント
>えむにさん こんにちエゼルと申します。いつもお世話になっております。

こちらこそ、挨拶もせず申し訳ないです。

>開くで*.TXTを読み込むとOKでした。但しレコードは3レコードに読み込まれるようですが?

わっ、再定義で読み込むんですね。勉強になりました。ありがとうございます。
10193 Re:コンマ区切りを無視して1行に読み込み えむに 2001/03/11-03:03
記事番号10192へのコメント
お恥ずかしい自己レスです。(笑)

WIN化した時、V5の時に可能だったテキストペースのコマンド起動の代替え処置として
「開く」→「再定義」を使って下さいと、某川又さんから聞いてたのを思い出しました。
痴呆化がすすんでるえむにでした。(笑)
10195 Re:コンマ区切りを無視して1行に読み込み ezer 2001/03/11-08:31
記事番号10193へのコメント
えむにさん おはようございます。超初心者のエゼルです。

>WIN化した時、V5の時に可能だったテキストペースのコマンド起動の代替え処置として
>「開く」→「再定義」を使って下さいと、某川又さんから聞いてたのを思い出しました。
>痴呆化がすすんでるえむにでした。(笑)

私は痴呆化が進むほど進化しておりません。ただ、トライしたら出来た!!みたいなものです。
遅くまでお疲れさまでした。昨晩は疲れて寝てしまい、今朝のコメントになりました。
又よろしくお願い申し上げます。

10196 ファイル変換を使用します yasuyukis 2001/03/11-10:25
記事番号10181へのコメント
このテキストファイルの拡張子をFIXにして、
ファイル変換で固定長ファイルとして
ファイル変換すれば可能です。

10198 k3データ1行を1項目に読み込むはファイル変換固定長で 悲しげ 2001/03/11-13:37
記事番号10196へのコメント
どもっ、yasuyukisさん#10196
>このテキストファイルの拡張子をFIXにして、ファイル変換で
>固定長ファイルとしてファイル変換すれば可能です。

おおお、バッチリです。ありがとうございました。
と云う訳で、この方法を採用です。(^^)v
皆さん色々コメントありがとうございました。
以下、部分的にコメントを返しておきます。ツリーを伸ばさないためにマトレスで。

#10184>佐田さん
>質問の主旨は、付け替えたタイトルの通りですね。
う〜ん、このタイトル、かなりいい線行ってるんですが、ちょっとケアレスミスありですね。(^^;)

 誤「コンマ区切りを無視して1行に読み込み」
 正「コンマ区切りを無視して1項目に読み込み」

が正しいです。そのため、#10191でezerさんが混乱しちゃってます。(^^;)
あと、ご承知のとおり、cmd(kev)のファイル構造は基本的にはtblと同じですから、
挙動は#10188でえむにさんが書かれたとおりうまく行かないみたいです。
それと、これは多ファイルの自動検索処理ですから、会話処理で逐一ファイルを開くことは、やはり不採用です。

同じくえむにさん#10186
確かに、拡張子はfixでなければならない訳ではなく、txtでも$$$とかでもいいみたいですね。
さすがにk3のままだと駄目でしたけどね(^^;)。
私は次のようにしてみました。

  ファイル複写 "某.k3","某.$$$"
  ファイル変換 固定長,"某.$$$","某$.tbl"\
         ,改行コード=あり,自動設定=しない\
         ,終了状態=&実行リターン,{[某]文字列/2000}
  ファイル削除 "某.$$$"

#10187宮城さん
>思いつきだけ。いっそ全体を「"」でくくってしまってはどうですか。

試してないけど、これをやるには事前に他アプリ経由(エディタで置換等)しなきゃなんないですよね。
今回は桐オンリーの想定ですんで門前払いです。(^^;)

10199 Re:k3データ1行を1項目に読み込むはファイル変換固定長で 佐田 守弘 2001/03/11-16:15
記事番号10198へのコメント
悲しげさん
>う〜ん、このタイトル、かなりいい線行ってるんですが、ちょっと
>ケアレスミスありですね。(^^;)
> 誤「コンマ区切りを無視して1行に読み込み」
> 正「コンマ区切りを無視して1項目に読み込み」
御指摘の通り、「1項目に読み込む」が正しい表現でした。
なお、CMDファイルに読み込む方法の限界について考えてみました。
きちんと確認した訳ではないのですが、これらのK3形式のファイルをテキストとして、
コマンドファイルに1行を1項目の形で読み込む場合には、先頭のデータ(カンマ区切りの先頭の項目という意味)が
ダブルクォーテーションでくくられているとだめなようですね。
そもそも、一括処理コマンドは、コマンドの中にダブルクォーテーションでくくった記述、
そしてそれらがコンマ区切りで並んでいる記述があるので、読めて当然と思っておりましたし、自分でも使っておりました。
しかし、コマンドの場合、先頭のコマンド名がダブルクォーテーションで囲まれている事はなく、
また私が行って来た例でも、データの先頭項目は数値の場合だった様で、どうやら落とし穴でした。

●固定長の場合
固定長の場合の制限(機能の限界)として、1行が同じ桁数でなければならないと思っていたのですが、
「改行コードあり」を指定すれば大丈夫だったようですね。

佐田守弘(KS-00119)

戻る