• Martes 31 de Marzo de 2020, 14:31

Autor Tema:  Filesystemobject,textstream Etc  (Leído 816 veces)

Dieguinho.

  • Miembro MUY activo
  • ***
  • Mensajes: 163
    • Ver Perfil
Filesystemobject,textstream Etc
« en: Miércoles 20 de Junio de 2007, 15:58 »
0
Hola, tengo un problema, espero que alguno me pueda dar una mano.

Tengo una aplicacion que genera un archivo de texto a modo de log de errores y otras informaciones que me son utiles.
Como este archivo tiende a crecer rapido todos los dias la aplicacion realiza una depuracion y deja solo la informacion de los ultimos dias.
Esto lo hago usando los objetos filesystemobject, file y textsream.
Mas o menos hago lo siguiente:
Abro el archivo, lo recorro linea por linea y si la fecha que tiene la linea (en los primeros caracteres pongo la fecha y la hora) esta dentro del periodo que me quiero quedar (en gral me quedo con los ultimos 2 dias) la grabo en un string y si no paso a la siguiente.
De esta manera al terminar de recorrer todo el archivo en el string me queda solo lo que necesitaria, asi que lo grabo al archivo log reemplazando todo lo que tiene y listo.

Ahora el problema que me paso hace poco fue que al depurar el archivo la parte que me servia era muy grande y, por lo que supongo yo, al acumular tanta info en el string hizo que se me colgase la aplicacion (el administrador de tareas del windows me mostraba que estaba usando casi el 100% del cpu). Resumiendo la pc ni se podia usar de lo lento que estaba.

Alquien se le ocurre algo que pueda hacer?
A mi lo unico que se me ocurrio es ir grabando todo en un archivo auxiliar (despues borro el original y le cambio el nombre al aux. por el del original)

Saludos.

cpmario

  • Miembro HIPER activo
  • ****
  • Mensajes: 629
    • Ver Perfil
    • http://www.cpimario.com
Re: Filesystemobject,textstream Etc
« Respuesta #1 en: Miércoles 20 de Junio de 2007, 16:45 »
0
Explica como grabas en un string.
Posiblemente el programa se cuelgue cuando concatenas cadenas de texto como el siguiente ejemplo:

strAlmacena = strAlmacena & strTexto

Muestra algo del código que cuelga el equipo. Para saber de que hablas.
:comp:

Dieguinho.

  • Miembro MUY activo
  • ***
  • Mensajes: 163
    • Ver Perfil
Re: Filesystemobject,textstream Etc
« Respuesta #2 en: Miércoles 20 de Junio de 2007, 17:00 »
0
El codigo seria el siguiente:

Código: Text
  1.  
  2.  
  3.         Dim FSO As New Scripting.FileSystemObject
  4.         Dim fich As Scripting.File
  5.         Dim ts As Scripting.TextStream
  6.         Dim sArchivo As String
  7.         Dim sAux As String
  8.  
  9.         'Busca el archivo a depurar
  10.         Set fich = FSO.GetFile(sRuta)
  11.        
  12.         'Abre el archivo en modo lectura
  13.         Set ts = fich.OpenAsTextStream(ForReading)
  14.  
  15.         'Lee una por una todas las lineas del archivo de texto
  16.         Do While Not ts.AtEndOfStream
  17.  
  18.             sAux = ts.ReadLine
  19.             If Trim(sAux) <> "" Then
  20.                If CDate(Mid(sAux, 1, 10)) >= (CDate(Mid(Now, 1, 10)) -  iDiasConservados) Then
  21.                   If Len(sArchivo) = 0 Then
  22.                      sArchivo = sAux
  23.                   Else
  24.                      sArchivo = sArchivo & vbCrLf & sAux
  25.                   End If
  26.                Else
  27.                   iEntradasDepuradas = iEntradasDepuradas + 1
  28.                End If
  29.             End If
  30.  
  31.         Loop
  32.  
  33.  

Luego de esto grabo reemplazo mi archivo de log por sArchivo.

cpmario

  • Miembro HIPER activo
  • ****
  • Mensajes: 629
    • Ver Perfil
    • http://www.cpimario.com
Re: Filesystemobject,textstream Etc
« Respuesta #3 en: Miércoles 20 de Junio de 2007, 19:29 »
0
No tengo modo de comprobar el código, espero te de una idea. La rapidez que tiene la notarás enseguida.
Código: Text
  1.     Dim FSO As New Scripting.FileSystemObject
  2.     Dim fich As Scripting.File
  3.     Dim ts As Scripting.TextStream
  4.     Dim sArchivo As String
  5.     Dim sAux As String
  6.     '----------------------------
  7.     Dim strArray() As String
  8.     Dim lngCnt As Long
  9.     '---------------------------
  10.     'Busca el archivo a depurar
  11.     Set fich = FSO.GetFile(sRuta)
  12.    
  13.     'Abre el archivo en modo lectura
  14.     Set ts = fich.OpenAsTextStream(ForReading)
  15.  
  16.     'Lee una por una todas las lineas del archivo de texto
  17.     Do While Not ts.AtEndOfStream
  18.  
  19.         sAux = ts.ReadLine
  20.         If Trim(sAux) <> "" Then
  21.             If CDate(Mid(sAux, 1, 10)) >= (CDate(Mid(Now, 1, 10)) - iDiasConservados) Then
  22.                 If Len(sArchivo) = 0 Then
  23.                     sArchivo = sAux
  24.                 Else
  25.                     'sArchivo = sArchivo & vbCrLf & sAux
  26.                     '----------------------------
  27.                     strArray(lngCnt) = sAux
  28.                     lngCnt = lngCnt + 1
  29.                     If lngCnt >= UBound(strArray) Then
  30.                         ReDim Preserve strArray(UBound(strArray) + 1000) As String
  31.                     End If
  32.                     '----------------------------
  33.                 End If
  34.             Else
  35.                 iEntradasDepuradas = iEntradasDepuradas + 1
  36.             End If
  37.         End If
  38.  
  39.     Loop
  40.     '---------------------------
  41.     ReDim Preserve strArray(lngCnt) As String
  42.     sArchivo = Join(strArray, vbCrLf)
  43.     '---------------------------
  44.  
  45.  
Me comentas si te sirvió.
 :comp:

cpmario

  • Miembro HIPER activo
  • ****
  • Mensajes: 629
    • Ver Perfil
    • http://www.cpimario.com
Re: Filesystemobject,textstream Etc
« Respuesta #4 en: Lunes 25 de Junio de 2007, 19:53 »
0