Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Pasar nombre de archivo en pdf a un archivo txt (https://www.clubdelphi.com/foros/showthread.php?t=95858)

Camilo 05-09-2022 21:02:57

Pasar nombre de archivo en pdf a un archivo txt
 
Hola Amigos.
Una vez mas solicitando su ayuda.
tengo una carpeta cualquiera en donde alojo uno s archivos en formato pdf. (suelen ser bastantes, mas de 500 por vez).
Necesito hacer un programa que tome todos los nombres de esos archivos y me los ponga en un archivo txt separados por "Comas".

la estructura del nombre del archivo pdf es como la siguiente.

camilo_campos_05-09-2022_clinica_ejemplo.pdf
jorge_campos_garcia_04-09-2022_hospital_central.pdf

Lo que necesito es que ese nombre que va separado por _ ingrese (todos los de la carpeta) al archivo txt, reemplazando la _ por la , que los separa.

OJO: solo los nombres de los archivos; nada de lo que ellos contienen debe ir al txt. solamente los nombres.

Acudo a Uds. si nada de código por que no he arrancado y la verdad no se ni por donde; no se si se pueda hacer o no; pero con unas orientaciones lo estructuro, lo hago y arranco a hacer las pruebas de su funcionamiento. solo trozos de código u orientaciones relacionadas con esta acción por fa. Les iré comentando.
Gracias comunidad.

movorack 05-09-2022 21:32:51

¡Hola, Camilo!

La función FindFirst puede serte útil para lo que requieres.

Enlaces:

1. Delphi Basics
2. Embarcadero

mRoman 05-09-2022 21:36:38

Hola q tal Camilo.

Puedes hacer esto:
Código Delphi [-]
procedure TfrmCargaSaldos.btnCarpetaClick(Sender: TObject);
begin
    FileListBox1.Clear;
    edCarpeta.Text:='';
    Dir:='\';
    if SelectDirectory('Seleccione la carpeta donde se localizan los archivos de Deposito',Dir,Carpeta) then
    begin
         FileListBox1.Directory:=Carpeta;
         edCarpeta.Text:=Carpeta;
    end;
end;

En un formulario coloque un TFileListBox el cual se llena con lo que contenga "carpeta", los nombre de los archivos serán colocados 1 a 1 según tengas en el directorio que se haya seleccionado.

Lo que YO haría después de esto:

Hacer un bucle para ir comparando (If-then-else) carácter x carácter en ir guardándolos hasta q se encuentre el primer CARACTER NUMERICO, en cada comparación podrías sustituir el carácter "_" por "," y almacenar esa cadena en un TMemo o un arreglo que luego de ahí lo podría grabar en archivo de texto...talvez haya otra forma mas elegante de hacerlo con menos componentes.

Espero te sirva.

Saludos.

Camilo 05-09-2022 22:33:32

Gracias Movorack: no es lo que necesito. Gracias.
Gracias Miguel: Eso ya lo intente sin éxito. Pero mil gracias por el aporte.

movorack 05-09-2022 23:37:29

Cita:

Empezado por Camilo (Mensaje 548202)
Gracias Movorack: no es lo que necesito. Gracias.

Archivos en el directorio:
Código:

camilo_campos_01-09-2022_clinica_ejemplo.pdf
camilo_campos_02-09-2022_clinica_ejemplo.pdf
camilo_campos_03-09-2022_clinica_ejemplo.pdf
camilo_campos_04-09-2022_clinica_ejemplo.pdf
camilo_campos_05-09-2022_clinica_ejemplo.pdf
jorge_campos_garcia_01-09-2022_hospital_central.pdf
jorge_campos_garcia_02-09-2022_hospital_central.pdf
jorge_campos_garcia_03-09-2022_hospital_central.pdf
jorge_campos_garcia_04-09-2022_hospital_central.pdf
jorge_campos_garcia_05-09-2022_hospital_central.pdf

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
  lTemp : string;
  lNombre: string;
  lFecha: string;
  lLugar: string;
  SR : TSearchRec;
  lFiles: TArray<string>;
  lArchivo: TStrings;
begin
  //Reemplazar con la ruta de los archivos
  lTemp := IncludeTrailingPathDelimiter(ExtractFilePath(Paramstr(0))) + 'Archivos\*.pdf';

  // Try to find regular files matching Unit1.d* in the current dir
  if FindFirst(lTemp, faAnyFile, SR) = 0 then
  begin
    repeat
      lFiles := lFiles + [SR.Name];
    until FindNext(SR) <> 0;

    // Must free up resources used by these successful finds
    FindClose(SR);
  end;

  for i := Low(lFiles) to High(lFiles) do
  begin
    lTemp := lFiles[i];

    //Fecha
    lFecha := TRegex.Match(lTemp, '([0-9]+-)*[0-9]+', []).Value;

    //Nombre
    lNombre := lTemp.Substring(0, lTemp.IndexOf(lFecha)-1);
    lNombre := StringReplace(lNombre, '_', ' ', [rfReplaceAll]).Trim;

    //Lugar
    lLugar := lTemp.Substring((lTemp.IndexOf(lFecha) + lFecha.Length) + 1, lTemp.Length);
    lLugar := lLugar.Substring(0, lLugar.IndexOf('.'));
    lLugar := StringReplace(lLugar, '_', ' ', [rfReplaceAll]).Trim;

    lFiles[i] := Format('%s;%s;%s', [lNombre,lFecha,lLugar]);
  end;

  lArchivo:= TStringList.Create;
  try
    lArchivo.AddStrings(lFiles);
    lArchivo.SaveToFile(IncludeTrailingPathDelimiter(ExtractFilePath(Paramstr(0)))+'ListaArchivos.txt');
  finally
    lArchivo.Free;
  end;
end;

Resultado:
Código:

camilo campos;01-09-2022;clinica ejemplo
camilo campos;02-09-2022;clinica ejemplo
camilo campos;03-09-2022;clinica ejemplo
camilo campos;04-09-2022;clinica ejemplo
camilo campos;05-09-2022;clinica ejemplo
jorge campos garcia;01-09-2022;hospital central
jorge campos garcia;02-09-2022;hospital central
jorge campos garcia;03-09-2022;hospital central
jorge campos garcia;04-09-2022;hospital central
jorge campos garcia;05-09-2022;hospital central


Camilo 05-09-2022 23:45:15

Hola Hombre, mil gracias por tu interés. de veras lo aprecio.
pues desarrollado de esta forma pinta perfecto. Lo tomo por otro y definitivamente no me dio lo que buscaba.
En esta línea
Código Delphi [-]
lFecha := TRegex.Match(lTemp, '([0-9]+-)*[0-9]+', []).Value;
Me tira error de declaración. alguna unidad por declarar??

Camilo 05-09-2022 23:58:29

Hombre acabo de probarlo y efectivamente si es lo que necesito. Muy bien. Todo salió perfecto. disculpa por no comprender tu aporte inicial. Desarrollado de esta forma realmente es facil de implementar y funciona perfecto.
Gracias de nuevo Movorack.
Punto positivo para ti. Gracias.

Neftali [Germán.Estévez] 06-09-2022 12:17:57

Aunque ya veo que tienes la solución, añado este link, por si alguien más necesita algo similar.

Listar los archivos de un determinado directorio:
https://www.clubdelphi.com/foros/showthread.php?t=80413

Se trata de un mensaje en la sección de trucos (de hace ya un tiempo), que permite obtener todos los nombres de ficheros de una determinada carpeta utilizando una máscara; Además hay una versión recursiva para navegar por subcarpetas.
La salida es a un TStrings. Con un SaveToFile bastaría para guardarla en fichero.

Camilo 06-09-2022 16:18:24

Gracias Neftalí. Interesante programa.


La franja horaria es GMT +2. Ahora son las 13:06:39.

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