Abrir un archivo txt y eliminar saltos de línea y de párrafo desde script .vbs sin usar controles que requieran licencia.

En primer lugar saludos y gracias anticipadas.

Uso un script en un fichero .vbs que elimina los saltos de línea y de párrafos existentes en un fichero txt que tiene cientos y cientos de registros. El script (nombrescript.vbs) lo ejecuto desde un botón de comando en un formulario access.

**Ejemplo txt: ARCHIVO_PARA_ARREGLAR.TXT

999998|Andres Perez Pisuerga|Este es el campo de varias líneas

Línea en blanco

Esta es la segunda línea del puñetero campo tras una línea en blanco
Esta la tercera

Esta la cuarta[aquí el cuadradito de separador de registro]999999|Pepita Calvo Bueno|Este es el campo conflictivo en varias líneas

Línea en blanco
Otra línea del campo del segundo registro

Tercera línea del campo en el segundo registro[cuadradito de fin de registro]
**Fin ejemplo txt

En el script se usa el control

set oComDlg=CreateObject("MSComDlg.CommonDialog")

Y si lo ejecuto en las estaciones de trabajo clientes de la intranet me aparece el mensaje: "No se puede crear el control porque
no tiene una licencia valida". Si lo ejecuto en la mía que SI tiene instalado y

licenciado VB6 funciona perfectamente.

''CODIGO DEL SCRIPT..... Nombrescript.vbs

Set WshShell = WScript.CreateObject("Wscript.Shell")
set fso = createobject("scripting.filesystemobject")
Set oComDlg = CreateObject("MSComDlg.CommonDialog")
With oComDlg
.DialogTitle = "Select text file"
.MaxFileSize = 10000
.Filter = "TXT|*.TXT|"
.FileName ="ARCHIVO_PARA_ARREGLAR.TXT"
.InitDir = "P:\XXX\APLICACION_XXX\"
.ShowOpen
sFile = Replace(.FileName, "Select File./", "")
End With
Data=fso.OpenTextFile(sFile, 1).ReadAll
rChar= trim(InputBox("Qué carácter ..","Replace Character",cashe, 100, 100))
Input=replace(data,vbcrlf,rChar)
Set Data=nothing
Set fFile= fso.CreateTextFile(sFile, True)
fFile.writeLine Input
fFile.close
Set fFile=nothing
set fso=nothing

''Aquí se abre el archivo para ver que se han eliminado los saltos de línea y las líneas en blanco
wshShell.run "notepad " & sFile
Wscript. Quit

PREGUNTA: He intentado instalar el comdl32.ocx en las máquinas clientes sin solucionar el problema. ¿Cómo puedo sustituir el control "de pago y que requiere licencia" para poder suprimir los saltos de línea y párrafos del fichero txt?. ¿Cómo podría arreglar el fichero txt suprimiendo estos saltos de línea y de párrafo de otra forma?.

1 Respuesta

Respuesta
1

¿Probaste a meter el mismo código dentro de un módulo de access, para no depender del archivo externo?

Por lo que veo, es muy probable que te funcione sin hacerle ningún "apaño", más allá de indicarle la ruta del archivo en .InitDir = "P:\XXX\APLICACION_XXX\"

Un saludo.


Estas son las líneas que has de utilizar:

set fso = createobject("scripting.filesystemobject")
Set oComDlg = CreateObject("MSComDlg.CommonDialog")
With oComDlg
.DialogTitle = "Select text file"
.MaxFileSize = 10000
.Filter = "TXT|*.TXT|"
.FileName ="ARCHIVO_PARA_ARREGLAR.TXT"
.InitDir = "P:\XXX\APLICACION_XXX\"
.ShowOpen
sFile = Replace(.FileName, "Select File./", "")
End With
Data=fso.OpenTextFile(sFile, 1).ReadAll
rChar= trim(InputBox("Qué carácter ..","Replace Character",cashe, 100, 100))
Input=replace(data,vbcrlf,rChar)
Set Data=nothing
Set fFile= fso.CreateTextFile(sFile, True)
fFile.writeLine Input
fFile.close
Set fFile=nothing
set fso=nothing

