escribir en un fichero en una sola lÃnea
Hola a todos.
Estoy intentando escribir en un archivo texto en una sola lÃnea, pero no doy con la manera de hacerlo. Lo que hago es leer de un archivo de texto, realizo una serie de operaciones y el resultado lo quiero guardar en otro archivo, pero todo escrito en una sola lÃnea separado por comas.
El código en cuestión es este:
Do
Line Input #intArchivoLeido, strLectura
intPosicion = InStr(1, strLectura, strSeparador)
If (blPrimero = True) Then
Print #intArchivoEscrito, Right(strLectura, (Len(strLectura)-intPosicion))
blPrimero = False
Else
Print #intArchivoEscrito, Right(strLectura, (Len(strLectura)-intPosicion)) & ","
End If
Loop Until EOF(intArchivoLeido)
Pero con esto lo que haces es escribir cada cosa en una lÃnea distinta, y yo lo necesito todo seguido. He intentado introducir un carácter 8 para hacer un retroceso antes de escribir la siguiente lÃnea, pero no lo reconoce y me escribe un 8, y en ANSI el 008 no sé como introducirlo.
¿Podéis ayudarme? ¿Darme alguna idea?
Gracias por adelantado.
Estoy intentando escribir en un archivo texto en una sola lÃnea, pero no doy con la manera de hacerlo. Lo que hago es leer de un archivo de texto, realizo una serie de operaciones y el resultado lo quiero guardar en otro archivo, pero todo escrito en una sola lÃnea separado por comas.
El código en cuestión es este:
Do
Line Input #intArchivoLeido, strLectura
intPosicion = InStr(1, strLectura, strSeparador)
If (blPrimero = True) Then
Print #intArchivoEscrito, Right(strLectura, (Len(strLectura)-intPosicion))
blPrimero = False
Else
Print #intArchivoEscrito, Right(strLectura, (Len(strLectura)-intPosicion)) & ","
End If
Loop Until EOF(intArchivoLeido)
Pero con esto lo que haces es escribir cada cosa en una lÃnea distinta, y yo lo necesito todo seguido. He intentado introducir un carácter 8 para hacer un retroceso antes de escribir la siguiente lÃnea, pero no lo reconoce y me escribe un 8, y en ANSI el 008 no sé como introducirlo.
¿Podéis ayudarme? ¿Darme alguna idea?
Gracias por adelantado.
Lo que yo harÃa es, despues de haber escrito todo:
- cierras el archivo
- vuelves a abrirlo en modo lectura
- abres uno temporal en modo escritura
- escribes directamente el contenido reemplazando los saltos de lÃnea por un string nulo
- cierras los ficheros
- eliminas el original
- renombras el temporal
El código serÃa algo asÃ:
Open "c:CarpetaFichero.txt" for input as #1
Open "c:CarpetaFichero.txtTMP" for output as #2
Print #2, replace(input(lof(1),#1), vbCrLf, vbNullString)
Close
Kill "c:CarpetaFichero.txt"
Name "c:CarpetaFichero.txtTMP" As "c:CarpetaFichero.txt"
Pruebalo a ver si es lo que necesitas.
__
Un saludo.
- cierras el archivo
- vuelves a abrirlo en modo lectura
- abres uno temporal en modo escritura
- escribes directamente el contenido reemplazando los saltos de lÃnea por un string nulo
- cierras los ficheros
- eliminas el original
- renombras el temporal
El código serÃa algo asÃ:
Open "c:CarpetaFichero.txt" for input as #1
Open "c:CarpetaFichero.txtTMP" for output as #2
Print #2, replace(input(lof(1),#1), vbCrLf, vbNullString)
Close
Kill "c:CarpetaFichero.txt"
Name "c:CarpetaFichero.txtTMP" As "c:CarpetaFichero.txt"
Pruebalo a ver si es lo que necesitas.
__
Un saludo.
Muchas gracias!!
Funciona perfectamente :D
Sólo una cosa más: cuando el archivo a leer es pequeño, no hay problema porque lo hace rápidamente, pero tengo un archivo de más de 30.000 lÃneas y cuando lo pongo a procesar tarda mucho en terminar, y durante ese tiempo el programa da la apariencia de estar bloqueado.
¿Hay alguna manera de que el programa aparente estar "vivo"?
He intentado que en cada vuelta del bucle gire una barra para que se vea que está trabajando, pero no le hace caso, hasta que no termina no responde.
Un saludo.
Funciona perfectamente :D
Sólo una cosa más: cuando el archivo a leer es pequeño, no hay problema porque lo hace rápidamente, pero tengo un archivo de más de 30.000 lÃneas y cuando lo pongo a procesar tarda mucho en terminar, y durante ese tiempo el programa da la apariencia de estar bloqueado.
¿Hay alguna manera de que el programa aparente estar "vivo"?
He intentado que en cada vuelta del bucle gire una barra para que se vea que está trabajando, pero no le hace caso, hasta que no termina no responde.
Un saludo.
Para indicar a un usuario que el programa está trabajando y no se ha colgado, lo habitual es indicarlo cambiando el puntero del ratón a reloj de arena y restaurarlo cuando termina.
Y además, si lo que quieres es utilizar un control ProgressBar, añade a tu código las lineas que te marco:
****** Screen.MousePointer = vbHourglass
Open Fichero ....
****** ProgressBar1.Value = 0
****** ProgressBar1.Max = LOF(1) + 1
Do
****** ProgressBar1.Value = Seek(1)
Line Input #intArchivoLeido, strLectura
intPosicion = InStr(1, strLectura, strSeparador)
If (blPrimero = True) Then
Print #intArchivoEscrito, Right(strLectura, (Len(strLectura)-intPosicion))
blPrimero = False
Else
Print #intArchivoEscrito, Right(strLectura, (Len(strLectura)-intPosicion)) & ","
End If
Loop Until EOF(intArchivoLeido)
...
Close
****** Screen.MousePointer = vbDefault
__
Un saludo.
Y además, si lo que quieres es utilizar un control ProgressBar, añade a tu código las lineas que te marco:
****** Screen.MousePointer = vbHourglass
Open Fichero ....
****** ProgressBar1.Value = 0
****** ProgressBar1.Max = LOF(1) + 1
Do
****** ProgressBar1.Value = Seek(1)
Line Input #intArchivoLeido, strLectura
intPosicion = InStr(1, strLectura, strSeparador)
If (blPrimero = True) Then
Print #intArchivoEscrito, Right(strLectura, (Len(strLectura)-intPosicion))
blPrimero = False
Else
Print #intArchivoEscrito, Right(strLectura, (Len(strLectura)-intPosicion)) & ","
End If
Loop Until EOF(intArchivoLeido)
...
Close
****** Screen.MousePointer = vbDefault
__
Un saludo.
Perdón, añade también un DoEvents en el bucle:
...
Do
****** ProgressBar1.Value = Seek(1)
DoEvents
...
...
Do
****** ProgressBar1.Value = Seek(1)
DoEvents
...
