Visual Basic - Borrar saltos de línea

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil

Borrar saltos de línea

Publicado por miguel (8 intervenciones) el 02/01/2014 15:07:26
Hola, estoy trabajando con un archivo txt, tratando de borrar los saltos de línea y guardar los cambios.. pero no me funciona...
Me pueden ayudar?

Adjunto el código que estoy usando.
Abro el archivo y lo recorro para borrar los saltos de línea y retorno de carro. Creo un archivo temporal y traspaso los datos modificados (sin salto y retorno), pero al abrir el nuevo archivo lo veo igual que al original

Gracias

Private Function Archivo_a_Matriz(ByVal Path As String) As String()
On Error GoTo errSub

Dim Array_Datos As String
Dim F_File As Integer
Dim Split_Array() As String

' Para el número libre de archivo
F_File = FreeFile

' Abre el archivo en modo binario de lectura
Open Path For Binary As #F_File

' crea un buffer con la cantidad de caracteres - bytes necesarios
Array_Datos = String(LOF(F_File), 0)

' Almacena en el buffer todo el archivo
Get #F_File, , Array_Datos

' Cierra el archivo
Close #F_File

' Elimina el último salto de carro, si es que hay ( caracter VbCrlf )
Do Until (Right$(Array_Datos, 2) <> vbCrLf)
Array_Datos = Mid$(Array_Datos, 1, Len(Array_Datos) - 2)
Loop

' Obtenemos con split los datos del buffer, en un array
Split_Array = Split(Array_Datos, vbCrLf)

' retorna el array a la función
Archivo_a_Matriz = Split_Array

Exit Function

'error
errSub:

' En caso de error devuelve un array vacío
ReDim Archivo_a_Matriz(0)

End Function

Sub Normaliza_Fuente()
Dim Array_Datos() As String
Dim i As Integer

Dim Name As String

Screen.MousePointer = 11

Array_Datos = Archivo_a_Matriz(SelectDir & "\" & SelectFile)

' Creo un archivo temporal para guardar los datos
Open SelectDir & "\" & "fuente.tmp" For Output As #1

For i = LBound(Array_Datos) To UBound(Array_Datos)
Print #1, Array_Datos(i)
Next

Close #1

File = SelectDir & "\" & SelectFile.FileName
Kill File

Name SelectDir & "\" & "fuente.tmp" As SelectDir & "\" & SelectFile
SelectFile.Refresh

Screen.MousePointer = 0

End

End Sub
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
Imágen de perfil de Antoni Masana
Val: 1.259
Plata
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Borrar saltos de línea

Publicado por Antoni Masana (558 intervenciones) el 03/01/2014 12:45:27
Solo falta un pequeñísimo detalle.

Esta resaltado la línea Print # los cambios efectuados

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
Private Function Archivo_a_Matriz(ByVal Path As String) As String()
    On Error GoTo errSub
 
    Dim Array_Datos As String
    Dim F_File As Integer
    Dim Split_Array() As String
 
    ' Para el número libre de archivo
 
    F_File = FreeFile
 
    ' Abre el archivo en modo binario de lectura
 
    Open Path For Binary As #F_File
 
    ' crea un buffer con la cantidad de caracteres - bytes necesarios
 
    Array_Datos = String(LOF(F_File), 0)
 
    ' Almacena en el buffer todo el archivo
 
    Get #F_File, , Array_Datos
 
    ' Cierra el archivo
 
    Close #F_File
 
    ' Elimina el último salto de carro, si es que hay ( caracter VbCrlf )
 
    Do Until (Right$(Array_Datos, 2) <> vbCrLf)
       Array_Datos = Mid$(Array_Datos, 1, Len(Array_Datos) - 2)
    Loop
 
    ' Obtenemos con split los datos del buffer, en un array
 
    Split_Array = Split(Array_Datos, vbCrLf)
 
    ' retorna el array a la función
 
    Archivo_a_Matriz = Split_Array
 
    Exit Function
 
    ' --- error
 
errSub:
 
    ' En caso de error devuelve un array vacío
 
    ReDim Archivo_a_Matriz(0)
End Function
 
Sub Normaliza_Fuente()
    Dim Array_Datos() As String
    Dim i As Integer
    Dim Name As String
 
    Screen.MousePointer = 11
 
    Array_Datos = Archivo_a_Matriz(SelectDir & "\" & SelectFile)
 
    ' Creo un archivo temporal para guardar los datos
 
    Open SelectDir & "\" & "fuente.tmp" For Output As #1
 
    For i = LBound(Array_Datos) To UBound(Array_Datos)
'---    Print #1, Array_Datos(i)
        Print #1, rtrim$(Array_Datos(i)); " ";
    Next
    Close #1
 
 
    File = SelectDir & "\" & SelectFile.FileName
    Kill File
 
    Name SelectDir & "\" & "fuente.tmp" As SelectDir & "\" & SelectFile
    SelectFile.Refresh
 
    Screen.MousePointer = 0
    End
End Sub


- Elimino los espacios de la derecha del texto ( RTrim$ ) para evitar duplicidad de espacios.
- Añado un espacio ( " " ) para que no se pegue las líneas
- Un punto y coma ( ; ) hace que no se escriba el salto de línea.

Por otro lado creo que te has complicado la vida cosa que a veces hacemos todos.

Esto hace lo mismo pero es más simple:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Sub Normaliza_2()
    Dim F_Lee As Integer, F_Gra As Integer, Reg As String
 
    F_Lee = FreeFile: Open SelectDir & "\" & SelectFile For Binary As #F_Lee
    F_Gra = FreeFile: Open SelectDir & "\Temp_0001.tmp" For Output As #F_Gra
 
    While Not EOF(F_Lee)
        Input #F_Lee, Reg
        Print #F_Gra, RTrim$(Reg); " ";
    Wend
    Close #F_Lee, #F_Gra
 
    Kill = SelectDir & "\" & SelectFile.FileName
 
    Name SelectDir & "\Temp_0001.tmp" As SelectDir & "\" & SelectFile
    SelectFile.Refresh
 
    Screen.MousePointer = 0
    End
End Sub
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
sin imagen de perfil

Borrar saltos de línea

Publicado por miguel (8 intervenciones) el 03/01/2014 17:08:37
gracias Antoni, pero sigue sin funcionarme
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 Antoni Masana
Val: 1.259
Plata
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Borrar saltos de línea

Publicado por Antoni Masana (558 intervenciones) el 06/01/2014 07:13:47
Hola Miguel,

Envíame el fichero de texto, lo pruebo y te comento.

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
sin imagen de perfil

Borrar saltos de línea

Publicado por miguel (8 intervenciones) el 06/01/2014 20:00:59
Gracias Antoni, ya te envié los ficheros

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 Antoni Masana
Val: 1.259
Plata
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Borrar saltos de línea

Publicado por Antoni Masana (558 intervenciones) el 07/01/2014 07:07:55
Otra realizar la conversión manualmente.

Este ejemplo lo hace pero solo sirve para ficheros pequeños, y cuando me refiero a pequeños estoy hablando de que al hacer el INPUT con el fichero de 185KB lo carga todo en la variable Reg.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub Normaliza_2()
    Dim F_Lee As Integer, F_Gra As Integer, Reg As String, a as Long, Tex as Integer
 
    F_Lee = FreeFile: Open SelectDir & "\" & SelectFile For Binary As #F_Lee
    F_Gra = FreeFile: Open SelectDir & "\Temp_0001.tmp" For Output As #F_Gra    
 
    While Not EOF(F_Lee)
        Input #F_Lee, Reg
        For a = 1 To Len(Reg)
            Tex = Asc(Mid$(Reg, a, 1))
            If Tex > 31 Then Print #F_Gra, Chr$(Tex);
            If Tex < 32 Then Print #F_Gra, Chr$(13); Chr$(10);
        Next
    Wend
    Close #F_Lee, #F_Gra
 
End Sub


Esta rutina sirve para todo tipo de ficheros, es más si el fichero ya esta en formato MS-DOS no lo estropea


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Sub Command1_Click()
    Dim F_Lee As Integer, F_Gra As Integer, Reg As String,  Tex As Integer
 
    F_Lee = FreeFile: Open SelectDir & "\" & SelectFile For Binary As #F_Lee
    F_Gra = FreeFile: Open SelectDir & "\Temp_0001.tmp" For Output As #F_Gra
 
    Reg$ = " "
 
    While Not EOF(F_Lee)
        Get #F_Lee, , Reg
        Tex = Asc(Reg)
        If Tex > 31 Then Print #F_Gra, Chr$(Tex);
        If Tex = 10 Then Print #F_Gra, Chr$(13); Chr$(10);
    Wend
    Close #F_Lee, #F_Gra
 
    Unload Me
End Sub


Antoni Masana
Barcelona
Espanya.
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
sin imagen de perfil

Borrar saltos de línea

Publicado por miguel (8 intervenciones) el 07/01/2014 15:54:34
Muchas gracias por la ayuda Antoni, voy a probar las rutinas y te cuento.

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
sin imagen de perfil

Borrar saltos de línea

Publicado por miguel (8 intervenciones) el 08/01/2014 17:25:47
Hola Antoni, muchas gracias por tu ayuda! Funciona sin problemas la rutina!

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

Borrar saltos de línea

Publicado por jorge fuentes (1 intervención) el 26/03/2015 03:20:24
Hola Antoni, tengo un problema con una serie de ficheros y quiero replicar tu proceso, sin lograr hacerlo.

Podrías ayudarme??
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

Borrar saltos de línea

Publicado por LUIS FELIPE LINERO (1 intervención) el 23/09/2020 17:19:10
esta solucion tambien me sirvio... 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