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 11-08-2021
strelok strelok is offline
Miembro
 
Registrado: sep 2017
Posts: 181
Poder: 7
strelok Va por buen camino
¿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?
__________________
Sean los orientales tan ilustrados como valientes.
Responder Con Cita
  #2  
Antiguo 11-08-2021
oscorm oscorm is offline
Miembro
 
Registrado: ago 2004
Ubicación: Alcorcón
Posts: 59
Poder: 20
oscorm Va por buen camino
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;

Última edición por Neftali [Germán.Estévez] fecha: 11-08-2021 a las 13:45:37.
Responder Con Cita
  #3  
Antiguo 11-08-2021
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Por favor, utilizad TAG's cuando añadáis código Delphi a los mensajes.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 11-08-2021
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por strelok Ver Mensaje
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
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
¿Cómo hago para que el Inno setup no me copie ciertas carpetas? danielmania8 Varios 2 04-11-2011 04:00:10
como localizar un numero que no este siendo usado en BD principiante22 Varios 1 18-08-2008 14:17:52
Como puedo localizar un DBGrid en un Tabsheet? Nieto OOP 10 03-12-2007 19:47:45
Como hago reportar ciertas partes de una Tabla de datos? Carlos76 Firebird e Interbase 2 07-08-2007 19:28:42


La franja horaria es GMT +2. Ahora son las 14:32:27.


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