カンマ区切りと、改行を入れたい。No.06140
yamasan さん 09/04/27 17:08
 
こんにちは。よろしくお願いします。
一件あたりのデータが448byteのテキストファイルがあります。
データは、半角数字、全角文字、などを含んでいます。
改行で区切られていません。

それをカンマ区切りのテキストファイルにしたいのです。
私が分かっていないので、スイマセンですが、
例えば、以下のように説明させて頂きます。

一件あたりが40byteのデータで、テストしたとします。
"キー操作の記録"、"キー操作の保存"でマクロを見ると、
以下のようになったとします。

 setcompatiblemode 15;
 right 8;
 insert ",";
 right;
 insert ",";
 right 2;
 insert ",";
 right 8;
 insert ",";
 right 21;
 insertreturn;

これを"キー操作の再生"でやると上手くいきます。
そう思ってやっていると、ずれて行ったりしてます。

"キー操作の保存"でマクロにして、マクロ実行すると、
もっと、カンマ位置や改行位置が、思惑よりずれていきます。
どう直して良いのか、分かりません。
データには、全角文字が含まれたパートも多いです。
ですが、決まったバイト数で繋がっています。

(データのない箇所は、半角スペースや全角スペース、
 0などで埋められています。)

もし、お構い無ければ、ファイルの先頭から、最後まで、
指定した間隔(バイト数)でカンマと改行が入っていくようにしたいのですが、
どうか、お教え願えませんでしょうか?よろしくお願い申し上げます。

[ ]
RE:06140 カンマ区切りと、改行を入れたいNo.06141
K'zawa さん 09/04/27 22:59
 
yamasanさん、こんにちは。
K'zawaです。

rightは文字単位での移動になります。
移動しながら座標を確認する…は面倒なので、movetoかmovetolinenoを使うと
よいでしょう。
設定の影響が少ないmovetolinenoを使うとして、

right 8;

movetolineno column + 1 + 8, lineno;

のようにしてみてください。(+1がミソ)

[ ]
RE:06141 カンマ区切りと、改行を入れたいNo.06142
yamasan さん 09/04/28 11:45
 
K'zawaさん、こんにちは。
ありがとうございます。質問者のyamasanと申します。
お教え頂きありがとうございました。

以下のようなことですが、ファイルの先頭から最後まで、
これの繰り返し処理というのをやりたいのですが、
どうなるんでしょうか?

 setcompatiblemode 15;
movetolineno column + 1 + 8, lineno;
 insert ",";
movetolineno column + 1 + 1, lineno;
 insert ",";
movetolineno column + 1 + 2, lineno;
 insert ",";
movetolineno column + 1 + 8, lineno;
 insert ",";
movetolineno column + 1 + 21, lineno;
 insertreturn;


昨日投稿した例は、これで、上手くいっています。

gofiletop
を最初に入れて、繰り返し処理というのを
取り入れたいのですが、お教えくださいませんでしょうか?
是非、よろしくお願い申し上げます。
スイマセンが、お願いできませんでしょうか。

[ ]
RE:06142 カンマ区切りと、改行を入れたいNo.06143
K'zawa さん 09/04/28 13:49
 
yamasanさん、こんにちは。
K'zawaです。


 setcompatiblemode 15;
 gofiletop;
 while ( 1 ) {
  movetolineno column + 1 + 8, lineno;
  insert ",";
  movetolineno column + 1 + 1, lineno;
  insert ",";
  movetolineno column + 1 + 2, lineno;
  insert ",";
  movetolineno column + 1 + 8, lineno;
  insert ",";
  movetolineno column + 1 + 21, lineno;
  insert "\n";
  if ( code == eof ) break;
 }


これが正常に終了するのに必要な条件があります。
元のデータに改行がないことです。
あると[EOFにたどり着けず無限ループに陥ります。

あと、余計なことですが、insertreturnは設定に依存するので変えちゃいました。

[ ]
RE:06143 カンマ区切りと、改行を入れたいNo.06144
yamasan さん 09/04/28 14:53
 
K'zawaさん、ありがとうございました。
完成しました。

書いて貰うと、何となく分かりますが、
全然思いつきません。進歩しません。
スイマセン。勉強不足です。


>元のデータに改行がないことです。

ハイ、仰るとおりの元データです。改行はありません。
念のために考えたのは、先に、改行を削除しておいて・・。
ということを思いつきましたが、現状ではその必要もありません。
ありがとうございました。


>あると[EOFにたどり着けず無限ループに陥ります。

知っておきたいのですが、無限ループに陥った場合は、
Escキーで回避出来ました? Ctrl+Alt+Delでしょうか?
駄目なら、電源ボタンを押します。

>あと、余計なことですが、insertreturnは設定に依存するので変えちゃいました。

ありがとうございました。スイマセン。

[ ]
RE:06144 カンマ区切りと、改行を入れたいNo.06145
K'zawa さん 09/04/28 16:11
 
yamasanさん、こんにちは。
K'zawaです。

>念のために考えたのは、先に、改行を削除しておいて・・。
>ということを思いつきましたが、現状ではその必要もありません。

そのような処理を入れておくと、より安全でしょうね。

>知っておきたいのですが、無限ループに陥った場合は、
>Escキーで回避出来ました? Ctrl+Alt+Delでしょうか?
>駄目なら、電源ボタンを押します。

ウインドウを非表示にしたり、disablebreakを使わない限り、
ESCか、ウインドウをクリックすれば止められます。

[ ]
RE:06145 カンマ区切りと、改行を入れたいNo.06146
yamasan さん 09/04/29 15:07
 
K'zawaさん、こんにちは。
ありがとうございます。

よく分かりました。色々とご親切にありがとうございました。
本当に助かりました。御礼を申し上げます。
今後ともよろしくお願いします。失礼します。

[ ]