Y recuerda dimensionar las variables antes (Dim fso As Scripting.FileSystemObject...)

¡Gracias! Lo voy a probar de inmediato ya que me hace muchísima falta resolver el problema pues tengo un proyecto parado desde hace una semana por culpa de este tema de licencias. Muchísimas gracias... ahora mismo pongo manos a la obra metiéndolo en un módulo. Pruebo y comento...

Lo he probado metiéndolo en un módulo, uso el Access 2000 y INPUT o instrucciones de apertura de fichero "no lo quiere".. estoy intentando cambiar input por otra instrucción para trabajar con ficheros y en ello estoy, pero el código tal cual no me funciona. Me sale error ( texto en rojo ) en las siguientes lineas:

Input=replace(data,vbcrlf,rChar)

fFile.writeLine Input

Hay una circunstancia que no he comentado. El archivo txt que tengo que arreglar es el resultado de la unión de docenas de archivos txt más pequeños. La unión de estos txt es por operativo mediante un archivo por lotes batch que ejecuta varios procesos con carpetas y archivos y entre ellos el de copiar todos en uno (copy *.txt  ARCHIVO_PARA_ARREGLAR.TXT) y se me ocurre que quizás la solución estaría NO en arreglar este fichero txt final sino el ejecutar la unión de los txt pequeños desde access y de alguna forma desde access evitar que se vayan incluyendo estas lineas en blanco y esos saltos de parrafos. Si la intranet no me deja usar objetos VB sin licencia y tampoco logro motar el módulo, ves otra solución?.  Te agradezco cualquier sugerencia porque aunque parezca algo tonto este tema me tiene totalmente parado.

Saludos y de nuevo gracias


                    

Creo que tienes un concepto erróneo: Input no es una instrucción, es una variable (entiendo que debería ser de texto), a la que le pasas un valor (el resultado de las operaciones de reemplazar el contenido de la variable "data" (también de texto) mediante la función Replace().

Yo al no tener el archivo no puedo hacer pruebas, por lo que sólo te puedo dar "ideas al vuelo".

Lo que comentas de cargar los distintos txt individuales te podría servir. Veo dos opciones:

1º/ importar directamente a la tabla de destino cada txt

2º/ importar a una tabla temporal los txt y luego anexarlos a la tabla definitiva.

Por aportar otra forma de trabajar, esta mañana vi una pregunta que te puede servir: Necesito crear un .bat para buscar un carácter dentro de un .txt y poder modificar o remplazarlo

Ya me dirás.

Saludos!


Ah! Encontré el problema! "Input" es una palabra reservada en VBA, si la cambias por otro nombre (en las dos líneas que te marca en rojo), por ejemplo vInput, te podría funcionar.

¡Gracias! Perdona que no haya continuado con el tema estas semanas pero he estado enfermo y de baja laboral y he tenido dejados todos los temas. Claro que llevas razón con input, me he liado con varios problemas que tengo de diversos temas, llevo desde páginas webs con php y mysql a problemas como el actual con access y precisamente por el término reservado de input lo asimilé erróneamente a instrucción cuando en este script está como variable y eso que ya me indicabas que las dimensionara y por eso no me dejaba hacerlo.

He optado por una de tus soluciones, la de importar cada txt uno a uno a una tabla temporal. Los meto en una tabla temporal y luego anexo esos registros nuevos a la tabla definitiva. En el siguiente proceso borro los datos del temporal y vuelvo a meter uno a uno los txt para luego volver a anexar a la tabla definitiva los nuevos registros de cada proceso.

Muchísimas gracias por la ayuda, las ideas hacen soluciones y me has dado muchas. Un cordial saludo y gracias nuevamente.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas