PDA

Ver la Versión Completa : Cortar path de diferente longitud


Missael
04-10-2018, 19:42:51
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, 19:45:39
Bien, pero el ejemplo confunde, ¿"exposicion" de dónde ha salido?

Missael
04-10-2018, 19: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, 20: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, 20: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, 20: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, 21: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, 21: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, 21:10:51
¡Buscas la palabra!


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, 21:21:27
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, 21:22:06
¡Buscas la palabra!



http://www.delphibasics.co.uk/RTL.asp?Name=ansipos

Lo pruebo y te informo movorack, muchas gracias

Missael
04-10-2018, 21: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, 22:45:47
Hola

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 ? ¿...?


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, 22: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
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, 00:07:17
Con lo que te dijo Movarack (Ansipos) lo puedes solucionar:




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, 00: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:

...
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, 18: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, 18:50:48
Y como lo resolviste...explica aqui...comparte porfa !...tal vez habrá alguien mas con las mismas dudas.

Saludos.