Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Ayuda con un memo (https://www.clubdelphi.com/foros/showthread.php?t=3901)

cesarjbf 24-09-2003 06:46:20

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?

roman 24-09-2003 08:10:38

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

marcoszorrilla 24-09-2003 08:20:53

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.

__cadetill 24-09-2003 10:24:59

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

roman 24-09-2003 12:24:03

¡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.

:D

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

roman 24-09-2003 12:32:58

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

__cadetill 24-09-2003 18:09:37

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 :D

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 :p Gracias por remarcarlo

Pues nada, otro día será :D

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 :p

roman 24-09-2003 18:22:45

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 :p
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 :o

delphi.com.ar 24-09-2003 18:35:35

Bueno... para sembrar un poco de cizaña yo te recomiendo usar ChangeFileExt...
Código:

Memo1.Lines.Add(ChangeFileExt(SearchRec.Name, ''));
...espero comentarios!! :D

Saludos!!

roman 24-09-2003 18:51:29

:eek:

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 :D

marcoszorrilla 24-09-2003 22:44:31

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.

__cadetill 25-09-2003 02:07:56

sólo haré un comentario

Lo brebe, si bueno, dos veces bueno.

Muy bien compañero ;)

roman 25-09-2003 02:10:51

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.

:D

cesarjbf 25-09-2003 03:10:25

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.

UTECYBER 25-09-2003 19:04:56

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.


La franja horaria es GMT +2. Ahora son las 23:39:48.

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