Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pravilno formiranje UNIX putanje, odstraniti ../ i prethodni dir - kako?

[es] :: Pascal / Delphi / Kylix :: Pravilno formiranje UNIX putanje, odstraniti ../ i prethodni dir - kako?

[ Pregleda: 4400 | Odgovora: 16 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Član broj: 32202
Poruke: 4391
212.200.145.*

Sajt: https://avramovic.info


+46 Profil

icon Pravilno formiranje UNIX putanje, odstraniti ../ i prethodni dir - kako?20.11.2006. u 12:51 - pre 211 meseci
Pozdrav,
trebalo bi mi čisto pascal rešenje jer radim u Lazarusu (FreePascalu) u vidu funkcije koja će mi, recimo, od stringa: /home/avram/../pera/ napraviti pravu putanju a to je /home/pera/ (dvotačka poništava prethodni dir). Pa ako neko zna kako bi ovo moglo da se odradi lako, nek' se izjasni sada ili nek' ćuti zauvek
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Pravilno formiranje UNIX putanje, odstraniti ../ i prethodni dir - kako?20.11.2006. u 13:02 - pre 211 meseci
Rastavi string na mestima gde se nalazi / u, recimo, TStringList ili kako vec hoces, zatim kreni od nazad i proveravaj svaki string u listi. Ako je string .. tada brises taj i sledeci (ides u nazad i zado sledeci nije I + 1 nego I - 1). Na kraju ces u listi imati stringove koje kada spojis daju putanju bez ..
Mozda bi mogao da protrcis kroz funkcije za rad sa imenima foldera i datoteka... mozda vec ima nesto gotovo.
 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Član broj: 32202
Poruke: 4391
212.200.145.*

Sajt: https://avramovic.info


+46 Profil

icon Re: Pravilno formiranje UNIX putanje, odstraniti ../ i prethodni dir - kako?20.11.2006. u 13:09 - pre 211 meseci
Znao sam i ja tako da odradim (bar teoretski ) ali mi se činilo da je prilično sporo. A Lazarus nema neku dokumentaciju (bar ja nisam našao nikakvu) gde bih mogao da pogledam to... ok... pogledaću još malo.
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Član broj: 32202
Poruke: 4391
212.200.145.*

Sajt: https://avramovic.info


+46 Profil

icon Re: Pravilno formiranje UNIX putanje, odstraniti ../ i prethodni dir - kako?20.11.2006. u 13:38 - pre 211 meseci
Evo ga, ne znam koliko je brzo, ali vrsi posao:

Code:
//explode string
function explode(delimiter:char;text:string):TStringList;
begin
Result := TStringList.Create;
Result.Delimiter:=delimiter;
Result.DelimitedText:=text;
end;

function fixpath(path:string):string;
var lista:TStringList;
    broj, loop:integer;
    novapath:string;
begin
  lista:=TStringList.Create;
  lista:=explode('/',path);
  broj:=lista.Count-1;
  for loop:=broj downto 1 do begin
    if lista[loop] = '..' then begin
      lista[loop]:='';
      lista[loop-1]:='';
    end;
    if lista[loop] = '.' then begin
      lista[loop]:='';
    end;
  end;
  
  novapath := '';
  for loop := 0 to lista.Count -1 do begin
    if trim(lista[loop])<>'' then novapath := novapath + '/' + lista[loop];
  end;
  novapath := novapath + '/';
  lista.free;
  Result:=trim(novapath);
end;


edit: Ponekad mi vrati grešku List index out of bounds (4) a ne znam zašto. Sačekajte malo dok ispravim f-ju...

edit2: Imao sam problema sa brisanjem elemenata (tamo gde je lista[loop-1]) ali ovako radi

[Ovu poruku je menjao Nemanja Avramović dana 20.11.2006. u 15:05 GMT+1]
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Pravilno formiranje UNIX putanje, odstraniti ../ i prethodni dir - kako?20.11.2006. u 14:11 - pre 211 meseci
Proveri samo da li dobro radi sa putanjama koje imaju razmak. Cini mi se da TStringList razdvaja string i po Delimiter i po razmaku.
 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Član broj: 32202
Poruke: 4391
212.200.145.*

Sajt: https://avramovic.info


+46 Profil

icon Re: Pravilno formiranje UNIX putanje, odstraniti ../ i prethodni dir - kako?20.11.2006. u 14:21 - pre 211 meseci
Hmmm... u pravu si... ne radi kako treba, tj. razdvaja i po razmaku. Imaš li neku ideju kako rešiti?
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Pravilno formiranje UNIX putanje, odstraniti ../ i prethodni dir - kako?20.11.2006. u 14:32 - pre 211 meseci
Zar nije brze:

Code:
function FixUnixPath(APath : String) : String;
var
  C1 : Integer;
  LP : Integer;
  FD : Integer;
begin
  LP := Pos('/..', APath);
  While LP <> 0 Do
  Begin
    FD := 1;
    For C1 := LP - 1 downto 1 Do
      If APath[C1] = '/' Then
      Begin
        FD := C1;
        Break;
      End;

    Delete(APath, FD, LP - FD + 3);
    LP := Pos('/..', APath);
  End;

  result := APath;
end;
 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Član broj: 32202
Poruke: 4391
212.200.145.*

Sajt: https://avramovic.info


+46 Profil

icon Re: Pravilno formiranje UNIX putanje, odstraniti ../ i prethodni dir - kako?20.11.2006. u 14:47 - pre 211 meseci
Čini mi se da si izostavio jedno end; i result:=APath, ali evo ispravljene verzije:

Code:
function FixUnixPath(APath : String) : String;
var
  C1 : Integer;
  LP : Integer;
  FD : Integer;
begin
  LP := Pos('/..', APath);
  While LP <> 0 Do
  Begin
    FD := 1;
    For C1 := LP - 1 downto 1 Do
      If APath[C1] = '/' Then
      Begin
        FD := C1;
        Break;
      End;

    Delete(APath, FD, LP - FD + 3);
    LP := Pos('/..', APath);
   end;
    result:=APath;
end;


Hvala reiserko
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Pravilno formiranje UNIX putanje, odstraniti ../ i prethodni dir - kako?20.11.2006. u 15:00 - pre 211 meseci
rasto opet si high, obe funkcije su potpuno iste :)

