• ベストアンサー

2個のファイルの行ごとのマージ

以下のようなテキストファイルがあるとします。 a.txt(以下内容) 1111 1111 1111 1111 b.txt(以下内容) 2222 2222 2222 2222 この2個のファイルを行ごとにマージして以下のような ファイルにしたいのです。 (2個のファイルの行数は同じとします。) 1111 2222 1111 2222 1111 2222 1111 2222 フリーのテキストエディタやEXCEL(2個の列としてあつかう) 等を使用して上記のことができるでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.3

No.2です。別解です。 ・ExcelのA列にa.txtの内容をコピー ・B列にb.txtの内容をコピー ・A1を選択し、Ctrl+Endでデータの件数を確認する ・データの件数が100行ならば、左上の名前ボックス(A1とか書いてある場所)に「C1:C100」と入力してEnter ・C1:C100が選択されるので、F2キーを押し、以下の式を貼り付け =OFFSET($A$1,INT((ROW()-1)/2),MOD(ROW()-1,2)) ・Ctrl+Enterを押すと、この式が選択範囲に入力され、C列がマージされた結果になる。 ・C列を選択してコピーし、テキストエディタに貼り付け こっちの方が手っ取り早いかな?

iwa111
質問者

補足

2個もご回答ありがとうございました。 No.3の方法でやってみました。 私の知らない関数でしたので まだ理解できていませんが 確かに思ったようなファイルが作成できました。

その他の回答 (3)

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.4

★『perl』、『Excel』、『VBA』、『VBScript』などいろいろなもので出来ます。 ・『a.txt』や『b.txt』のサイズにもよりますが、簡単な方法ならばフリーソフト  でクリップボード関連の『ClipFan』で出来ます。 ・この『ClipFan』というソフトの『行融合』機能ボタンで『後の行間に挟み込む』  という設定があるので、これを利用すれば『a.txt』と『b.txt』を交互に挟み込んだ  (行融合された)テキストが出来ます。 ・この編集されたテキストをクリップボードへコピーしてファイルに書き込めば出来ます。 ・もしも、1回限りならばこの方法が簡単だと思います。  複数のファイルを同様な方法で処理する場合は大変ですので、『perl』や『VBScript』  でスクリプトを作って実行させる方が良いでしょう。 ・『perl』については回答者 No.1 さんがサンプルを作ってくれたようです。  『VBScript』でも同様な処理が行えます。→『Visual Basic』カテゴリで検索すれば  似たような処理が検索できると思います。→試していませんが…。 最後に: ・簡単な方法としてフリーソフトの『ClipFan』を紹介します。 ・下の『参考URL』からダウンロードできます。 ・操作方法は、  (1)『a.txt』をメモ帳などで開く。  (2)『すべて選択(A)』でクリップボードへコピーする。  (3)『ClipFan』をここで起動する。  (4)『b.txt』をメモ帳などで開く。  (5)『すべて選択(A)』でクリップボードへコピーする。  (6)『行融合』ボタンの隣にある『設定』ボタンを押す。  (7)『後の行間に挟み込む』を選択する。  (8)『閉じる』ボタンを押す。  (9)『行融合』ボタンを押す。  (10)『クリップボードへの書き込み』ボタンを押す。←ここでクリップボードにテキストが入る。  (11)メモ帳などを起動して『貼り付け』を選択する。←フリーのテキスト・エディタなどでもOK。  (12)適当なファイルで保存して出来上がり。 ・以上。おわり。→テキスト・マージの参考にして下さい。

参考URL:
http://www2u.biglobe.ne.jp/~shunbook/omocha/clipfan.htm
iwa111
質問者

お礼

フリーのソフトは探したのですが このソフトは探すことができませんでした。 やってみたら確かにできました。 どうもありがとうございました。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.2

Excelでやる方法ならば、 ・Excelを起動 ・Sheet1にa.txtを読み込む。(あるいはエディタで開いて全文コピーしたものを貼り付ける) ・B1に1、B2に2と入力し、データの最後まで「1,2,3,4,…」とコピーして連番をつける。 ・C1に1と入力して、データの最後の行までコピーする。 ・Sheet2にb.txtを読み込む ・B1に1,B2に2と入力し、データの最後まで「1,2,3,4,…」とコピーして連番をつける。(a.txtと同じ行なのであれば、Sheet1のB列をコピーした方が手っ取り早い) ・C1に2と入力して、データの最後の行までコピーする。 ・Sheet2の表全体をコピーして、Sheet1のデータの下に貼り付ける。 ・Sheet1のA列~C列を選択して「データ」>「並べ替え」で最優先されるキーをB列、2番目に優先されるキーをC列に指定して並べ替えを実行。 ・B列、C列を削除し、Sheet1を保存。(あるいはCtrl+Aで全文選択してエディタにコピー) という手順でできないでしょうか。

  • ballville
  • ベストアンサー率47% (233/487)
回答No.1

perlを使ってはどうでしょう。 #!/usr/bin/perl open(A,"< a.txt"); open(B,"< b.txt"); @a_line = <A>; @b_line = <B>; close A,B; $max = $#a_line; if ( $b_line > $max ){ $max = $#b_line;} for ( $i = 0; $i <= $max; $i++ ) { print $a_line[$i]; print $b_line[$i]; }

iwa111
質問者

お礼

早速のご回答ありがとうございます。 perlは使ったことが無いので予期してなかったのですが 何となく内容は分かりました。

関連するQ&A