Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cortar path de diferente longitud (https://www.clubdelphi.com/foros/showthread.php?t=93458)

Missael 04-10-2018 20:42:51

Cortar path de diferente longitud
 
Buenas Tardes, eh buscado en los foros, pero ninguno tiene una idea concreta de lo que necesito.

Tengo un path, donde este puede variar, depende de la dirección donde el usuario desee guardar una carpeta, dicha carpeta es de donde quiero comenzar a trabajar, para eso quiero cortar todo lo que este atrás del nombre de la carpeta, como puedo hacer eso

Por ejemplo
path := 'C:\documentos\trabajos\tareas\...'
'C:\exposicion\tareas\...'

Trabajar a partir de tareas, el resto del path quitarlo, el restante guardarlo en una variable, espero puedan ayudarme.

Saludos cordiales.

Casimiro Notevi 04-10-2018 20:45:39

Bien, pero el ejemplo confunde, ¿"exposicion" de dónde ha salido?

Missael 04-10-2018 20:52:28

Hola Casimiro, es un ejemplo, puede ser un path cualquiera, en este ejemplo puse dos path, para ejemplificar que el tamaño sera diferente segun donde el usuario desee guardar la carpeta, pero todos coinciden, por ejemplo una carpeta llamada 'Tareas' a partir de esa carpeta y todo lo que contenga, es donde comenzare a trabajar, para esto necesito quitar o eliminar todo el path detras de esta carpeta

Porque estaba trabajando con el comando StuffString, pero ese sirve si conoces la longitud del path, y en este caso va a tener varios tamaños. espero me haya explicado.

ecfisa 04-10-2018 21:49:53

Hola.

No me termina de quedar claro...

¿ Como selecciona el usuario la ruta a la carpeta ?
¿ El nombre de la carpeta también lo elige el usuario ?
¿ La ubicación de dicha carpeta es independiente del de la aplicación ?


Saludos :)

Missael 04-10-2018 21:58:07

Gracias por responder

1.- la selecciona con un botón que ya programe, ese path lo guarda en una variable
2.- El nombre de la carpeta ya esta definido
3.- la ubicación de la carpeta depende de donde el usuario diga que se va a descargar. ahi se va a guardar.

movorack 04-10-2018 21:58:43

Hola.

Según dices, sin importar que path se seleccione siempre habrá un directorio dentro del path llamado "Tareas" (O puede ser otro pero siempre habrá esa constante).

Si es así, debes buscar esa constante y eliminar lo anterior. No entiendo aún cual es el incoveniente

Missael 04-10-2018 22:03:15

Si, esa es mi duda, como encontrar esa constante? lo intente de varias formas pero no lo eh logrado, soy nuevo en delphi y sigo aprendiendo, y ahorita me atore en esto.

Si pueden apoyarme dándome un ejemplo o con algún método, se los agradecería mucho.

Casimiro Notevi 04-10-2018 22:08:19

El problema es que yo sigo sin entender exactamente la situación.
Bueno, veo que los demás compañeros tampoco se aclaran, tampoco lo entienden.

movorack 04-10-2018 22:10:51

¡Buscas la palabra!

Cita:

The ansipos function looks for a substring Needle in a string HayStack, returning the position in the string of the first occurence.

All Ansi commands support multi-byte and accented characters.

If the string is not found, 0 is returned.

The search is case sensitive.
http://www.delphibasics.co.uk/RTL.asp?Name=ansipos

Missael 04-10-2018 22:21:27

Cita:

Empezado por Casimiro Notevi (Mensaje 528814)
El problema es que yo sigo sin entender exactamente la situación.
Bueno, veo que los demás compañeros tampoco se aclaran, tampoco lo entienden.

Solamente quiero encontrar el nombre de la carpeta que todos los path tendran en comun, ya encontrado, quiero eliminar todo lo que este detras del nombre, y solo dejar lo que este despues de ese nombre de la carpeta.

Missael 04-10-2018 22:22:06

Cita:

Empezado por movorack (Mensaje 528815)

Lo pruebo y te informo movorack, muchas gracias

Missael 04-10-2018 22:46:44

