ファイルを結合するマクロNo.06099
zoom さん 09/04/07 01:11
 
2つのファイルを結合するマクロが作りたいです。
どなたか知恵を貸してください。
私がしたい事は以下の例の通りです。

A.txtの内容
1111,aaaa
2222,bbbbb
3333,ccccccc

B.txtの内容
xxxxx
yyyyyyy
zzzzzzzzz

マクロを実行後
(A.txtでマクロを実行し、A.txtとB.txtを","で結合する)
1111,aaaa,xxxxx
2222,bbbbb,yyyyyyy
3333,ccccccc,zzzzzzzzz
※","区切りの文字列の長さは可変長
※行数は同じ
※A.txtの各行末に","を追加し、B.txtの同じ行の内容を行末に追加する

[ ]
RE:06099 ファイルを結合するマクロNo.06100
Iranoan さん 09/04/07 02:20
 
 zoom さん今日は、Iranoan です。
> 2つのファイルを結合するマクロが作りたいです。
<snip>
> A.txtの内容
> 1111,aaaa
<snip>
> B.txtの内容
> xxxxx
<snip>
> 1111,aaaa,xxxxx
 秀丸でも出来ますが、どうしても秀丸でやる必要はあるのでしょうか?
 例えば UNIX 系のツールにはこのような列を単位で取り出したり、結合する
プログラムが有ります。
 これではコマンド・ラインで使い辛いという事であれば、表計算ソフトでや
れば最も簡単に出来ます。
 おそらく編集したいのは、CSV ファイルだと思うのですが、データの区切り
としてではなく、データの中身に「,」があったときのことを考えると、非常
に厄介なんですよね。しっかりした規格も無いし。

[ ]
RE:06100 ファイルを結合するマクロNo.06107
zoom さん 09/04/08 22:28
 
Iranoanさんコメントありがとうございます。
> 秀丸でも出来ますが、どうしても秀丸でやる必要はあるのでしょうか?
->テキストファイルは秀丸だけで使えればいいので、出来れば
 秀丸上で出来ないかと考えた次第です。
  マクロを工夫するとそういったこった事も出来るのかと...
> 例えば UNIX 系のツールにはこのような列を単位で取り出したり、結合する
>プログラムが有ります。
> これではコマンド・ラインで使い辛いという事であれば、表計算ソフトでや
>れば最も簡単に出来ます。
->専用ツールを色々探して試すのも、操作方法が違ったりとか
  いい所や悪い所もあるかと思います。
 それならば使い慣れた秀丸の方が助かると思いました。
> おそらく編集したいのは、CSV ファイルだと思うのですが、データの区切り
>としてではなく、データの中身に「,」があったときのことを考えると、非常
>に厄介なんですよね。しっかりした規格も無いし。
->特にCSVファイルではないです。例が悪くてすいません。
  1行の先頭から最後までを結合したいのです。
  ","が入っていても特に意識しません。
  EXCELだと読み込み時に"0"がカットされたりと、内容が変更
  される時もあるので敬遠してます。

とりあえず秀丸マクロには向かない作業との事なので断念します。
他に何かいいツールがないか気長に探してみようと思います。
ありがとうございました。


[ ]
RE:06107 ファイルを結合するマクロNo.06109
Iranoan さん 09/04/08 22:58
 
 zoom さん今日は、Iranoan です。
 すいません。
 何か誤解させてしまった様で。

> ->テキストファイルは秀丸だけで使えればいいので、出来れば
>  秀丸上で出来ないかと考えた次第です。
>   マクロを工夫するとそういったこった事も出来るのかと...
 出来ますよ。

