Pathtruncate

Description

[Mis à jour]

Hello,

Voici ma deuxième publication, un découpeur de chemin.

Passer de c:\dossier\dossier2\ à :

c:\dossier\
c:\dossier\dossier2\

Ce petit code qui rendra peut être service, à été concu dans le but de traiter des fichiers texte (log) et non pas de lire directement une arborescence sur le disque.

Le code source affiché n'est que la fonction, pour une mise en situation vous pouvez télécharger le zip qui lui utilise l'explorateur pour extraire un chemin puis utiliser ma fonction "PathTruncate".

Voila, j'espère vous avoir mieux renseigné quant au pourquoi du comment de ce source.

@pluche

Source / Exemple :


Function PathTruncate(Source:String):TstringList;

Var
temp,strtemp,strbck:string;
pathdata,drivedata:string;
slcount,i,cpos:integer;
Output:Tstringlist;
delim:String;

begin
// Initialisation des variables
slcount:=0;
cpos:=0;
i:=0;

Output := TStringList.Create;

// Premier découpage (récupération 'x:\' ou '\\')
if copy(source,2,1) = ':' then  begin
                                pathdata:=copy(source,4,length(source));
                                drivedata:=copy(source,0,3);
                                end else

if copy(source,2,1) = '\' then  begin
                                pathdata:=copy(source,3,length(source));
                                drivedata:=copy(source,0,2);
                                end else
                                    begin
                                    Pathdata:=source;
                                    Drivedata:='';
                                    end;

temp:=pathdata;
strtemp:=pathdata;

//compter le nombre de '\' ou '/'

if Pos('\',pathdata) > 1 then delim:='\' else delim:='/';

        repeat
        temp:=copy(temp,pos(delim,temp)+1,length(temp));
        inc(slcount);
        until pos(delim,temp)=0;

//découpage
inc(i);
strtemp:=copy(strtemp,cpos,pos(delim,strtemp));
cpos:=length(strtemp)+1;
strbck:=strtemp;

Output.Add(drivedata+strtemp);

if i<slcount then
        begin
              repeat
                inc(i);
                strtemp:=pathdata;
                strtemp:=copy(strtemp,cpos,length(strtemp));
                strtemp:=copy(strtemp,0,pos(delim,strtemp));
                cpos:=cpos+length(strtemp);
                strbck:=strbck+strtemp;
                strtemp:=strbck;

                Output.Add(drivedata+strtemp);
              until i=slcount;
        end;

     Result:=output;

end;

Codes Sources

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.