https://foro.gambas-es.org/viewtopic.php?f=1&t=1474&p=8519#p8519
-----------------------------------
soplo
Martes, 08 Marzo 2011, 17:51

Re: Problema Analizando Caracteres...
-----------------------------------
Hola Pablo

[b]La lectura del fichero[/b]
[quote]hFile = OPEN path FOR READ

WHILE NOT Eof(hFile)
INPUT #hFile, espacio1, espacio2, espacio3
WEND

hFile.Close [/quote]
Te sugiero que leas el archivo de esta forma que me parece mas adecuada para tu caso
variable=file.load(fichero) 'todo el fichero queda en una variable string
o bien esta otra
input #hFile,variable,lof(hFile) 'otra forma de meter todo el archivo en una variable string de un solo golpe.

[b]Obtención de registros[/b]
Ahora que tienes todo tu fichero en un solo string el siguiente paso es obtener los registros. Supongamos que cada registro acaba en LF (salto de linea \n)

Dim Lineas as NEW string[] ' cada string de este array será una línea de tu fichero
Lineas=split(variable,"\\n")

[b]buscar la línea que quieres. [/b]
Imagino que la línea que quieres está en textbox.text
El primer elemento de linas es 0 y el último es lineas.max
[code linenumbers=false syntax=gambas]dim Contador as integer, Pos as integer
For contador=0 to Lineas.Max
   Pos=instr(Lineas[Contador],textbox.text)
   if Pos>0 'si es mayor que cero es que esta linea es la que quieres. Pos es la posición en la que está tu variable
      Lineas[Contador]=CambiarValor(Lineas[Contador]) 'llamas a una funcion que te haga el cambio. 
      break
   endif
next[/code]

Una vez hayas hecho todos los cambios en ese archivo deberías volver a escribirlo. Sustituyes el archivo anterior por el nuevo con los cambios
[code linenumbers=false syntax=gambas]Variable=Lineas.join 'las vuelves a unir en un solo string que contiene todas las líneas
file.save(fichero,Lineas)[/code] 'pisar el viejo con el nuevo

[b]La rutina de hace el cambio[/b] podria ser la siguiente
private function CambiarValor(Linea as string) as string
[code linenumbers=false syntax=gambas]Dim PosInicioValor as integer, Contador=0
'primero buscar el =
PosInicioValor=instring(linea,"=") 'lo que buscas estará a partir de ahí
inc PosInicioValor 'ponerme en la posicion siguiente
do while true 'un bucle infinito. Saldremos cuando encontremos la posición del texto a cambiar
   if instr(" \\t",mid(Linea,PosInicioValor,1))>0 'comparo una lista de caracteres a ignorar con un caracter de linea
      inc PosInicioValor 'me voy al caracter siguiente
   else
      break 'el caracter no está en la lista de los caracteres a ignorar. Debe ser el primer caracter del string que buscabas
   endif
loop
'En PosInicioValor tienes el principio del texto a reemplazar por un valor que tengas en textbox2.text
'En mid(Linea,PosInicioValor) tienes el contenido del texto a sustituir
Lineas[Contador]=replace(linea,mid(linea,PosInicioValor),textbox2.text)
return linea
end
[/code]

Si haces copypastes sin mas no te funcionará porque he tratado de dejarte la idea pero partes de ese código deberían estar en funciones separadas, pero ya sabes como se hace. Fíjate que es mucho mas sentillo meter todo en un string y luego dividir ese string en lineas. Fíjate que en vez de modificar el archivo lo que hago es hacer los cambios en el string y luego piso el fichero viejo con el nuevo que incluye los cambios y fíjate que para hacer el cambio en un string lo que intenté es encontrar el string viejo a cambiar para poder hacer un replace.

Si tienes duda sobre alguna parte de este código no dejes de preguntar je je je

Un saludo


