基本的には、統合された差分の範囲情報を見て、どのコード行に注意を払うべきかを正確に知ることだけです。例えば統合diffで範囲情報を正しく解析するにはどうすればよいですか?
、これ:
@@ -1827,7 +1827,7 @@
これは合計で1つだけの行はdiffが3つのラインの上方及び変化の下示すために、変更されたことを私に告げる - それを(SO 7 6 = 1)、及びまた、私は1830行目(つまり1827 + 3)を指しています。
このような特定の範囲情報は、実際に、行1830で行が削除され( - )、行1830で行が追加(+)されたことを伝えます。
以上明らかに別の差分のため、この範囲の情報を検討することにする:
@@ -878,15 +878,13 @@
これは私に言っている何がライン881(+ 3 878)で9行が(15から6)を削除されたということです、行881では7行しか追加されなかった(13-6)。
質問は、正規表現やその他のRuby文字列メソッドを使用して、上記の情報を簡単に引き出すことができますか?
すなわちどのように私は簡単にこの情報を引き出します:
私はその後、私は気にし、実際のインライン数を決定するために+ 3を追加することができます両方行番号(つまり、ちょうど1827または878)、約。両方の行が常に同じであるとは限らないため、両方とも一致する必要があります。- 影響を受けた行数(別名
7
、15
または13
直後に上記の例では,
) - 私はそれぞれの操作(追加または削除)を追跡することを確認しないか、それを行う一方で操作の
文字列をスライスして文字に直接移動しようとしました。 myString[3]
これは私に-
を与えますが、行番号が1,10,100,1000,10000などになる可能性があるので、それは確実に機能する唯一の文字です。したがって、唯一の方法は文字列をスキャンして解析することです。
編集1
は、私が試みているかを示すためにいくつかのコードを追加します。
は私が@diff_lines
という変数に差分の内容を持っていると仮定します
@diff_lines.each do |diff_line|
if diff_line.start_with?("@@")
del_line_num_start = diff_line.split(/@@ /).second.split.first.split(/-/).second.split(/,/).first.to_i + 3
num_deleted_lines = diff_line.split(/@@ /).second.split.first.split(/-/).second.split(/,/).second.to_i - 6
add_line_num_start = diff_line.split(/@@ /).second.split.second.split(/\+/).second.split(/,/).first.to_i + 3
num_added_lines = diff_line.split(/@@ /).second.split.second.split(/\+/).second.split(/,/).second.to_i - 6
あなたは、上記の作品を見ることができるように....見て非常に恐ろしいですと明らかに非常にではありませんドライ。
理想的には私は同じことを達成したいと思っていますが、よりきれいです。
ここでの解析の目標は明確ではありませんが、入力と期待される出力の点で構造化した方が良いでしょう。また、試したことを示すコードはありません。ここでの質問。 – tadman
@tadmanコードで更新された質問を参照してください。 – marcamillion
正規表現では、そのことをコンポーネントに分割して繰り返し、分割したハンマーで繰り返し打ち込む方がよいでしょう。 – tadman