> 他に何かいいツールがないか気長に探してみようと思います。
との事ですが、一応書いてみました。例外処理は何もしていません。
> ※行数は同じ
はもちろんのこと、
・最後は連続の改行 (行頭の [EOF]) で終わっているとする
・開いているのは、結合しようとしている 2 だけだとする
・アクティブなのは、A.txt とする
の条件で、次のマクロです。一行が短い事が解っていたりすると、もっと単純、
高速な方法は有りますが。
//------------------------------------------------------------
#main = hidemaruhandle( 0 );
showwindow 0;
#sub = hidemaruhandle( 1 );
gofiletop;
setactivehidemaru #sub;
showwindow 0;
gofiletop;
while( 1 ){
  if( code == eof )break;
  selectline;
  copy;
  setactivehidemaru #main;
  golineend2;
  insert ",";
  paste;
  delete;
  setactivehidemaru #sub;
  movetolineno 1, lineno + 1;
}
setactivehidemaru #main;
showwindow 1;
setactivehidemaru #sub;
showwindow 1;

[ ]
RE:06109 ファイルを結合するマクロNo.06116
zoom さん 09/04/10 11:02
 
Iranoanさんコメントありがとうございます。

>> 他に何かいいツールがないか気長に探してみようと思います。
>との事ですが、一応書いてみました。例外処理は何もしていません。
->良さそうなツールは見つかりませんでした。

書いていただいたマクロは私の環境ではうまく動作せず、一部修正して希望通りの動
作になりました、ありがとうございます。
※なぜか1行目にどんどん追加されていってました。
  動作環境設定の違いによる影響だと思います。
以下は参考までに修正したマクロです。

#main = hidemaruhandle( 0 );
showwindow 0;
#sub = hidemaruhandle( 1 );
gofiletop;
setactivehidemaru #sub;
showwindow 0;
gofiletop;
#i=0;
while( 1 ){
  if( code == eof )break;
  moveto 0 ,#i;
  selectline;
  copy;
  setactivehidemaru #main;
  moveto 0 ,#i;
  golineend2;
  insert ",";
  paste;
  golineend2;
  delete;
  setactivehidemaru #sub;
  #i = #i + 1;
}
setactivehidemaru #sub;
showwindow 1;
setactivehidemaru #main;
showwindow 1;

[ ]
RE:06116 ファイルを結合するマクロNo.06121
Iranoan さん 09/04/10 22:20
 
 zoom さん今日は、Iranoan です。
> ※なぜか1行目にどんどん追加されていってました。
>   動作環境設定の違いによる影響だと思います。
 どの設定なんでしょうね。
 御存知の方は教えてください。->ALL

 取り敢えず、そちらで修正できたとのことで良かったのですが、
>   moveto 0 ,#i;
これだと、折り返しがあると、おかしくなりますよ。これが理由で、
>   movetolineno 1, lineno + 1;
としたのですが....

[ ]
RE:06121 ファイルを結合するマクロNo.06122
K'zawa さん 09/04/10 23:30
 
Iranoanさん、こんにちは。
K'zawaです。

>>   動作環境設定の違いによる影響だと思います。
> どの設定なんでしょうね。
> 御存知の方は教えてください。->ALL

貼り付け後のカーソル位置でしょう、たぶん。
今回は行末だからgolineend2でなんとかなるけど、
そうでなかったらレジストリいじるしかないのかなあ…。
setcompatiblemodeで変えられるようにしてほしいかも。

[ ]
RE:06122 ファイルを結合するマクロNo.06123
Iranoan さん 09/04/11 00:03
 
 K'zawa さん今日は、Iranoan です。
> 貼り付け後のカーソル位置でしょう、たぶん。
 あ、そうか。そういえば、「貼り付け後のカーソル位置:」に、
・先頭のまま
・最後に移動
がありましたね。有難うございます。

 という事は、
>   delete;
の前に
  if( !column )movetolineno 1, lineno + 1;
を入れれば良いのかな。遅くなるけど。

[ ]
RE:06122 ファイルを結合するマクロNo.06131
秀丸担当 さん 09/04/13 10:33
 

貼り付け後のカーソル位置も、setcompatiblemodeにあったほうがいいと思いま
す。
V8.00を出すときには検討したいと思います。

[ ]