np

[Ovu poruku je menjao reiser dana 20.11.2006. u 18:18 GMT+1]
 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Član broj: 32202
Poruke: 4391
212.200.145.*

Sajt: https://avramovic.info


+46 Profil

icon Re: Pravilno formiranje UNIX putanje, odstraniti ../ i prethodni dir - kako?20.11.2006. u 15:42 - pre 211 meseci
Citat:
reiser: rasto opet si high...


Možda, a možda sam zaboravio da iskopiram poslednja dva reda (a možda si i ti radi brzu izmenu odmah pošto si postovao, a? A? A!? )
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Pravilno formiranje UNIX putanje, odstraniti ../ i prethodni dir - kako?20.11.2006. u 17:03 - pre 211 meseci
E, tako... sad kad ste lepo ispisali sve, mogu da vam kazem kako se zove funkcija u FPC koja to radi FExpand i nalazi se u unit-u dos (ne brini, nije vezana samo za DOS operativni sistem... radi i na Win, Lin, MacOS...).
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Pravilno formiranje UNIX putanje, odstraniti ../ i prethodni dir - kako?20.11.2006. u 17:19 - pre 211 meseci
*clap*
 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Član broj: 32202
Poruke: 4391
212.200.145.*

Sajt: https://avramovic.info


+46 Profil

icon Re: Pravilno formiranje UNIX putanje, odstraniti ../ i prethodni dir - kako?20.11.2006. u 17:47 - pre 211 meseci
Daj srki reci odakle izvlačiš to? :) Daj link za neki (dobar) help.

edit: Kad sam već tu, jel ima f-ja ekvivalentna funkciji MinimizeName u Delphiju, ali u Lazarusu?
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Pravilno formiranje UNIX putanje, odstraniti ../ i prethodni dir - kako?20.11.2006. u 20:05 - pre 211 meseci
Hajde, hajde Svako ima svoje tajne.. procitas par puta source code lazarusa i otprilike znas gde se sta nalazi

Kako bi ti napisao tu funkciju (MinimizeName)?
 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Član broj: 32202
Poruke: 4391
212.200.145.*

Sajt: https://avramovic.info


+46 Profil

icon Re: Pravilno formiranje UNIX putanje, odstraniti ../ i prethodni dir - kako?20.11.2006. u 20:57 - pre 211 meseci
Posaljes joj string (putanju) tipa /home/avram/Desktop/downloads/fajl.tar.gz i canvas (npr. canvas od label1) i ono skrati na width canvasa tako da dobiješ /home/avram/.../fajl.tar.gz

Ta funkcija (i minimizename i minimizefilename) postoji u Delphiju.

Da čitam source Lazarusa? Par puta?! No way...
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Pravilno formiranje UNIX putanje, odstraniti ../ i prethodni dir - kako?21.11.2006. u 09:06 - pre 211 meseci
Hehe... ne mogu da nadjem funkciju koja to radi... pa, nista... moraces da je napises sam. Evo kako to Delphi radi, pa ti samo doteraj kod.
Code:
procedure CutFirstDirectory(var S: TFileName);
var
  Root: Boolean;
  P: Integer;
begin
  if S = '\' then
    S := ''
  else
  begin
    if S[1] = '\' then
    begin
      Root := True;
      Delete(S, 1, 1);
    end
    else
      Root := False;
    if S[1] = '.' then
      Delete(S, 1, 4);
    P := AnsiPos('\',S);
    if P <> 0 then
    begin
      Delete(S, 1, P);
      S := '...\' + S;
    end
    else
      S := '';
    if Root then
      S := '\' + S;
  end;
end;

function MinimizeName(const Filename: TFileName; Canvas: TCanvas;
  MaxLen: Integer): TFileName;
var
  Drive: TFileName;
  Dir: TFileName;
  Name: TFileName;
begin
  Result := FileName;
  Dir := ExtractFilePath(Result);
  Name := ExtractFileName(Result);

  if (Length(Dir) >= 2) and (Dir[2] = ':') then
  begin
    Drive := Copy(Dir, 1, 2);
    Delete(Dir, 1, 2);
  end
  else
    Drive := '';
  while ((Dir <> '') or (Drive <> '')) and (Canvas.TextWidth(Result) > MaxLen) do
  begin
    if Dir = '\...\' then
    begin
      Drive := '';
      Dir := '...\';
    end
    else if Dir = '' then
      Drive := ''
    else
      CutFirstDirectory(Dir);
    Result := Drive + Dir + Name;
  end;
end;

 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Član broj: 32202
Poruke: 4391
212.200.145.*

Sajt: https://avramovic.info


+46 Profil

icon Re: Pravilno formiranje UNIX putanje, odstraniti ../ i prethodni dir - kako?21.11.2006. u 10:47 - pre 211 meseci
Hm... hvala, pogledaću to malo detaljnije kasnije
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Pravilno formiranje UNIX putanje, odstraniti ../ i prethodni dir - kako?

[ Pregleda: 4400 | Odgovora: 16 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.