Movorack, ya utilice AnsiPos, pero me dice donde comienza, tal vez sea una pregunta un tanto tonta, pero, ¿si quiero que me diga cual es el ultimo carácter de la carpeta, que seria por ejemplo

'Tareas\' seria que me dijera la ubicación de \ , como lo podría hacer?

ecfisa 04-10-2018 23:45:47

Hola
Cita:

Empezado por Missael (Mensaje 528811)
1.- la selecciona con un botón que ya programe, ese path lo guarda en una variable

Pero... mediante un botón no es posible seleccionar una ruta. Ese botón, ¿ Llama a un TOpenDialog ?, ¿ Maneja el valor de alguna cadena de algún TEdit ? ¿...?


Cita:

3.- la ubicación de la carpeta depende de donde el usuario diga que se va a descargar. ahi se va a guardar.
La misma pregunta anterior, ¿ Donde y como indica el usuario el valor de la ruta ?

Saludos :)

Missael 04-10-2018 23:56:56

Si, cuando da clic en el botón, aparece una pantalla donde escoge el usuario donde guardar su carpeta, utilizo SelectDirectory

Te comparto esa parte de mi código
Código Delphi [-]
procedure TForm2.ChangeClick(Sender: TObject);
begin
  Choose := 'C:\';
    if selectdirectory(Choose, options, 0) then
    begin
      ShowMessage('Directory selected');
      Form2.LLabelDirectory.Caption :=Choose;
    end
    else
    begin
      ShowMessage('Canceled action');
    end;
end;

mRoman 05-10-2018 01:07:17

Con lo que te dijo Movarack (Ansipos) lo puedes solucionar:



Código Delphi [-]
var
  position: Integer;
  cadena_path : String;
begin
  cadena_path:='C:\carperta\subcarpeta1\subcarpeta2\tareas\';
  position := ansipos('tareas', cadena_path);
  delete(cadena_path,1,position);
  Showmessage(cadena_path);
end;

No tengo delphi a la mano para probar el código, pero algo asi deberias aplicar...eso pudiera solucionar tu problema.

Saludos.

ecfisa 05-10-2018 01:45:01

Hola.

Ahora te entiendo. Una opción es que almacenes la ruta a la carpeta, de modo que al salir del form quede guardado el valor y al entrar se recupere.

Un ejemplo:
Código Delphi [-]
...
implementation

uses FileCtrl, IniFiles;

var
  CurrentPath: string;
  options : TSelectDirOpts = [sdAllowCreate, sdPerformCreate, sdPrompt]; // (?)

// Leer la ruta previa (si existe)
procedure TForm1.FormCreate(Sender: TObject);
var
  ini: TIniFile;
begin
  ini := TIniFile.Create(ExtractFilePath(Application.ExeName)+'prg.ini');
  try
    CurrentPath := ini.ReadString(Self.Name, 'LaCarpeta', 'C:\');
  finally
    ini.Free;
  end;
end;


// Elegir ruta
procedure TForm1.btnChangeDirClick(Sender: TObject);
begin
    if FileCtrl.SelectDirectory(CurrentPath, options, 0) then
    begin
      ShowMessage('Directory selected');
      //...
    end
    else
    begin
      ShowMessage('Canceled action');
      //...
    end;
end;

// Guardar nueva ruta (si se cambió)
procedure TForm1.FormDestroy(Sender: TObject);
var
  ini: TIniFile;
begin
  ini := TIniFile.Create(ExtractFilePath(Application.ExeName)+'prg.ini');
  try
    ini.WriteString(Self.Name, 'LaCarpeta', CurrentPath);
  finally
    ini.Free;
  end;
end;
También podes usar el registro de Windows para almacenar la ruta, pero por cuestiones de permisos este modo es mas fiable.

Saludos :)

Pd: Si te sirviera el código de ejemplo avísame y te lo adjunto.

Missael 05-10-2018 19:12:17

Gracias a todos por sus respuestas, ya lo pude resolver, y no lo hubiera logrado sin su ayuda, Muchas gracias por su tiempo para explicarme este tema

Excelentes personas.

mRoman 11-10-2018 19:50:48

Y como lo resolviste...explica aqui...comparte porfa !...tal vez habrá alguien mas con las mismas dudas.

Saludos.


La franja horaria es GMT +2. Ahora son las 19:50:14.

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