alberto-moyano   07-09-2022, 02:19
#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).

Código:
Public sAppDir As String = User.Home &/ ".local/gbAldusEditor"

Public Sub Form_Open()

  If Not Exist(sAppDir) Then
    Mkdir sAppDir
  Endif

  If Exist(sAppDir &/ "index1.html") Then
    Return
  Else
    Copy "./index1.html" To sAppDir &/ "index1.html"
  Endif

  If Exist(sAppDir &/ "index2.html") Then
    Return
  Else
    Copy "./index2.html" To sAppDir &/ "index2.html"
  Endif

  If Exist(sAppDir &/ "index3.html") Then
    Return
  Else
    Copy "./index3.html" To sAppDir &/ "index3.html"
  Endif

End
Última modificación: 07-09-2022, 02:21 por alberto-moyano.
vuott   07-09-2022, 02:39
#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.
Última modificación: 07-09-2022, 11:34 por vuott.

« Los horizontes perdidos nunca regresan. » (F. Battiato, 1983)

« Las ondas nunca regresan. » (Genesis: Ripples, 1976)

« Vita non suavis esse potest, nec Mors amara. »  (...vuott)
alberto-moyano   07-09-2022, 03:44
#3
Tienes razón Vuott, además es una línea contra no sé cuantas para hacer una comparación.
tincho   07-09-2022, 11:53
#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.

Código:
  Dim s As String
  Dim z As Integer

  s = "hola mundo"

  z = String.Len(s)

  If Stat(User.Home &/ "unarchivo.txt").Size = z + 1 Then
    Message.Info(("Sin cambios"))
  Else
    Message.Info(("Actualizar"))
  Endif
Pero este método no asegura el exito en caso que solo cambie un caracter.
Entonces este otro es el adecuado.
Código:
  Dim s1 As String
  Dim s2 As String

  s1 = "hola mundo"
  s2 = File.Load(User.Home &/ "unarchivo.txt")

  If s1 & "\n" = s2 Then
    Message.Info(("Sin cambios"))
  Else
    Message.Info(("Actualizar"))
  Endif
Última modificación: 07-09-2022, 12:00 por tincho.

1 Saludo.
vuott   07-09-2022, 12:08
#5
(07-09-2022, 11:53)tincho escribió: este otro es el adecuado
Perdóname, no comprendo el porqué. Sad
Última modificación: 07-09-2022, 12:09 por vuott.

« Los horizontes perdidos nunca regresan. » (F. Battiato, 1983)

« Las ondas nunca regresan. » (Genesis: Ripples, 1976)

« Vita non suavis esse potest, nec Mors amara. »  (...vuott)
tincho   07-09-2022, 12:16
#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.
vuott   07-09-2022, 12:23
#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, 1983)

« Las ondas nunca regresan. » (Genesis: Ripples, 1976)

« Vita non suavis esse potest, nec Mors amara. »  (...vuott)
tincho   07-09-2022, 12:54
#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.
alberto-moyano   07-09-2022, 13:27
#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.
tincho   07-09-2022, 13:50
#10
De nada.

1 Saludo.
  
Usuarios navegando en este tema: 3 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.