Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   ¿Cómo localizar un directorio que cumpla ciertas características? (https://www.clubdelphi.com/foros/showthread.php?t=95328)

strelok 11-08-2021 12:19:25

¿Cómo localizar un directorio que cumpla ciertas características?
 
Buenos días,

Mi idea es hacer una función de Delphi que sea capaz de detectar si existe o no un directorio (y en caso de que exista, debe devolver el nombre del mismo) que se ubique en C:\ y cumpla las siguientes características.

1. [A-Za-z] - [0-9]-> O sea, un nombre cualquiera (mayus o min) seguido de un guion medio y terminando por un número.

Imaginemos que en el disco C:\ se encuentran los siguientes directorios:
1- Archivos de programa
2- Archivos de programa (x86)
3- Borland
4- Windows
5- Usuarios
6- Pepe - 210909999

Esta función debería retornar "Pepe - 210909999". ¿Cómo puedo hacer esto en Delphi 10.3?

oscorm 11-08-2021 13:26:18

Refactoriza alguna de éstas paisano
 
Código Delphi [-]
function TForm1.ListaDirectorios(directorioPadre: string) : TStringList;
  var
    sr: TSearchRec;
  begin
    Result := TStringList.Create;
    if FindFirst(directorioPadre + '*', faDirectory, sr) = 0 then
    repeat
      if (sr.Attr = faDirectory) then
        Result.Add(directorioPadre + sr.Name);
    until FindNext(sr) <> 0;
    FindClose(sr);
  end;
 
  function TForm1.ListaArchivos(directorioPadre: string) : TStringList;
  var
    sr: TSearchRec;
  begin
    Result := TStringList.Create;
    if FindFirst(directorioPadre + '*', faAnyFile, sr) = 0 then
      repeat
        if (sr.Attr and faDirectory = 0) or (sr.Name <> '.')
          and (sr.Name <> '..') then
            Result.Add(directorioPadre + sr.Name);
      until FindNext(sr) <> 0;
    FindClose(sr);
  end;
 
    
     // Llamando a las funciones anteriores
 procedure TForm1.Button1Click(Sender: TObject);
  begin
    ListBox1.Items := ListaDirectorios('C:\');
    ListBox2.Items := ListaArchivos('C:\');
  end;

Neftali [Germán.Estévez] 11-08-2021 13:44:48

Por favor, utilizad TAG's cuando añadáis código Delphi a los mensajes.

Neftali [Germán.Estévez] 11-08-2021 13:55:57

Cita:

Empezado por strelok (Mensaje 542307)
Mi idea es hacer una función de Delphi que sea capaz de detectar si existe o no un directorio (y en caso de que exista, debe devolver el nombre del mismo) que se ubique en C:\ y cumpla las siguientes características.

1. [A-Za-z] - [0-9]-> O sea, un nombre cualquiera (mayus o min) seguido de un guion medio y terminando por un número.

Para obtener la lista de directorios que hay "colgando" de uno, puedes usar alguna de las funciones que te ha pasado [oscorm], o también alguna que hay en la sección de trucos del club (por ejemplo este de David).

Para conseguir los que cumplen la condición que necesitas, puedes usar expresiones regulares. La idea es para cada uno de los que obtienes en la lista (todos) ver si el nombre se ajusta a una expresión reguular ([A-Za-z] - [0-9]).

Las expresiones regulares se implementan en la unit/clase (System.RegularExpressions.TRegEx). Aquí tienes la documentación.
En la docwiki también puedes encontrar este ejemplo (que puedes descargar del repositorio de embarcadaero) para utilizar expresiones regulares.

Y si quieres empezar a probar con expresiones regulares, puedes revisar estos links:
http://docwiki.embarcadero.com/RADSt...ar_Expressions
https://stackoverflow.com/questions/...i-using-tregex
https://www.finalbuilder.com/resourc...ar-expressions


La franja horaria es GMT +2. Ahora son las 07:16:05.

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