سؤال

وكيف يمكنني تنفيذ وظيفة diff، مثل التاريخ مسألة مراجعة تجاوز المكدس على ذلك؟

هل كانت مفيدة؟

المحلول

لديك هنا جافا سكريبت سبيل المثال لتنفيذ خوارزمية فرق.

وبناء على:

P. Heckel، وهناك تقنية لعزل الخلافات بين الملفات بالاتصالات. ACM، 21، (4)، 264--268 (1978).

وتنفيذ، في حد ذاته، وظيفتين، واحدة من التي يوصى للاستخدام:

diffString( String oldFile, String newFile )

وتأخذ هذه الطريقة سلسلتين ويحسب الاختلافات في كل منهما. والنتيجة النهائية هي "newFile" التي تم ترميزها باستخدام HTML (للدلالة على حد سواء الحذف من oldFile وإضافات على newFile).

نصائح أخرى

وأود أن تجد رمز للديف فري واستخدام ذلك قاعدة أساسية. ليس هناك نقطة في اختراع إعادة عجلات عندما يسمح الترخيص لهذا النوع من النسخ.

وتستند معظم خوارزميات على 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
   }
}

وهذا هو مجرد رسم لكيفية أود أن تفعل ذلك. كل شيء يعتمد على ما تريد القيام به مع البيانات.

إذا ما كنت أريده هو تاريخ المراجعة، لا إعادة اختراع العجلة ابتداء من الساعة فرق. مجرد رمي كل شيء في التحكم في إصدار واستخدام مرافق فرق وقطع الأشجار لها. لبسيط، وخطي التاريخ شيء بسيط مثل RCS ستفعل. أو يمكنك رمي أحدث مدفع على ذلك واستخدام بوابة .

ومعظم المرافق فرق القيام فرق خط سطرا. تجاوز سعة مكدس يقوم فرق كلمة بكلمة. لذلك شيء من هذا القبيل wdiff هو ضروري. تتيح معظم أنظمة التحكم في الإصدار قمت بتوصيل في ديف. من خارج منطقة الجزاء، git diff --color-words يقترب بشكل ملحوظ إلى ما يحدث هنا. مع قليل من تافه مع إعدادات يمكنك الحصول على الارجح لبصق شيء يمكنك جعل ثم في صفحة ويب جميلة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top