Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / lazarus-es / 2009-10

Problema con archivos

12 messages · 5 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Hetor S. Ponce

Hola soy nuevo a la lista y me he topado con un inonveniente:

1) cargo el TStringList sl_cola con el path de unos archivos

sl_cola:=FindFile(sl_props.values['rutadatos']+'\*.'+sl_props.values['extdatos']);

2) a cada archivo tengo que leer la 1ra linea:

for k:=0 to sl_cola.Count-1 do
  begin
    if FileExists(sl_cola[k]) then
    begin
      job:=get_firstline(sl_cola[k]);
      archivo_datos:=ExtractFileName(sl_cola[k]);
      if copy(job, 1, 4) = '^job' then
      begin
        tarea:=copy(job, 6, 6);
        impresora:=copy(job, 12, 2);

3) la funcion get_firstline() es:

Function get_firstline(fname: string): string;
   var
     f: TextFile;
     s: String;
   begin
     if FileExists(fname) then
     begin
       {$i-}
       AssignFile(f, fname);
       Reset(f);
       {$I+}
       if IoResult=0 then
       begin
         ReadLn(f, s);
         result:=s;
         CloseFile(f);
       end
     end;
   end;

el problema es que me hace alternativamente un arhivo si y otro no.... al segundo archivo me dice error 103

la unica forma que consegui que funcione es hacer la funcion asi:

Function get_firstline(fname: string): string;
   var
     f: TextFile;
     s: String;
     fe: boolean;
   begin
     if FileExists(fname) then
     begin
       {$i-}
       AssignFile(f, fname);
       Reset(f);
       {$I+}
       if IoResult=0 then
       begin
         CloseFile(f);
         AssignFile(f, fname);
         Reset(f);
         ReadLn(f, s);
         result:=s;
         CloseFile(f);
       end
       else
       begin
         AssignFile(f, fname);
         Reset(f);
         ReadLn(f, s);
         result:=s;
         CloseFile(f);
       end;
     end;
   end;

es decir, hacerle dos veces el reset.... es como si el closefile no funcionara bien...

alguna sugerencia?????

gracias

Reply by email

JoshyFun
to Hetor S. Ponce

Hello Hetor,

Wednesday, October 28, 2009, 10:14:43 PM, you wrote:

HSP> Hola soy nuevo a la lista y me he topado con un inonveniente: HSP> 1) cargo el TStringList sl_cola con el path de unos archivos HSP> sl_cola:=FindFile(sl_props.values['rutadatos']+'\*.'+sl_props.values['extdatos']); HSP> 2) a cada archivo tengo que leer la 1ra linea: [...]
HSP> begin
HSP> {$i-}
HSP> AssignFile(f, fname);
HSP> Reset(f);
HSP> {$I+}
HSP> if IoResult=0 then
HSP> begin
HSP> ReadLn(f, s);
HSP> result:=s;
HSP> CloseFile(f);
HSP> end
HSP> end;
HSP> end;
HSP> el problema es que me hace alternativamente un arhivo si y otro no.... HSP> al segundo archivo me dice error 103
[...]
HSP> es decir, hacerle dos veces el reset.... es como si el closefile no HSP> funcionara bien...
HSP> alguna sugerencia?????

Dios mio, no se como sois capaces de manejaros con los "file" de Pascal, no hacen m�s que daros problemas a todos :) Con lo c�modos que son los TStream... bueno, a lo que ibamos, digo yo que esta linea:

HSP>          CloseFile(f);

Ser� "Close(f)" no ?

Best regards, JoshyFun

Reply by email

Hetor S. Ponce
to JoshyFun

no me aepta esta instrucion... me dice que le faltan parametros...

JoshyFun escribi�:

