문제

어떻게 구현할 수 있습니까? diff 스택 오버플로의 질문 개정 기록과 같은 기능?

도움이 되었습니까?

해결책

당신은 여기 있습니다 JavaScript 예제 Diff 알고리즘의 구현

기반 :

P. Heckel, 파일 간 차이를 분리하는 기술통신. ACM, 21, (4), 264--268 (1978).

구현 자체에는 두 가지 기능이 있습니다. 그 중 하나는 사용하기 위해 권장됩니다.

diffString( String oldFile, String newFile )

이 방법은 두 줄을 사용하고 각각의 차이를 계산합니다. 최종 결과는 'NewFile'이 HTML로 표시됩니다 (OldFile의 삭제와 NewFile에 추가).

다른 팁

FreeBSD Diff 유틸리티의 코드를 찾아 기준으로 사용합니다. 라이센스가 이런 종류의 복사를 허용 할 때 바퀴를 재발행 할 필요는 없습니다.

대부분의 알고리즘은 LCS를 기반으로합니다. 가장 긴 일반적인 후속. 효율적인 방식으로 구현하는 것은 분명하지 않습니다. 아마도 다양한 언어에 대해 인터넷에서 다양한 구현을 찾을 수 있습니다.

나는 유일한 방법은 2 줄을 형성하는 각 캐릭터를 비교하는 것입니다. 이 같은 :


void diff(String first,String second) {
   int biggest = (first.length() > second.length()) ? first.length() : second.length();
   for(int i = 0;i < biggest;i++) {
      //compare each char from the longest string with each char from the shorter
      // do something with them if they're not equal
   }
}

이것은 내가 어떻게하는지에 대한 스케치 일뿐입니다. 모든 것은 데이터로 무엇을하고 싶은지에 달려 있습니다.

당신이 원하는 것이 개정 기록이라면, diff에서 시작하는 휠을 재발 명하지 마십시오. 버전 제어에 모든 것을 버리고 차이와 벌목 시설을 사용하십시오. 단순하고 선형 히스토리의 경우 간단한 것입니다 RCS 할 것입니다. 또는 최신 대포를 던져 사용할 수 있습니다. git.

대부분의 Diff 유틸리티는 라인 별 차이를 수행합니다. 스택 오버 플로우는 단어별로 diff를 수행합니다. 그와 같은 것 wdiff 필수적이다. 대부분의 버전 제어 시스템을 사용하면 DIFF 유틸리티를 연결할 수 있습니다. 상자 밖으로, git diff --color-words 여기에서 수행 된 일에 매우 가깝습니다. 설정에 약간의 충격을 주면 아마도 예쁜 웹 페이지로 만들 수있는 무언가를 뱉어내는 것일 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top