Imprimir página | Cerrar ventana

Unir dos ficheros TXT con un solo encabezado

Impreso de: Foro de Access y VBA
Categoría: Otros de Microsoft: Windows y Office
Nombre del foro: Visual Basic Clásico (VB3...VB6)
Descripción del foro: Foro de Visual Basic (No VBA)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=81549
Fecha de impresión: 23/Septiembre/2019 a las 00:35


Tema: Unir dos ficheros TXT con un solo encabezado
Publicado por: Medardo
Asunto: Unir dos ficheros TXT con un solo encabezado
Fecha de publicación: 02/Marzo/2016 a las 17:27
Hola
Tengo el siguiente procedimiento que toma el contenido de dos ficheros de texto y los une en un tercer fichero de texto:

    Dim FSO As New FileSystemObject
    Dim Archivo As File
    Dim Buffer As TextStream
    Dim Contenido As String
   
    'ABRIR EL PRIMER FICHERO Y EXTRAER CONTENIDO
    Set Archivo = FSO.GetFile(App.Path & "\tabPrincipal1.TXT")
    Set Buffer = Archivo.OpenAsTextStream(ForReading)
    Contenido = Buffer.ReadAll

    'ABRIR EL SEGUNDO FICHERO Y EXTRAER CONTENIDO
    Set Archivo = FSO.GetFile(App.Path & "\tabPrincipal2.TXT")
    Set Buffer = Archivo.OpenAsTextStream(ForReading)
    Contenido = Contenido & Buffer.ReadAll

    'GRABAR AMBOS CONTENIDOS EN EL FICHERO ‘tabPrincipal’
    Open App.Path & "\tabPrincipal.TXT" For Output As 1
    Print #1, Contenido
    Close 1

El procedimiento se realiza sin problema alguno. PERO, el encabezado del segundo fichero aparece en el intermedio al unirse el contenido de ambos ficheros.

Pregunto: ¿Cómo se puede impedir este segundo encabezado en el momento de la unión?



-------------
Saludos
Desde La Habana, Cuba
Medardo



Respuestas:
Publicado por: Mihura
Fecha de publicación: 02/Marzo/2016 a las 18:00
Supongo que la variable contenido contendrá algo así como:

ENCABEZADO FICHERO DOSRetornoCarro
Datos Linea 1RetornoCarro
Datos Linea 2RetornoCarro
.
.
Datos Ultima LineaRetornoCarro

Tendrás que eliminar lo que lleva la variable Contenido hasta el primer RetornoDeCarro, con un mid$(Contenido(instr(Contenido, Chr$(13))+1) tendría que valer ...

Escrito al vuelo, creo que el retorno de carro es el Chr$(13), aunque también podría ser el Chr$(10) ... que hace mucho que no lo uso.




-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: main
Fecha de publicación: 02/Marzo/2016 a las 19:06
 Prueba con Chr(13) & Chr(10) que seria el retorno de carro con el salto de linea


Publicado por: Medardo
Fecha de publicación: 02/Marzo/2016 a las 19:25
Da error de que no coinciden los tipos, supongo porque no debe permitir los caracteres de retorno en ese parámetro que es de tipo Long.


-------------
Saludos
Desde La Habana, Cuba
Medardo


Publicado por: Medardo
Fecha de publicación: 02/Marzo/2016 a las 19:30
Quizás leyendo cuántos caracteres hay en esa primera línea se podría precisar a partir de qué posición se desea extraer los datos. Estoy también en eso.



-------------
Saludos
Desde La Habana, Cuba
Medardo


Publicado por: Medardo
Fecha de publicación: 02/Marzo/2016 a las 20:32
Siguiendo la idea de Jesús, se puede resolver de la siguiente manera:

    Dim FSO As New FileSystemObject
    Dim Archivo As File
    Dim Buffer As TextStream
    Dim Contenido As String
    Dim Contenido2 As String

    'ABRIR EL PRIMER FICHERO Y EXTRAER CONTENIDO
    Set Archivo = FSO.GetFile(App.Path & "\tabPrincipal_prov.TXT")
    Set Buffer = Archivo.OpenAsTextStream(ForReading)
    Contenido = Buffer.ReadAll

    'ABRIR EL SEGUNDO FICHERO Y EXTRAER CONTENIDO
    Set Archivo = FSO.GetFile(App.Path & "\tabPrincipal.TXT")
    Set Buffer = Archivo.OpenAsTextStream(ForReading)
    Contenido2 = Buffer.ReadAll
    Contenido2 = Mid(Contenido2, 441)   'cantidad de caracteres (339) más 2 caracteres de retorno de carro y nueva línea
    Contenido = Contenido & Contenido2
   
    'GRABAR AMBOS CONTENIDOS EN EL FICHERO 'ARCHIVOFINAL'
    Open App.Path & "\ARCHIVOFINAL.TXT" For Output As 1
    Print #1, Contenido
    Close 1

PERO, ¿cómo averiguamos la cantidad de caracteres de esa primera línea?


-------------
Saludos
Desde La Habana, Cuba
Medardo


Publicado por: lbauluz
Fecha de publicación: 02/Marzo/2016 a las 20:40
Buenas Medardo

Mira a ver si asi:

Sub combinaFichTexto()

    Dim FSO As New FileSystemObject
    Dim Archivo As File
    Dim Buffer As TextStream
    Dim Contenido1 As String
    Dim Contenido2 As String
    Dim Posicion As Integer
    
    'ABRIR EL PRIMER FICHERO Y EXTRAER CONTENIDO
    Set Archivo = FSO.GetFile("c:\temp\tabPrincipal1.TXT")
    Set Buffer = Archivo.OpenAsTextStream(ForReading)
    Contenido1 = Buffer.ReadAll

    'ABRIR EL SEGUNDO FICHERO Y EXTRAER CONTENIDO
    Set Archivo = FSO.GetFile("c:\temp\tabPrincipal2.TXT")
    Set Buffer = Archivo.OpenAsTextStream(ForReading)
    Contenido2 = Buffer.ReadAll
    Posicion = InStr(Contenido2, Chr(10)) ' Busca el salto de linea

    'GRABAR AMBOS CONTENIDOS EN EL FICHERO ‘tabPrincipal’
    Open "c:\temp\tabPrincipal.TXT" For Output As 1
    Print #1, Contenido1 & Right(Contenido2, Len(Contenido2) - Posicion)
    Close 1
    

End Sub

Un saludo.

Luis

PD:Sin acentos por tener teclado en ingles


-------------
Estos son mis principios. Si no le gustan... tengo otros


Publicado por: Mihura
Fecha de publicación: 02/Marzo/2016 a las 20:46
Pues método benedictino .....   LOL

En la ventana inmediato te haces un: 
? Contenido2
Con esto verás el contenido, miras lo que tiene la primera línea y cuentas el número de caracteres visibles,
acto seguido averiguas que caracteres hay justo a continuación con un ? Asc(mid$(Contenido, n, 1))

Así sabrás que caracter tienes que buscar ...


Editado:   primero prueba lo que te pone Luis, .....



-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: Medardo
Fecha de publicación: 02/Marzo/2016 a las 21:12
PERFECTO Luis.

Muchísimas gracias a Ud. y Jesús.

 

Por mi parte pueden cerrar el hilo.



-------------
Saludos
Desde La Habana, Cuba
Medardo



Imprimir página | Cerrar ventana