Programación General > Visual Basic 6.0 e inferiores

 Filesystemobject,textstream Etc

(1/1)

Dieguinho.:
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:
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.:
El codigo seria el siguiente:


--- Código: Text ---          Dim FSO As New Scripting.FileSystemObject        Dim fich As Scripting.File        Dim ts As Scripting.TextStream        Dim sArchivo As String        Dim sAux As String         'Busca el archivo a depurar        Set fich = FSO.GetFile(sRuta)                'Abre el archivo en modo lectura        Set ts = fich.OpenAsTextStream(ForReading)         'Lee una por una todas las lineas del archivo de texto        Do While Not ts.AtEndOfStream             sAux = ts.ReadLine            If Trim(sAux) <> "" Then               If CDate(Mid(sAux, 1, 10)) >= (CDate(Mid(Now, 1, 10)) -  iDiasConservados) Then                  If Len(sArchivo) = 0 Then                     sArchivo = sAux                  Else                     sArchivo = sArchivo & vbCrLf & sAux                  End If               Else                  iEntradasDepuradas = iEntradasDepuradas + 1               End If            End If         Loop  
Luego de esto grabo reemplazo mi archivo de log por sArchivo.

cpmario:
No tengo modo de comprobar el código, espero te de una idea. La rapidez que tiene la notarás enseguida.

--- Código: Text ---    Dim FSO As New Scripting.FileSystemObject    Dim fich As Scripting.File    Dim ts As Scripting.TextStream    Dim sArchivo As String    Dim sAux As String    '----------------------------    Dim strArray() As String    Dim lngCnt As Long    '---------------------------    'Busca el archivo a depurar    Set fich = FSO.GetFile(sRuta)        'Abre el archivo en modo lectura    Set ts = fich.OpenAsTextStream(ForReading)     'Lee una por una todas las lineas del archivo de texto    Do While Not ts.AtEndOfStream         sAux = ts.ReadLine        If Trim(sAux) <> "" Then            If CDate(Mid(sAux, 1, 10)) >= (CDate(Mid(Now, 1, 10)) - iDiasConservados) Then                If Len(sArchivo) = 0 Then                    sArchivo = sAux                Else                    'sArchivo = sArchivo & vbCrLf & sAux                    '----------------------------                    strArray(lngCnt) = sAux                    lngCnt = lngCnt + 1                    If lngCnt >= UBound(strArray) Then                        ReDim Preserve strArray(UBound(strArray) + 1000) As String                    End If                    '----------------------------                End If            Else                iEntradasDepuradas = iEntradasDepuradas + 1            End If        End If     Loop    '---------------------------    ReDim Preserve strArray(lngCnt) As String    sArchivo = Join(strArray, vbCrLf)    '---------------------------  Me comentas si te sirvió.
 :comp:

cpmario:

Navegación

[0] Índice de Mensajes

Ir a la versión completa