Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-05-2005
blamsa blamsa is offline
Miembro
 
Registrado: mar 2005
Posts: 10
Poder: 0
blamsa Va por buen camino
Dudas usando la clase TStringList

Hola amigos, necesito ayuda en el uso de la clase TStringList. Estoy intentando leer un fichero de texto .rtf usando esta clase. Al abrirlo con List.Loadfromfile me gustaria poner algun mensaje de error si el archivo no está en la ruta indicada...pero esta instruccion no retorna nada, verdad? Como podria hacerlo? Luego, una vez lo tengo abierto, lo voy recorriendo por lineas List[i] pero necesito en cada linea eliminar una cabecera que siempre es la misma en todas las lineas. Como puedo modificar el contenido de una linea? Como hago para recorrerla hasta encontrar la frase en cuestión que quiero eliminar? Y para extraer una palabra concreta de una linea como lo hago?
Gracias!!!
Responder Con Cita
  #2  
Antiguo 26-05-2005
S.M.S. S.M.S. is offline
Miembro
 
Registrado: jun 2003
Ubicación: España
Posts: 56
Poder: 21
S.M.S. Va por buen camino
Para tratar el mensaje de error, antes de cargar el archivo en en el StringList, utiliza la función FileExists() que devuelve false si el archivo no existe. Luego, dentro del recorrido que haces por las lineas, para averiguar la posición de la cabecera a eliminar utiliza la función pos() y para extraer la frase sin cabecera tienes la función copy().

Espero que con esto puedas montar el código según tus necesidades concretas.

Saludos
Responder Con Cita
  #3  
Antiguo 26-05-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Para el caso de la primera cuestión que planteas, con el permiso de S.O.S. otra opción puede ser algo así:

Código Delphi [-]
 procedure TForm1.Button1Click(Sender: TObject);
 var
   t: TStrings;
 begin
   t := TStringList.Create;
   try
     try
       t.LoadFromFile('C:\archivo.txt');
       // (más instrucciones...)
     except
       on E: EFOpenError do ShowMessage(E.Message);
       on E: Exception do ShowMessage(E.Message);
     end;
   finally
     t.Free;
   end;
 end;
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #4  
Antiguo 26-05-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Para debate:

Ya alguna vez se debatió acerca de esto y reafirmo mi opinión:

Las excepciones deben usarse para controlar errores que no podemos detectar a tiempo, no para cualquier cosa que un simple condicional previo nos evitaría.

Incluso la misma ayuda de Delphi dice:

Cita:
Empezado por Ayuda de delphi
Conditional statements are often the best way to test for errors. For example, suppose you want to make sure that a file exists before trying to open it. You could do it this way:


Código Delphi [-]
try
  AssignFile(F, FileName);
  Reset(F);  // raises an EInOutError exception if file is not found
except
  on Exception do ...
end;

But you could also avoid the overhead of exception handling by using


Código Delphi [-]
if FileExists(FileName) then  // returns False if file is not found; raises no exception
begin
  AssignFile(F, FileName);
  Reset(F);
end;
// Saludos
Responder Con Cita
  #5  
Antiguo 26-05-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

roman, estoy de acuerdo contigo, y, en este caso concreto más todavía si cabe: la ayuda de Delphi me reafirma en lo dicho, pues sus razones tendrá para decir lo que dices que dice (¿tal vez sea más eficiente utilizar la instrucción condicional que no tratar de capturar las posibles excepciones?).

Quizás mi intención al plantear aquí el uso de excepciones partía de lo que se decía más arriba:

Cita:
Al abrirlo con List.Loadfromfile me gustaria poner algun mensaje de error si el archivo no está en la ruta indicada...pero esta instruccion no retorna nada, verdad?
Quería indicar que, efectivamente, podría hacerse algo para comprobar si las instrucciones referidas se llevaban a cabo o no lo hacían y porqué.

En cualquier caso, como digo, estoy de acuerdo contigo: lo leí en cierto libro sobre Delphi de cuyo nombre no consigo acordarme, o tal vez era algún tutorial o artículo o algo así: no se debe abusar del uso de las excepciones y ante la duda es mejor no utilizarlas, venía a decir el texto a que me refiero.

Estoy leyendo ahora La cara oculta de Delphi 4 del amigo Ian Marteens (que es un cachondo mental, que me place leer) y aún no llegué al capítulo en que se trata sobre las excepciones. Probablemente no pueda sino reafirmarme en lo dicho, esto es, darte la razón roman, pero, no como a loco, entiéndase bien.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #6  
Antiguo 27-05-2005
blamsa blamsa is offline
Miembro
 
Registrado: mar 2005
Posts: 10
Poder: 0
blamsa Va por buen camino
Alguna duda mas

Muchas gracias por vuestras respuestas...me han sido de mucha utilidad. Necesito alguna ayudita mas. En el archivo que leo tengo lineas de esta guisa, entre otras:

palabra ruta\ruta\ruta\ruta\asd@asd.com

No todas las lineas empiezan por "palabra"...como hago para saber si una linea empieza por "palabra"? Una vez se que la linea empieza por "palabra", necesito extraer el "asd@asd.com" del final de todo y que en cada linea será diferente. Como lo hago?
Gracias de nuevo!!
Responder Con Cita
  #7  
Antiguo 27-05-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Podes valerte de las funciones pos y copy para conseguirlo.

Código Delphi [-]
  if pos('palabra', línea) = 1 Then
  Begin
    //la línea comienza con "palabra"
    HacerElResto;
  end;

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 04:32:23.


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