Show quoted text 38 lines
Hello Hetor, Wednesday, October 28, 2009, 10:14:43 PM, you wrote: HSP> Hola soy nuevo a la lista y me he topado con un inonveniente: HSP> 1) cargo el TStringList sl_cola con el path de unos archivos HSP> sl_cola:=FindFile(sl_props.values['rutadatos']+'\*.'+sl_props.values['extdatos']); HSP> 2) a cada archivo tengo que leer la 1ra linea: [...] HSP> begin HSP> {$i-} HSP> AssignFile(f, fname); HSP> Reset(f); HSP> {$I+} HSP> if IoResult=0 then HSP> begin HSP> ReadLn(f, s); HSP> result:=s; HSP> CloseFile(f); HSP> end HSP> end; HSP> end; HSP> el problema es que me hace alternativamente un arhivo si y otro no.... HSP> al segundo archivo me dice error 103 [...] HSP> es decir, hacerle dos veces el reset.... es como si el closefile no HSP> funcionara bien... HSP> alguna sugerencia????? Dios mio, no se como sois capaces de manejaros con los "file" de Pascal, no hacen m�s que daros problemas a todos :) Con lo c�modos que son los TStream... bueno, a lo que ibamos, digo yo que esta linea: HSP> CloseFile(f); Ser� "Close(f)" no ?

Reply by email

JoshyFun
to Hetor S. Ponce

Hello Hetor,

Wednesday, October 28, 2009, 11:11:31 PM, you wrote:

HSP> no me aepta esta instrucion... me dice que le faltan parametros...

No te la acepta por que est�s "mezclando" object pascal con pascal tradicional, y el "Close" que cree que intentas invocar es el "Form.Close". Es igual, ya que he visto que "CloseFile" hace exactamente lo mismo que "Close" y que se introdujo para evitar los problemas con "Form.Close".

El error 103 no es "fichero ya abierto" es "Fichero no abierto", as� que algo est� fallando o en el assignfile o en el reset. En qu� linea se queja con ese error ?

Qu� versi�n de FPC y Lazarus usas ?

Best regards, JoshyFun

Reply by email

Hetor S. Ponce
to JoshyFun
En el codigo:        ReadLn(f, s);     // aca da el error*

dentro del ide da el error:
Project psfsvr raised exception class RunError(103)

fuera del ide:
"File not open"

uso lazarus 0.9.28 con fpc 2.2.4 revision 21921

el tema es que cada vez que se usa la funci�n las variables son nuevas y los archivos existen...

debe ser un bug...

este es el codigo que da error:
*
procedure Tmain.a_scandatosExecute(Sender: TObject);
var
   k, copias: integer;
   f: TextFile;
   job, equipo, recurso,
   archivo_formulario, archivo_datos,
   tarea, impresora, formulario, sql, ts, mensaje: string;
   yy, mm, dd, hh, mi, ss, ms : word;
   p: TProcess;
   Function get_firstline(fname: string): string;
   var
     f: TextFile;
     s: String;
   begin
     if FileExists(fname) then
     begin
       AssignFile(f, fname);
       Reset(f);
       ReadLn(f, s);     // aca da el error
       result:=s;
       CloseFile(f);
     end;
   end;
