Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-09-2003
cesarjbf cesarjbf is offline
Miembro
 
Registrado: may 2003
Posts: 54
Poder: 22
cesarjbf Va por buen camino
Ayuda con un memo

Saludos


Resulta que utilice este codigo para encontrar archivos mp3 en x directorio:

for i:=1 to 5 do
begin

findfirst('c:\musica\'+I+'*.mp3',Anyfile,searchrec);


con este metodo encontro los archivos llamados musica1.mp3 y musica2.mp3,
y los pase a un memo:

memo1.lines.add(searchrec.name);
findclose(searchrec);

entonces en el memo muestra lo siguiente:

memo1
musica1.mp3
musica2.mp3

Lo que quiero es quitar los 3 ultimos caracteres ('.mp3') de manera que solo aparezcan los nombres del archivo encontrado y no la extension de estos
que metodo se recomienda para hacer esto?
__________________
Mexicali
Responder Con Cita
  #2  
Antiguo 24-09-2003
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
Función para quitar la extensión de un archivo

Código:
function SoloNombre(Archivo: String): String;
var
  Punto: Integer;

begin
  Punto := Pos('.', Archivo);
  if Punto > 0 then
    Result := Copy(Archivo, 1, Punto - 1)
  else
    Result := Archivo;
end;
Si el archivo no tiene extensión te regresará el mismo nombre.

La usarías así:

memo1.lines.add(SoloNombre(searchrec.name));

Nota. La función fallará para archivos con nombres raros que tengan más de un punto.

// Saludos
Responder Con Cita
  #3  
Antiguo 24-09-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Prueba con este ejemplo:

Código:
procedure TForm1.Button1Click(Sender: TObject);
var
s:String;
n:Integer;
r:Integer;
begin

  for n:=0 to Memo1.Lines.Count -1 do
  begin
   S:=memo1.lines[n];
   r:=Pos('.mp3',S);
     if r >0 then
     begin
     Delete(s,r,4);
     memo1.Lines[n]:=s;
     end;
  end;
end;
Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #4  
Antiguo 24-09-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Si quieres que "el quitar" la extensión no dependa del tipo de archivo (como la solución del amigo Marcos) y que no tenga el problema de archivos raros (como la solución del amigo Román), puedes utilizar la función ExtractFileExt (almenos a partir de Delphi 6) y mezclarlo con el código de Marcos

Código:
procedure TForm1.Button1Click(Sender: TObject);
var
   s, ext : String;
   n : Integer;
   r : Integer;
begin
  for n := 0 to Memo1.Lines.Count - 1 do
  begin
    S := memo1.lines[n];
    ext := ExtractFileExt(s);
    r := Pos('.' + ext, S);
    if r > 0 then
    begin
      Delete(s, r, 4);
      memo1.Lines[n] := s;
    end;
  end;
end;
PD: pensaba que había una función que devolvía sólo el nombre del archivo (sin extensión), pero si existe, no la he encontrado en la ayuda
Responder Con Cita
  #5  
Antiguo 24-09-2003
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
¡Ey Cadetill! No es justo!

Aquí son las 5:00 am. Por razones que omito tengo insomnio y entre las muchas cosas absurdas que uno piensa cuando tiene insomnio, pensaba en que podía usarse ExtractFileExt. Harto de dar vueltas en la cama vengo y me encuentro con que me has ganado la idea.



De cualquier forma y para no quedarme con las ganas de aportar he de indicar que es innecesario añadir el '.' a Ext ya que ExtractFileExt lo incluye.

// Saludos
Responder Con Cita
  #6  
Antiguo 24-09-2003
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
Ok, ahí va otra solución si la versión de Delphi incluye la función ReverseStr de la unidad StrUtils:

Código:
function RemoveFileExt(FileName: String): String;
var
  Dot: Integer;

begin
  Result := ReverseString(FileName);
  Dot := Pos('.', Result);
  if Dot > 0 then Result := Copy(Result, Dot + 1, Length(Result));
  Result := ReverseString(Result);
end;
// Saludos
Responder Con Cita
  #7  
Antiguo 24-09-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Cita:
Posteado originalmente por roman
Aquí son las 5:00 am. Por razones que omito tengo insomnio y entre las muchas cosas absurdas que uno piensa cuando tiene insomnio, pensaba en que podía usarse ExtractFileExt. Harto de dar vueltas en la cama vengo y me encuentro con que me has ganado la idea.
Pues la verdad es que a las 5 d la mañana ponerse delante del ordenador tiene delito

Cita:
Posteado originalmente por roman
De cualquier forma y para no quedarme con las ganas de aportar he de indicar que es innecesario añadir el '.' a Ext ya que ExtractFileExt lo incluye.
En esto no habia caido Gracias por remarcarlo

Pues nada, otro día será

PD: La solucion con ReverseString es muy ingeniosa, pero sigue teniendo un problema. Qué pasaría si el archivo se llamara "Mi.Archivo"? es decir, sin extensión pero con un '.' por el medio del nombre
Responder Con Cita
  #8  
Antiguo 24-09-2003
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
Cita:
Posteado originalmente por cadetill
La solucion con ReverseString es muy ingeniosa, pero sigue teniendo un problema. Qué pasaría si el archivo se llamara "Mi.Archivo"? es decir, sin extensión pero con un '.' por el medio del nombre
Si el archivo se llama "Mi.Archivo" entonces la extensión es "Archivo"

Hasta donde yo sé, Windows no tiene forma de saber que "Archivo" es parte del nombre y no la extensión.

// Saludos

pd: Tengo sueño
Responder Con Cita
  #9  
Antiguo 24-09-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.938
Poder: 27
delphi.com.ar Va por buen camino
Bueno... para sembrar un poco de cizaña yo te recomiendo usar ChangeFileExt...
Código:
Memo1.Lines.Add(ChangeFileExt(SearchRec.Name, ''));
...espero comentarios!!

Saludos!!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #10  
Antiguo 24-09-2003
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
Thumbs up



Cita:
delphi.com.ar (quien seguramente durmió bien) dijo
Algo muy inteligente
¡Ni duda cabe!

¡El que sabe sabe!

// Saludos

pd:
cesarjbf, por favor omite todas las respuestas anteriores a la de delphi.com.ar
Responder Con Cita
  #11  
Antiguo 24-09-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Yo puse el mensaje a las 7h45, nada más llegar al puesto de trabajo y respondí en orden a resolver el problema ya dentro del Memo.

Pero, la solución desde fuera se hubiera parecido mucho a la que dí.

Por lo tanto, siempre me gusta hacer hacer una prueba con las propuestas que se dan, y esto fué lo que salio.
Código:
procedure TForm1.Button1Click(Sender: TObject);
var
s:String;
begin
s:= ChangeFileExt('MiArchivo.bmp','');
ShowMessage(s);
ShowMessage('Merci Delphi.com');
end;
Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #12  
Antiguo 25-09-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
sólo haré un comentario

Lo brebe, si bueno, dos veces bueno.

Muy bien compañero
Responder Con Cita
  #13  
Antiguo 25-09-2003
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
En realidad todos sabíamos la respuesta óptima, es sólo que antes de leer este hilo nos habíamos dado una vuelta por el de Aprender a pensar.

Responder Con Cita
  #14  
Antiguo 25-09-2003
cesarjbf cesarjbf is offline
Miembro
 
Registrado: may 2003
Posts: 54
Poder: 22
cesarjbf Va por buen camino
Thumbs up

Probe todos los metodos a como iban saliendo y me funcionaron varios pero ninguno mejor que el de una sola linea
posteado por el moderador delphi.com.ar
gracias el problema esta resuelto,no cabe duda que esta es una excelente pagina.
__________________
Mexicali
Responder Con Cita
  #15  
Antiguo 25-09-2003
UTECYBER UTECYBER is offline
Miembro
 
Registrado: ago 2003
Posts: 60
Poder: 21
UTECYBER Va por buen camino
La verdad es que esta parte es [para Grandes Ligas_pero sigo leyendo...- Para aprender mas.

Atte.Utecyber
La Sabiduria se adquiere, No se gana.
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 16:39:09.


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