1º. Cada registro es un fichero .txt con nombres de fichero del tipo:
A001.txt, A002.txt, ... Z999.txt.
2º. El fichero no tiene caracteres de separación, sino que es más bien así:
Contenido del Fichero A001.txt:
====================
"Nombre
Hola a todos los chavales de aforo, este es un texto largo.
Y ahora vamos al tercer párrafo."
=====================
No tendría problema si por lo menos los 3 párrafos estuvieran en el mismo
reglón pero separados por el caracter punto y coma (;). El primer párrafo
es de tipo TEXTO y los otros 2 restantes son de tipo MEMO.
¿Existe algún método para corregir esto sin hacerlo a mano en los 3.735
ficheros?
¿Cómo puedo automatizar la importación de todos los ficheros de una sola
vez?.
Enviado desde http://access.aforo.com
¿Quieres el buscador de es.comp.bd.ms-access en tu web?
http://www.aforo.com/webmasters.asp
Mi problema para importar datos a una tabla de Access es el siguiente:
Tengo un directorio con 3.700 ficheros .txt. El contenido de cada fichero
debe corresponder con un registro en mi futura tabla ACCESS.
Esos ficheros tienen la siguiente estructura o forma:
"primer párrafo
segundo párrafo
tercer párrafo"
Cada párrafo es evidentemente un campo. Con lo cual, el resultado en
ACCESS seran 3 campos de tipo MEMO. Pero como veréis no están
separados los párrafos por punto y coma (;), sino por una línea en blanco
entre párrafo y párrafo con el ENTER.
Mi consulta es:
1. Como reestructurar los casi 4.000 ficheros de forma automática para
eliminar la linea vacía y añadir ";" entre párrafos sin tener que hacerlo a
mano uno por uno. ¿ALGUN FICHERO BAT?
2. Cuando tenga los 3.700 ficheros correctamente... ¿Cómo importarlos de
una sola vez a una tabla en ACCESS?.
Es importante. Hacerme cuantas sugerencias se os ocurran. Gracias a todos.
Te coloco un procedimiento que hace lo que tú quieres.
Sub ImportarTexto2()
Dim X As Integer
Dim Xi As Integer
Dim Nom As String
Dim Path As String
Dim Rs As Recordset
Dim RsDef As Recordset
Dim Campo1 As String
Dim Campo2 As String
Dim Campo3 As String
'
' Incorporar todos los archivos en una tabla con un solo campo.
'
Path = "C:\Documents and Settings\Carcar\Mis documentos\Pruebas\"
Nom = Dir(Path)
Do While Len(Nom) > 0
DoCmd.TransferText , , "TablaImportada", Path & Nom
Nom = Dir
Loop
'
' Procesar registros grabados para tabla definitiva.
'
Set Rs = CurrentDb.OpenRecordset("TablaImportada", dbOpenSnapshot)
If Rs.RecordCount > 0 Then
Set RsDef = CurrentDb.OpenRecordset("TablaFinal",
dbOpenDynaset)
Do While Not Rs.EOF
Campo1 = ""
Campo2 = ""
Campo3 = ""
X = 1
Do While Asc(Mid(Rs!F1, X, 1)) > 30
Campo1 = Campo1 & Mid(Rs!F1, X, 1)
X = X + 1
Loop
Do While Asc(Mid(Rs!F1, X, 1)) <= 30
X = X + 1
Loop
Do While Asc(Mid(Rs!F1, X, 1)) > 30
Campo2 = Campo2 & Mid(Rs!F1, X, 1)
X = X + 1
Loop
Do While Asc(Mid(Rs!F1, X, 1)) <= 30
X = X + 1
Loop
Do While Asc(Mid(Rs!F1, X, 1)) > 30
Campo3 = Campo3 & Mid(Rs!F1, X, 1)
X = X + 1
If X > Len(Rs!F1) Then
Exit Do
End If
Loop
RsDef.AddNew
RsDef!Campo1 = Campo1
RsDef!Campo2 = Campo2
RsDef!Campo3 = Campo3
RsDef.Update
Rs.MoveNext
Loop
End If
Rs.Close
MsgBox "Fin"
End Sub
En la primera parte del procedimiento se importan los diversos
archivos en una tabla llamada "TablaImportada" que se crea sola, no
hace falta tenerla creada.
En la segunda parte se procesa el contenido de la misma, leyendo sus
registros y el único campo llamado "F1" y grabando los registros en
una tabla que SI QUE DEBES de tener CREADA, que en la función se llama
"TablaFinal" con 3 campos: "Campo1", "Campo2" y "Campo3" el primero
creado de tipo Texto y los dos siguientes Memo.
Espero que, con los ajustes necesarios te sirva el invento.
Saludos.
Jose Hidalgo <jose...@yahoo.es> wrote in message news:<9u0j2u$it5$1...@talia.mad.ttd.net>...
He creado un formulario con un botón al cual le he añadido un
procediminento de evento con tu función en "Al hacer Click".
Lo ejecuto, pulso el botón y me da error en la línea siguiente:
"Set Rs = CurrentDb.OpenRecordset("TablaImportada", dbOpenSnapshot)"
El error producido es el 3001 en tiempo de ejecución.
¿Lo estoy haciendo bien?. Si eres tan amable de guiarme...
Tengo un problema con "pp" que es exactamente igual que el tuyo y
supongo que trabajas con Access 2000.
Desgraciadamente no dispongo de una versión completa de Access 2000 y
no dispongo de la ayuda, así que no sé si voy a poder ayudarte.
Este error lo solucinó "pp" incluyendo la referencia "Microsoft DAO
3.6 object library" para eso teniendo el módulo abierto (la ventana de
VB) vas al menú Herramientas -> Referencias y allí seleccionas (porque
no la tendrás) la Microsoft DAO.
Y prueba a ver que pasa.
Saludos.
PS: Los expertos en el 2000 que estén atentos, que no sé por dónde me
vienen los tiros. :-)
Jose Hidalgo <jose...@yahoo.es> wrote in message news:<9u5ddj$jqo$1...@talia.mad.ttd.net>...
He seguido tus indicaciones (Microsoft DAO 3.6 object library) pero sigue
dandome error.
Creo la tabla "TablaFinal" = Campo1 (Texto), Campo2 y Campo3 (Memo).
Abro el formulario con el boton Importar Tablas que ejecuta el
procedimiento de evento tuyo:
Sub importar_Click()
Dim X As Integer
Dim Xi As Integer
.....
etcétera
.....
End Sub"
Pulso el botón y ahora el error es el siguiente:
"3078 en tiempo de ejecución: El motor Jet no puede encontrar la
tabla ''TablaImportada'', asegúrese que existe...
En Depurar muestra la siguiente línea:
Set Rs = CurrentDb.OpenRecordset("TablaImportada", dbOpenSnapshot)
Lo que he hecho es crear a mano la tabla TablaImportada = Campo1
(MEMO) pero entonces el error es:
"13 en tiempo de ejecución: No coinciden los tipos".
En Depurar muestra la mísma línea que la anterior.
====================
¿Puede ser porque el evento lo ejecuto desde un formulario y no sabe el
código pasar de un evento ejecutado en un objeto de tipo FORM a objeto de
tipo TABLA? ¿Si fuese así, como ejecutaría este evento directamente como
TABLA?
De todas formas probaré tu código desde ACCESS 97 si funciona rebibirás
notificación en este mismo foro.
Espero tu respuesta. Por favor. Me estás ayudando mucho, y te lo
agradezco.
Pero, aún tengo errores.
En primer lugar, la tabla "TablaImportada" tengo que crearla yo, de lo
contrario no me funciona. No sé cuál es la estructura de la tabla, por ello he
intentado adivinar en el código como debe ser. Y he hecho lo siguiente:
Campos TablaImportada = F1 (Memo), F2 (Memo), F3 (Memo), F4 (Memo).
Sólo con F1 daba errores, he incluido sucesiamente hasta F4 (probando con
campos texto y memo) y ahora todo va mejor aunque de repente se para...
El mensaje es:
"Error 3274 en tiempo de ejecución: La tabla externa no está en el formato
esperado".
En depurar va a la línea: DoCmd.TransferText , , "TablaImportada", Path &
Nom
En TablaImporta tengo un total de 590 registros y aparte varias tablas con
los típicos errores de importación.
CREO QUE EL PROBLEMA ES LA ESTRUCTURA DE "TABLAIMPORTADA".
¿CUAL DEBE SER SU ESTRUCTURA?
Evidentemente me dá igual hacerlo con ACCESS 97 porque una vez todo
esté importado podré llevarmelo de 97 a 2000.
Pau
"CarCar" <ccar...@hotmail.com> escribió en el mensaje
news:661800fa.01112...@posting.google.com...
No te lo crees ¿verdad?; el ACC2000 tiene esas pequeñas y molestas faltas.