Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ficheros con eof (https://www.clubdelphi.com/foros/showthread.php?t=2394)

guantxo 22-07-2003 10:26:27

ficheros con eof
 
hola amigos!!

ya estoy aki otra vez!! para daros un poko la lata!!jeejeje

weno mi problemilla es el siguiente:

estoy haciendo un programilla de traspasos de un programa a otro. el 'programa origen' me genera un TXT q recorro y voy introduciendo los datos campo a campo.
hasta aki todo korrecto!!! peroooo.....
cual es mi sorpresa cuando voy a mirar los registros y me pone siempre uno menos!!!!!:D

le he puesto un

while not EOF(F) do

pero resulta q en la ultima linea, m ha parecido entender, mete el EOF y por tanto la linea no m la pilla por contenerlo!!!

he ido al TXT y he introducido una linea en blanco(un return) y entonces si m lo pilla!!!!

komo hago para q m pille el EOF sin tener q editar el fichero??

:rolleyes:

muxas gracias a tod@s!!!
un saludo!!!

__cadetill 22-07-2003 15:04:20

Como haces la introduccion de datos en el fichero, con un write o un writeln?

Si el problema es el retorno de carro y utilizas write, cambialo a writeln a ver que tal

Espero te sirva

guantxo 23-07-2003 10:41:55

HOLA!

yo no hago la introduccion del fichero. la hace el 'programa origen' y realmente no se como la hace!

yo parto del fichero TXT generado por este programa y a partir de él, lo leo linea a linea (ReadLn) y voy introduciendo campo a campo.

alguna idea?

se me ha ocurrido q komo no le falta esa linea ponerla yo!
algo asi
[list=a]
if FileExists('C:\Ofipro\GesProEasy\Emp1\EXPORTA\articulos.Txt') then
begin
AssignFile(F, 'C:\Ofipro\GesProEasy\Emp1\EXPORTA\articulos.Txt');
{$I-}
//abro el archivo
Reset(F);
{$I+}
//leo la linea
ReadLn(F,c);
while not Eof(F) do
begin
ReadLn(F,c);
end;
if eof(F) then
begin
writeln(F, #13);
end;
end;[/list=a]

pero no me deja escribir xq no esta en modo escritura!!!
he probado varias cosas pero nada :mad:

__cadetill 23-07-2003 15:16:54

para escribir en un fichero ya existente, en lugar de reset, utiliza append

de toda manera, tendria que funcionarte en bucle

while not eof(F) do

la verdad es que me tiene extrañado. He hecho la pueba de no poner un salto de linea en la ultima linea de un fichero de texto y.... me lo ha leido todo perfectamente :confused:

jachguate 23-07-2003 17:11:48

Estoy seguro que el problema no está en el archivo o en delphi. Si no hay un salto de línea antes del fin de archivo no pasa nada. Veo que lees una línea antes de entrar al while que sugeris, que tampoco tiene sentido (aunque no creo que sea el origen del error, por supuesto) y que de hecho podria ocasionar errores, ya que el archivo podria existir y estar vacio.

Solo para que lo revises, la construcción debiera ser algo como:

Código:

if FileExists(NombreArchivo) Then
Begin
  AssignFile(f, NombreArchivo);
  Reset(f);
  try
    while not eof(f) do
    Begin
      Readln(f, s);
      ProcesarLaCadena(s);
    End;
  finally
    Close(f); // Importante: aunque hayan errores, siempre liberará los recursos
  end;
End;

Hasta luego.

;)

guantxo 24-07-2003 09:26:58

hola otra vez!!

asias a los dos(cadetill y jachguate) x ayudarm m ha servido de muxo.... d exo ya esta resuelto!!

cadetill estaba 'mosca' y yo tambien xq no m leia la ultima linea!!

resulta q yo hacia esto:

Reset(F);
//leia la linea
ReadLn(F, c)
while not EOF(F) do
begin
//hacia las operaciones necesarias(lectura del TXT y grabar en cada campo los datos)
//leia linea
ReadLn(F, c)
end;

leia la linea antes d entrar xq calculaba su longitud una vez entraba.
Perooo... como dijo jachguate puse la linea dentro del while justo antes d calcular su longitud y....... voilá!!! M LEYO TODO !!!!
ahora keda asi:

Reset(F);
while not EOF(F) do
begin
//leo la linea
ReadLn(F, c)
//hacia las operaciones necesarias(lectura del TXT y grabar en cada campo los datos)
end;

pero no logro entender xq, lo sabeis?asias a los dos como he dixo antes!!
:p :D

guantxo 24-07-2003 09:54:34

aaa se me olvidaba!!jejjeeje!!soy un poko pesao ademas d desmemoriado!

resulta q el primer caracter q m lee del TXT en cuestion, es el caracter #0.
he editado el TXT y no tiene ningun caracter al principio, incluso lo he llevado al word para ver los caracteres ocultos por si las moscas ... pero todo parece estar bien!!

puede ser q sea la marca de principio de fichero??:rolleyes:

he sacada la cadena por pantalla y empieza asi:

'1','nsb', ....... etc

no veo q puede estar mal!

weno asias x todo!!

__cadetill 24-07-2003 13:45:45

Cita:

Posteado originalmente por guantxo
he editado el TXT y no tiene ningun caracter al principio, incluso lo he llevado al word para ver los caracteres ocultos por si las moscas ... pero todo parece estar bien!!
Si lo editas con un editor hexadecimal seguro que lo ves ya que este caracter es el caracter nulo (que no tiene representación y por eso no lo ves ni en Word, ni en Bloc de Notas ni nada) , pero sí que es "leible"

PD: me alegro de que hayas solucionado el problema ;)

guantxo 25-07-2003 08:54:59

hola !!!:p

gasias x todo, pero lo del caracter #0 al principio... sabes si es principio d fichero¿? xq lo pone?

lo siento si soy muy pregunton:D :p

un saludo y salud!!!

PD: asias otra vez!

__cadetill 25-07-2003 16:58:52

Ese caracter lo ha puesto el programa que ha generado el fichero txt. No significa que sea principio de fichero, sencillamente que el programa "creador de ficheros" lo escribe al generarlos


La franja horaria es GMT +2. Ahora son las 17:55:16.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi