Pregunta

¿Cómo puedo implementar una función diff , como el historial de revisión de preguntas de Stack Overflow?

¿Fue útil?

Solución

Aquí tiene un ejemplo de javascript de la implementación de un algoritmo de diferencias.

Basado en:

P. Heckel, una técnica para aislar diferencias entre archivos Com. ACM, 21, (4), 264--268 (1978).

La implementación, en sí misma, tiene dos funciones, una de las cuales se recomienda usar:

diffString( String oldFile, String newFile )

Este método toma dos cadenas y calcula las diferencias en cada una. El resultado final es el 'newFile' marcado con HTML (para significar tanto eliminaciones del oldFile como adiciones al newFile).

Otros consejos

Encontraría el código para la utilidad de diferencia de FreeBSD y lo utilizaría como línea de base. No tiene sentido reinventar las ruedas cuando la licencia permite este tipo de copia.

Si lo que desea es el historial de revisiones, no reinvente la rueda comenzando en diff. Simplemente coloque todo en el control de versiones y use sus funciones de diferenciación y registro. Para una historia lineal simple, algo tan simple como RCS servirá. O puede lanzarle el último cañón y usar git .

La mayoría de las utilidades de diferenciación hacen una diferencia de línea por línea. Desbordamiento de pila hace una diferencia de palabra por palabra. Para eso es necesario algo como wdiff . La mayoría de los sistemas de control de versiones le permiten conectar la utilidad diff. Fuera de la caja, git diff --color-words se acerca notablemente a lo que se hace aquí. Con un poco de manipulación de la configuración, probablemente pueda hacer que escupe algo que luego puede convertir en una bonita página web.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top