• ベストアンサー

テキストファイルの差分を取得するには?

2つのテキストファイルの差分を取得したいと思っています。 rubyを使用してdiffコマンドの様な事は可能でしょうか? テキストを1行ずつ配列に入れて - で比較していく方法を使用してみたのですが、途中で行数が変わるような変更が起こっていると上手く動作できませんでした。 理想としては一部が変更された行、追加された行、削除された行といった物を取得したいです。 もし上手く解決出来る様な手法がありましたら、ご教示お願いいたします。

  • Ruby
  • 回答数2
  • ありがとう数0

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

  • ベストアンサー
  • ki073
  • ベストアンサー率77% (491/634)
回答No.2

diffは結構高度なことをやっているので、同じようなことをやるのは大変です。 それこそRubyからdiffを呼び出せば良いのですが、 それか、diff-lcsというのがありますので、それを使われてはいかがでしょうか。 http://rubygems.org/gems/diff-lcs rubygemsでインストールできます。他にもdiffから始まるものがたくさん有りますので、利用可能かもしれません。

その他の回答 (1)

回答No.1

open('test1.txt').readlines - open('test2.txt').readlines readlinesで配列として格納し差分を取得すればよろしいかと?

関連するQ&A

  • shellのコマンド deffの差分の行数を出力する

    diff結果の差分の行数を出力するコマンドを教えてください。 たとえばaaa.txtとbbb.txtのdiff比較をした場合 aaa.txtから見たbbb.txtとの差分の行数 bbb.txtから見たaaa.txtとの差分の行数 よろしくお願いいたします。

  • 1行単位で差分を出力するテキスト比較ソフト

    1行単位で差分を出力するテキスト比較ソフトを探してます。 2つのファイルで差異を比較するDIFFソフトは多いですが、 比較対象行の上下の順番が違うとうまく差分を検出してくれません。 処理速度は遅くなると思いますが、2つのファイル間で1行ごとに 差分を表示し、保存できるソフトがあれば紹介してください。 よろしくお願いします。

  • 拡張子を指定して、ファイルの差分を取る方法

    WindowsXPです。 フォルダを比較して、ファイル(テキストファイル)の差分をとる方法をお教えください。 ここで重要な条件は、比較する拡張子を指定できなければなりません。 例えば、拡張子が、txtのファイルのみとか、txtとcfのみなど。 サブディレクトリの中のファイルも比較できなければなりません。 どうも、このような場合には、diffというものを使うらしいのですが、 コマンドプロンプトでdiffと打っても 「'diff' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 というだけで、使えないようです。

  • テキストファイルを比較して差分だけを抜き出して表示させたい。

    2つのテキストファイルを比較をして、異なるデータのみを抽出して(できれば別のファイルで)表示させたいのですが、よいエディタやコマンドなどありますでしょうか?? サクラエディタを使って差分表示をさせたのですが、ほぼすべての行に「!」が表示されてしまい、困っています。よろしくおねがいいたします。

  • Mac対応のテキスト差分比較ツール

    Windowsのテキスト差分比較ツールで『ちゃうちゃう』(http://bit.ly/kENKwy)というフリーウェアがありますが、 Macにも同じ様な性能の差分比較ツールは無いのでしょうか? 自分でも探してみましたが、xcodeを使用したターミナルコマンドなど、 "異なるテキストファイル同士の差分を比較して表示する" という機能のものが殆どの様でした。 上記『ちゃうちゃう』の様に ・プレーンテキスト同士のテキスト差分比較も可能 ・差分度合を色分け表示 といった機能を使えるものは存在しないのでしょうか? Macの用途や指向として必要とされていないのかもしれませんが。。。 もし上記機能を持ったツールをご存知の方いらっしゃったら、 ご教示くださると幸いです。 ※対象はMac OS Xとなります。 ベストアンサーの判断基準としては 1. プレーンテキストの差分比較 2. 差分度合色分け表示可 となります。 オープンソース/フリーウェアであれば尚優良と判断させて頂きます。 お力添え、何卒宜しくお願い致します。

    • ベストアンサー
    • Mac
  • スクリプトでtxtファイルがブランクかを判別したい

    シェルスクリプトの勉強をしています 比較先の差分のみを抽出するのに以下のコマンドを使用しており、 差分があってもなくてもdiff_file.txtを出力しています。 diff hikaku_moto.txt hikaku_saki.txt | grep -E '^<' | perl -pe 's/^<\s//g' > diff_file.txt 比較をして出力したdiffファイルがブランクであれば次の処理を流す。 ブランクでなければ処理を止めるようなことをしたいのですが、ファイルの中身がブランクかどうかの 判別方法がわからず… テキストファイルの中身がブランクかどうかの判別方法を教えていただけますでしょうか? よろしくお願い致します

  • テキスト比較コマンドのdiffについて

    unixコマンドにdiffというのがありますね。2つのテキストファイルを比較してその違いを出力するというものです。このコマンドの意味がわからないところがあります。 テキストAとBの比較とは、 1 両者が全く同じかどうかを比較するということなのか、 2 テキストAとBに含まれている各行を取り出してどこかに一致する行があるかどうかをチェックするということなのか 3 あるいはそれ以外の意味 どのようなことを意味するのでしょうか。 1だったら、1行付け加わっただけでそれ以降が同じものであったとしても全部検索対象となり出力されます。 2だったら、何をしたことになるのでしょうか。全く同じ内容で行構成を入れ替えたら検索に引っかからないことになります。 私の希望としては1なのですが、そうするとわけがわかなないぐらい多くの出力結果となることが多いはずです。オプションなどで対応するとは思いますが、基本的には何をするコマンドなのでしょうか。 よろしくお願いします。

  • diffコマンドにてテキスト出力

    こんばんは。教えてください! 以下のような2つのファイルがあるとします。 ・aaa.txt abc111 abc222 abc333 ・bbb.txt abc333 abc444 これを比較して、比較結果をテキスト出力したいです。 テキスト出力したい比較結果は (1)重複しているもの全てテキスト出力 (2)aaa.txtのみにあるものをテキスト出力 (3)bbb.txtのみにあるものをテキスト出力 また、(1)~(3)は別々のファイルに出力したいです。 diffコマンドで、 diff a.txt b.txt >> c.txt とすると、 1つのテキストファイル(c.txt)に (1)~(3)すべてが書かれてしまいます。 環境は、windows XPにてCygwinを使用しています。 diffコマンドでなくても構いません。 宜しくお願いします。

  • PHPで、OSに依存せずにテキストの差分を取得する方法を探しています。

    PHPで、OSに依存せずにテキストの差分を取得する方法を探しています。 現在作成しているウィキ(配布用)に搭載するために探しています。 PEARは、スクリプトを不特定多数が利用するので、可能な限りインストールしない方向で考えています。 理想の表示はMediaWikiのそれです。でも、実装方法が分かりません。 何か良い手段は無いでしょうか。

    • ベストアンサー
    • PHP
  • バッチでテキストファイルから任意の行のみ取得したい

    batファイルを作成していて、 txtから特定の行のみをとりだし、変数に入れたいです。 どうもよくわからないので質問したいと思います。 まず以下の様なテキストファイルがあります。 ------------------- 111 222 333 ------------------- 実際の値、行数は違いますが、こんな感じに文字列が複数行並んでいます。 行いたい動作は、 ----------------------------------------- 1.テキストファイルの1行目を変数Textに入れる(set Text=111) 2.変数Textを使用し色々処理をする 3.テキストファイルの2行目を変数Textに入れる(set Text=222) 4.変数Textを使用し色々処理をする ----------------------------------------- コレを繰り返します。 2と4は同じ動作ですので、行数のカウンタを設定しループさせる予定です。 n行目を全て取り出す方法がわかれば行けると思うのですが、 どうも見つかりません。ご存知の方がいればお教え願いたいと思います。

専門家に質問してみよう