기본적으로, 내가하고 싶은 것은 통합 된 diff의 범위 정보를보고주의해야 할 코드 행을 정확히 알아야한다는 것입니다. 예컨대통합 diff에서 범위 정보를 올바르게 구문 분석하려면 어떻게해야합니까?
이 :
@@ -1827,7 +1827,7 @@
이 총 단지 1 라인은 DIFF 3 개 라인 위 변화 아래 보여주기 때문에, 변경되었음을 알려줍니다 -을 (따라서 6 7 = 1) 또한 라인 1830 (즉, 1827 + 3) 나를 가리 킵니다.
이 더 구체적인 정보는 실제로 1830 번 줄에서 줄이 제거되고 (-) 1830 줄에 줄이 추가 (+)되었음을 나타냅니다. -
@@ -878,15 +878,13 @@
이것이 나에게 말하고하는 라인 (881)에서 (878 + 3) (9) 라인 (6 ~ 15) 삭제 된 것입니다 :
또는은 더 분명 다른 사랑하는이 범위 정보를 고려하는 것이 만들려면 그러나 라인 881에서 단지 7 라인이 추가되었다 (13-6).
그래서 정규식이나 다른 루비 문자열 방법을 사용하면 위의 정보를 쉽게 풀 수 있습니까? 내가 쉽게 정보를 당겨 어떻게
예 :
두라인 번호 (즉, 단지 1827 또는 878) 그때 난 상관 실제 인라인 수를 결정 + 3을 추가 할 수 있습니다, 약.두 줄이 항상 동일하지 않을 수도 있기 때문에 둘 다 있어야합니다.- 영향을 줄 수 (일명
7
,15
또는13
직후 위의 예에서,
) - 나는 각각의 작업 (추가 또는 삭제)을 추적해야합니다 어떻게, 그렇게하는 동안 작업의
문자열을 자르고 문자를 직접 시도했습니다. myString[3]
은 나를 -
으로 알려주지 만 라인 번호가 1, 10, 100, 1000, 10000 등일 수 있기 때문에 안정적으로 작동하는 유일한 문자입니다. 따라서 유일한 방법은 문자열을 스캔 한 다음 구문 분석하는 것입니다.
편집 한
내가 시도 것을 보여주기 위해 몇 가지 코드를 추가합니다.
내가@diff_lines
라는 변수에 DIFF의 내용을 가지고 가정 :
@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
정규 표현식을 사용하면 'split'해머를 반복해서 사용하는 것보다 구성 요소를 분리하는 것이 더 나을 것입니다. – tadman