begin
  t_scan.Enabled:=false;
  mem_servidor.Append('Buscando nuevas tareas de impresi�n...
('+inttostr(t_scan.Interval div 1000)+' segs)');
sl_cola:=FindFile(sl_props.values['rutadatos']+'\*.'+sl_props.values['extdatos']);
  mem_servidor.Append(sl_cola[0]);
  for k:=0 to sl_cola.Count-1 do
  begin
    if FileExists(sl_cola[k]) then
    begin
      job:=get_firstline(sl_cola[k]);
      archivo_datos:=ExtractFileName(sl_cola[k]);
      if copy(job, 1, 4) = '^job' then
      begin
        tarea:=copy(job, 6, 6);
        impresora:=copy(job, 12, 2);

*sin embargo este codigo no da error:*

program Project1;
{$mode objfpc}{$H+}
uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes, sysutils
  { you can add units after this };
{$IFDEF WINDOWS}{$R project1.rc}{$ENDIF}
 Function get_firstline(fname: string): string;
   var
     f: TextFile;
     s: String;
   begin
     if FileExists(fname) then
     begin
       AssignFile(f, fname);
       Reset(f);
       ReadLn(f, s);
       CloseFile(f);
       result:=s;
     end;
   end;
var
  f1, f2, f3: string;
begin
  f1:='G:\sis\pascal\lazarus\PServer\RTO01123.DAT';
  writeln(get_firstline(f1));
  f2:='G:\sis\pascal\lazarus\PServer\RTO01188.DAT';
  writeln(get_firstline(f2));
  f3:='G:\sis\pascal\lazarus\PServer\RTO01199.DAT';
  writeln(get_firstline(f3));
  readln;
end.

------------ pr�xima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20091028/4425e8cf/attachment.html>

Reply by email

JoshyFun
to Hetor S. Ponce

Hello Hetor,

Wednesday, October 28, 2009, 11:58:08 PM, you wrote:

HSP> En el codigo:        ReadLn(f, s);     // aca da el error*

[...]

Prueba cambiando esto:

   Function get_firstline(fname: string): string;
   var
     f: TextFile;
     s: String;
   begin
     if FileExists(fname) then
     begin
       AssignFile(f, fname);
       Reset(f);
       ReadLn(f, s);     // aca da el error
       result:=s;
       CloseFile(f);
     end;
   end;

por esto otro:

   Function get_firstline(fname: string): string;
   var
     fi: TextFile;
     si: String;
   begin
     if FileExists(fname) then
     begin
       AssignFile(fi, fname);
       Reset(fi);
       ReadLn(fi, si);     // aca da el error
       result:=si;
       CloseFile(fi);
     end;
   end;

Si as� funciona por favor avisa por que ser�a un bug y comprobar�a si est� corregido en fpc 2.5.1

Best regards, JoshyFun

Reply by email

Hetor S. Ponce
to JoshyFun

acabo de solucionarlo:

en otra parte de mi codigo preguntaba:

if not eof then
begin
end;

cuando deberia haber sido

if not qry.eof then
begin
end;

no se por que el ompilador daba error dentro de la funci�n get_firstline()....

muchas gracias

JoshyFun escribi�:

Show quoted text 50 lines
Hello Hetor, Wednesday, October 28, 2009, 11:58:08 PM, you wrote: HSP> En el codigo: ReadLn(f, s); // aca da el error* [...] Prueba cambiando esto: Function get_firstline(fname: string): string; var f: TextFile; s: String; begin if FileExists(fname) then begin AssignFile(f, fname); Reset(f); ReadLn(f, s); // aca da el error result:=s; CloseFile(f); end; end; por esto otro: Function get_firstline(fname: string): string; var fi: TextFile; si: String; begin if FileExists(fname) then begin AssignFile(fi, fname); Reset(fi); ReadLn(fi, si); // aca da el error result:=si; CloseFile(fi); end; end; Si as� funciona por favor avisa por que ser�a un bug y comprobar�a si est� corregido en fpc 2.5.1

Reply by email

JoshyFun
to Hetor S. Ponce

Hello Hetor,

Thursday, October 29, 2009, 4:30:13 AM, you wrote:

HSP> acabo de solucionarlo:
HSP> en otra parte de mi codigo preguntaba:
HSP> if not eof then
HSP> begin
HSP> end;
HSP> cuando deberia haber sido
HSP> if not qry.eof then
HSP> begin
HSP> end;
HSP> no se por que el ompilador daba error dentro de la funci�n HSP> get_firstline()....

Buena pregunta la verdad :-?

Best regards, JoshyFun

Reply by email

Ismael L. Donis Garc?a
to Hetor S. Ponce: acabo de solucionarlo: en otra parte de mi codigo preguntaba: if not eof then begin end;…

Ante todo saludos.

Como podr�a manipular la aplicaci�n para que al cerrar guarde el tama�o y posici�n del formulario principal para que al ejecutar de nuevo la misma se abra con ese tama�o y posici�n?

Que diferencias existe entre la propiedad DefaultMonitor = dmMainForm y DefaultMonitor = dmDesktop?. Y cual de est�s 2 usar para el formulario principal?

Gracias y perdonen la sencillez de las preguntas.
=========
�� ISMAEL ��
=========
PD: No tengo acceso a Internet

Reply by email

javivf dev
to Ismael L. Donis Garc?a

El 29 de octubre de 2009 16:31, Ismael L. Donis Garc?a < ismael en citricos.co.cu> escribi�:

Ante todo saludos.

Buenas

Show quoted text 6 lines
Como podr�a manipular la aplicaci�n para que al cerrar guarde el tama�o y posici�n del formulario principal para que al ejecutar de nuevo la misma se abra con ese tama�o y posici�n?

Puedes usar TXMLPropStorage (
http://wiki.lazarus.freepascal.org/TXMLPropStorage/es )

Show quoted text 11 lines
Que diferencias existe entre la propiedad DefaultMonitor = dmMainForm y DefaultMonitor = dmDesktop?. Y cual de est�s 2 usar para el formulario principal? Gracias y perdonen la sencillez de las preguntas. ========= �� ISMAEL �� ========= PD: No tengo acceso a Internet

�Como envias correos? ;-O

Show quoted text 7 lines
_______________________________________________ Lazarus-es mailing list Lazarus-es en lists.lazarus.freepascal.org http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es

------------ pr�xima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20091029/bb7127b7/attachment.html>

Reply by email

JoshyFun
to Ismael L. Donis Garc?a: Ante todo saludos. Como podr�a manipular la aplicaci�n para que al cerrar guarde el…

Hello Ismael,

Thursday, October 29, 2009, 4:31:15 PM, you wrote:

ILDGa> Como podr�a manipular la aplicaci�n para que al cerrar guarde el tama�o y ILDGa> posici�n del formulario principal para que al ejecutar de nuevo la misma se ILDGa> abra con ese tama�o y posici�n?

Mirate en MISC el TXMLPropStorage... creo que habia otra cosa parecida para la aplicaci�n en si.

ILDGa> Que diferencias existe entre la propiedad
ILDGa> DefaultMonitor = dmMainForm y
ILDGa> DefaultMonitor = dmDesktop?. Y cual de est�s 2 usar para el formulario ILDGa> principal?

Para el formulario principal no tiene efecto el fmMainForm ya que lo que hace ese modificador es abrir el form en el mismo monitor donde se ha abierto el form principal (el primero). dmDesktop abre el formulario en el monitor que est� siendo usado como desktop o principal.

Best regards, JoshyFun

Reply by email

Ismael L. Donis García
to Hetor S. Ponce: acabo de solucionarlo: en otra parte de mi codigo preguntaba: if not eof then begin end;…

Ante todo gracias por las repuestas JoshyFun buscar� informaci�n sobre dichos temas.

javivf dev Te respondo entre l�neas
=========
�� ISMAEL ��
=========
PD: No tengo acceso a Internet

Earlier message 46 lines
----- Mensaje original ----- De: javivf dev Para: Spanish version of Lazarus List Enviado: jueves, 29 de octubre de 2009 10:59 Asunto: Re: [Lazarus-es] Guardar tama?o y posici?n de la ventana El 29 de octubre de 2009 16:31, Ismael L. Donis Garc?a <ismael en citricos.co.cu> escribi�: Ante todo saludos. Buenas Como podr�a manipular la aplicaci�n para que al cerrar guarde el tama�o y posici�n del formulario principal para que al ejecutar de nuevo la misma se abra con ese tama�o y posici�n? Puedes usar TXMLPropStorage ( http://wiki.lazarus.freepascal.org/TXMLPropStorage/es ) Muchas grac�as ver� como buscar informaci�n de TXMLPropStorage pero como bien te dij� antes no tengo acceso a Internet, tendr� que pedirle a alg�n amigo de alguna de las listas a las que pertenezco que revise esas p�ginas por mi y me las envi� como imagen o los ejemplos. Que diferencias existe entre la propiedad DefaultMonitor = dmMainForm y DefaultMonitor = dmDesktop?. Y cual de est�s 2 usar para el formulario principal? Gracias y perdonen la sencillez de las preguntas. ========= �� ISMAEL �� ========= PD: No tengo acceso a Internet �Como envias correos? ;-O Muy simple la empresa donde trabajo contrat� un servicio de correo a la empresa de comunicaciones, ahora preguntar� y porque no contrata Internet, pues soy cubano y aqu� las cosas no funcionan como tu piensas. (Existen sus regulaciones.)

Reply by email