Access - como recortar lineas muy largas en archivo txt

 
Vista:
Imágen de perfil de Toni

como recortar lineas muy largas en archivo txt

Publicado por Toni (129 intervenciones) el 09/03/2013 17:56:59
Hola a todos,
Resulta que hago una importación utilizando código (en el evento click de un formulario) para importar un archivo de texto a mi tabla, utilizo:

DoCmd.TransferText acImportDelim, "IMPORTACION_ALMACENADA", "TBdef_tran", archivo5, 0

hasta ahora todo me funcionaba perfectamente pero resulta que ahora el listado TXT me viene con finales de página en donde en algunas líneas hay un simbolo (que es el salto de página para imprimir) el problema es que en el fichero TXT si lo edito veo lo siguiente:

Veo: La última línea de la página 5 + (el caracter de salto de página) + la primera línea de la página 6.

Total, que el resultado de ese problema (para que me entendáis), es que en ese fichero txt tengo varias líneas que superan los 255 caracteres y cuando hago la importación en Access me da un error creándome una tabla de errores por truncamiento de campo, cuando llega al caracter 255 esas líneas las importa también pero me aparece el dichoso aviso de que ha habido problemas en la importación y además me crea una tabla temporal con dichos errores.

Mi pregunta es la siguiente: Hay alguna manera fácil de procesar ese fichero txt antes de importarlo y depurar esas lineas que tienen más de 255 caracteres para borrar lo que sobrepase de esa cifra?

o también ¿ es posible forzar a que realice ese salto de página sin llegar a imprimir? y por consiguiente que posicione correctamente cada linea ejecutando los saltos de página?

Ambas opciones me serían de utilidad.

Espero haberme explicado con claridad.

Muchas gracias,

Saludos, Toni.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

como recortar lineas muy largas en archivo txt

Publicado por 2pl (461 intervenciones) el 09/03/2013 20:00:57
Una solución que no se si será la mejor
Archivo-Obtener datos externos-Importar le dices el archivo txt y cuando te salga el asistente, delimita los campos que quieras, y si quieres tambien puedes saltar cualquier campo que no quieras cargar en tu tabla, le das un nombre a tu especificación y luego las puedes ejecutar con una macro.
El que da lo que tiene, no está obligado a más.
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Toni

como recortar lineas muy largas en archivo txt

Publicado por Toni (129 intervenciones) el 10/03/2013 03:43:27
Gracias 2pl pero esa solución fué la primera que intenté pero ya te digo que no funciona, solo tengo un campo en la tabla donde importo todo el listado entero para luego ya trabajarlo en access, te aseguro que en las opciones de la especificación de importación he intentado todo y me sigue dando fallos de truncamiento de campo.
Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Norberto
Val: 1.094
Oro
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

como recortar lineas muy largas en archivo txt

Publicado por Norberto (753 intervenciones) el 09/03/2013 20:36:30
Hola.

Podrías hacerlo por código.

Abres el archivo de texto con Open "archivo.txt" For Input As #1 y en un bucle Do Until Eof(#1) ... Loop vas leyendo las líneas con Line Input #1, Txt. Una vez que tienes la línea localizas el carácter de fin de página (tradicionalmente Chr(12) pero averigua exactamente cuál es) con InStr. Si no lo encuentra añades el texto al registro pero con Left(Txt, 255) para que te trunque y no te de errores y si lo encuentra añades los caracteres anteriores al fin de página a un registro y el resto al siguiente.

Si no te aclaras bien lo posteas y el lunes te pongo el código, que hoy es sábado y estoy un poco vago

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Toni

como recortar lineas muy largas en archivo txt

Publicado por Toni (129 intervenciones) el 10/03/2013 03:54:18
Gracias Norberto, con tus indicaciones al final lo he podido hacer, al menos de una manera que no se si es la correcta, es la primera vez que trabajaba con esta instrucción "open" para ficheros y no me ha sido muy fácil, no se si es posible al mismo tiempo que se abre el archivo modificar una linea, o sustituir algo de esa linea sin tener que hacer lo que yo he hecho, que en resumen ha sido meter todo el listado en una variable para luego pasarlo todo entero de nuevo pero ya con menos caracteres de longitud.

Te pongo el código por si ves que lo puedo mejorar:

en el evento click de un boton he puesto:

Dim Linea As String
Dim cadena As String

'le he puesto a cada linea 140 caracteres, he visto que los finales de linea buenos en mi listado acababan en 135 excepto las lineas problemáticas que se pasaban de los 255, ahora todas me quedan en 140.

Open "C:\Trabajo\Fichero.txt" For Input As 1
While Not EOF(1)
Line Input #1, Linea
cadena = cadena & Left(Linea, 140) & vbCrLf
Wend
Close 1

'ahora vuelvo a abrir el fichero y le casco toda la variable enterita

Open "C:\Trabajo\Fichero.txt" For Output As 1
Print #1, cadena
Close 1

¿Es posible al mismo tiempo que se lee una linea poderla modificar? sin tener que hacer lo que yo he hecho que me parece una salvajada.

Un saludo y te reitero mi agradecimiento.
Toni
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Norberto
Val: 1.094
Oro
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

como recortar lineas muy largas en archivo txt

Publicado por Norberto (753 intervenciones) el 11/03/2013 10:09:25
Hola de nuevo.

A mí personalmente no me parece una salvajada lo que has hecho. Lo único que veo es que vas a perder la primera línea de cada página ya que, como comentas, está juntada a la última de la página anterior.

Para evitarlo añadiría lo siguiente:

1
2
3
4
5
6
7
8
9
10
...
Dim i as integer
 
...
cadena = cadena & Left(Linea, 140) &vbCrLf
i=InStr(1, Linea, Chr(12)) 'Siempre y cuando sea éste el caracter que marca el cambio de página
If i>0 then
    cadena = cadena & Mid(linea, i + 1, 140)
End If
...



En cuanto a lo de tratar las líneas una a una sin generar de nuevo el archivo, claro que es posible. Lo que ocurre es que ya no podrás usar TransferText sino que tendrás que ir añadiendo las nuevas líneas a la tabla mediante DAO o ADO.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Toni

como recortar lineas muy largas en archivo txt

Publicado por Toni (129 intervenciones) el 11/03/2013 23:54:55
Que tal ?

Tenías razón Norberto, estaba perdiendo una línea por página, he adaptado tu código para coger la linea anterior y la posterior al "avance de página":

i = InStr(1, Linea, Chr(12)) 'chr(12) es el caracter del salto de pagina
If i > 0 Then
cadena = cadena + Left(Linea, ii - 1) + vbCrLf 'antes del avance
cadena = cadena & Mid(Linea, ii + 1, 140 - ii) & vbCrLf 'después del avance
Else
cadena = cadena + Left(Linea, 140) + vbCrLf
End If

Asi me deja el fichero perfecto, peeero me sucede una cosa muy curiosa, después de guardar de nuevo el archivo con "cadena" hago la importación a mi tabla y sucede que esa importación a veces me la hace con el fichero arreglado, o sea, con los avances de pagina quitados, etc.. etc.. todo arreglado, pero otras veces me lo importa tal cual estaba al principio antes de arreglarlo, incluso a veces me hace un tutifruti, mitad y mitad. He llegado a pensar que quizás al sistema no le da tiempo a salvar el archivo antes de hacer la importación ¿puede ser?, es que no le encuentro otra explicacion.

Hay alguna forma de hacer que espere un poco mientras guarda el fichero y antes de hacer la importación a la tabla ?, se me ha ocurrido ponerle un bucle para que cuente pero esos sería un arreglo un poco chapucero. ¿qué opinas?

Gracias y un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Norberto
Val: 1.094
Oro
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

como recortar lineas muy largas en archivo txt

Publicado por Norberto (753 intervenciones) el 12/03/2013 16:10:22
Hola de nuevo.

Pudiera ser. Yo tengo una base de datos desde la que modifico e imprimo un documento de Word y he tenido que poner un MsgBox después del Doc.PrintOut porque ha veces no lo imprimía. Si lo ejecutaba paso a paso lo hacía bien pero de tirón no siempre. Al final opté por esa solución. Tú puedes probar a: 1º usar dos dombres archivos distintos, uno el que lees y otro en el que guardas tras las correcciones, así mantienes intacto el original y puedes hacer más pruebas y 2º, si sigue haciéndolo mal, pones un stop justo detrás del Close y ejecutas el resto paso a paso a ver si entonces lo hace bien.

Se supone que cuando abres un fichero con Open no puede usarse hasta que se cierra y, si se simultanearan el cierre con el TransferText, daría un error.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Toni

como recortar lineas muy largas en archivo txt

Publicado por Toni (129 intervenciones) el 12/03/2013 20:15:50
Bueno Norberto al final ya me funciona todo ok.
He rehecho totalmente las rutinas que tenían algo que ver y algún fallo he corregido (no sabría decirte cual), pero el caso es que ahora todo rula perfectamente.

Gracias por la ayuda.
Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar