escribir en un fichero en una sola línea

toni
27 de Febrero del 2005
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.

en?
27 de Febrero del 2005
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.

toni
27 de Febrero del 2005
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.

en?
27 de Febrero del 2005
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.

en?
27 de Febrero del 2005
Perdón, añade también un DoEvents en el bucle:

...
Do
****** ProgressBar1.Value = Seek(1)
DoEvents
...

toni
27 de Febrero del 2005
Muchas gracias enço.
Que sepas que te voy a nombrar en los agradecimientos :P
Un saludo.