2013-06-12

Reemplazar carácter en un fichero de texto con VBA en Access

Title En alguna ocasión me he encontrado con el problema de descargar un fichero de texto delimitado por comas cuando necesitaba que el delimitador fuera el punto y coma (mal funcionamiento del programa de inteligencia de negocio).

Quizá la mejor opción sería cambiar el delimitador de nuestras especificaciones de importación en Access. Visita este artículo para ver como acceder a las especificaciones guardadas, y modifica el Delimitador de campo.


También tenemos otras alternativas:

1. Usar el Excel, Bloc de notas, u otro editor de texto como Notepad++, para reemplazar un carácter por otro. Cuando el número de ocurrencias es muy grande, millones en el caso de fichero de tamaño considerable, el proceso puede ser algo lento.

2. Utilizar código de VBA acelerando el proceso notablemente, evitando tener que abrir otros programas, reduciendo la probabilidad de errores y pudiendo llamarlo desde una macro u otro módulo.

Hay que copiar el siguiente código en un módulo de Ms Access:
Public Sub ReemplazarCaracteresAccess()

Dim folderPath As String
folderPath = Application.CurrentProject.Path & "\" 'Ruta del Access

Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists(folderPath & "Inicial.csv") Then
    Set objStream = fso.OpenTextFile(folderPath & "Inicial.csv", 1, False, 0)
End If
    Set objCopy = fso.CreateTextFile(folderPath & "Final.csv")

For x = 1 To 5  'Se salta el nº de líneas indicadas 
    objStream.readline
Next x
 
Do While Not objStream.AtEndOfStream
    strOldLine = objStream.readline
    i = 1
    NewArray = Split(strOldLine, ",")'Carácter reemplazado: ,
       strNewLine = NewArray(0)
       
    Do Until i = UBound(NewArray) + 1
         strNewLine = strNewLine & ";" & NewArray(i)'Carácter nuevo: ;
         i = i + 1
    Loop
    objCopy.WriteLine strNewLine
Loop

End Sub
Notas: El fichero Inicial.csv debe de estar en la misma ruta del Access. El código creará un fichero Final.csv en dicha ruta con el carácter reemplazado. Borrar estas 3 líneas en el caso de que en el fichero de texto no haya que saltarse líneas en blanco y que provocarían un error:
For x = 1 To 5  'Se salta el nº de líneas indicadas 
    objStream.readline
Next x
También se puede usar este código para ficheros *txt. Ejemplo: Inicial.txt y Final.txt

Entradas relacionadas:

No hay comentarios:

Publicar un comentario

Nube de datos