Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

Comparar versión de archivo a copiar
#1

Justo en otro hilo Tincho aporto una solución a una cuestión en la que justamente estoy aprendiendo, mi diferencia está en que yo necesito saber si la versión copiada anteriormente es la misma que tengo en la aplicación, el código que uso es este, se que los if los podría anidar pero por ahora lo dejo así para aclarar mis ideas.

Que piensan que es mejor, directamente borrar la versión en el disco y copiar la nueva sin comparar al iniciar la aplicación o desarrollar un algoritmo que haga la comparación, (ergo que vale más, eficaz o eficiente).

El punto es que estos archivos html pueden ser actualizados constantemente (son el manual de uso, el manual de estilo de IM y una guía rápida de tips).

GAMBAS
  1. Public sAppDir As String = User.Home &/ ".local/gbAldusEditor"
  2.  
  3. Public Sub Form_Open()
  4.  
  5.   If Not Exist(sAppDir) Then
  6.     Mkdir sAppDir
  7.  
  8.   If Exist(sAppDir &/ "index1.html") Then
  9.     Return
  10.   Else
  11.     Copy "./index1.html" To sAppDir &/ "index1.html"
  12.  
  13.   If Exist(sAppDir &/ "index2.html") Then
  14.     Return
  15.   Else
  16.     Copy "./index2.html" To sAppDir &/ "index2.html"
  17.  
  18.   If Exist(sAppDir &/ "index3.html") Then
  19.     Return
  20.   Else
  21.     Copy "./index3.html" To sAppDir &/ "index3.html"
  22.  


    ¡Gracias!
#2

Yo creo que es más simple directamente borrar la versión en el disco y copiar la nueva.
De todos modos, si quieres hacer una comparación entre el nuevo y el antiguo archivo html, como los archivos html esencialmente son archivos de texto, puedes Confused cargar ambos archivos y verificar si hay algunas diferencias en el texto.

"Los horizontes perdidos nunca regresan. " (F. Battiato, La stagione dell'amore, 1983)

"Las ondas nunca regresan. " (Genesis: Ripples - A trick of the tail, 1976)
    ¡Gracias!
#3

Tienes razón Vuott, además es una línea contra no sé cuantas para hacer una comparación.
    ¡Gracias!
#4

(07-09-2022, 02:19)alberto-moyano escribió:  Que piensan que es mejor, directamente borrar la versión en el disco y copiar la nueva sin comparar al iniciar la aplicación o desarrollar un algoritmo que haga la comparación, (ergo que vale más, eficaz o eficiente).

Como usuario de un disco SSD yo siempre trato de evitar escribir en el disco todo lo que se pueda, dicho esto si estas constantemente escribiendo la misma cosa, exactamente igual, te diria que no la escribas otra vez y para serciorarte usa una rutina de comparación.
Pero es muy sencillo hacerlo. Al tratarse de un archivo de texto el largo del texto que contiene el archivo es igual al tamaño del mmismo, y ademas si tienes una variable string en gambas que contiene lo que ira a parar al archivo "nuevo" puedes comparar este texto con el tamaño del archivo y si son el mismo no reescribes.

GAMBAS
  1.  
  2.   s = "hola mundo"
  3.  
  4.   z = String.Len(s)
  5.  
  6.   If Stat(User.Home &/ "unarchivo.txt").Size = z + 1 Then
  7.     Message.Info(("Sin cambios"))
  8.   Else
  9.     Message.Info(("Actualizar"))


Pero este método no asegura el exito en caso que solo cambie un caracter.
Entonces este otro es el adecuado.
GAMBAS
  1.   Dim s1 As String
  2.   Dim s2 As String
  3.  
  4.   s1 = "hola mundo"
  5.   s2 = File.Load(User.Home &/ "unarchivo.txt")
  6.  
  7.   If s1 & "\n" = s2 Then
  8.     Message.Info(("Sin cambios"))
  9.   Else
  10.     Message.Info(("Actualizar"))



1 Saludo.
    ¡Gracias!
#5

(07-09-2022, 11:53)tincho escribió:  este otro es el adecuado
Perdóname, no comprendo el porqué. Sad

"Los horizontes perdidos nunca regresan. " (F. Battiato, La stagione dell'amore, 1983)

"Las ondas nunca regresan. " (Genesis: Ripples - A trick of the tail, 1976)
    ¡Gracias!
#6

(07-09-2022, 12:08)vuott escribió:  Perdóname, no comprendo el porqué. Sad

Si por ejemplo:
s1 = <html><p>Norberto Aníbal Napolitano, popularmente conocido como Pappo</p></html>
s2 = <html><p>Norberto Aníbal Napolitano. popularmente conocido como Pappo</p></html>
Donde solo cambia un caracter, la coma por el punto, el primer algoritmo dara por iguales ambos contenidos cuando no lo son.

1 Saludo.
    ¡Gracias!
#7

(07-09-2022, 12:16)tincho escribió:  el primer algoritmo dara por iguales ambos contenidos cuando no lo son.
Estoy de acuerdo, pero Confused no comprendo porqué en el caso de este tu ejemplo (...coma y punto) el otro es mejor.

"Los horizontes perdidos nunca regresan. " (F. Battiato, La stagione dell'amore, 1983)

"Las ondas nunca regresan. " (Genesis: Ripples - A trick of the tail, 1976)
    ¡Gracias!
#8

(07-09-2022, 12:23)vuott escribió:  Estoy de acuerdo, pero Confused no comprendo porqué en el caso de este tu ejemplo (...coma y punto) el otro es mejor.

[Imagen: qa96cLK.gif]

1 Saludo.
    ¡Gracias!
#9

Hola Tincho, gracias por tu ejemplo. muy didáctico.

Justamente por la cantidad de veces que estoy escribiendo en disco [1] es que uso un disco SSD para el sistema y los programas y un disco de plato (de 7200 revoluciones) como bodega para los trabajos.

Saludos y gracias por las enseñanzas.


[1] hago unos 3 libros por mes, tienen cerca de 1.000.000 de caracteres en promedio cada uno a los que estoy constantemente codificando en LaTeX, en cada proceso de compilación con LuaLaTeX se autogeneran cerca de 10 archivos auxiliares que se reescriben en cada compilación (entre ellos el PDF que pesa varios megas) y realizo unas 20 compilaciones durante el trabajo de edición.
    ¡Gracias!
#10

De nada.

1 Saludo.
    ¡Gracias!


Posibles temas similares…
Tema / Autor Respuestas Vistas Último mensaje

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)