sziasztok!
van valami egyszerű mód arra, hogyha egy változóban levő (pl. $uncpath="\\server\source\dir\file") útvonalat akarom kettévágni úgy, hogy kb ez legyen a végeredmény:
$p1="\\server\"
$p2="\source\dir\file"
korábban olvastam valami olyan split szerű eszközről, ami úgy vág, hogy n darab előfordulás után a "maradék" az utsó darabban van akkor is, ha lenne még benne szerparáló tag. hm... lehet nehéz így érteni, de kb olyanra gondolok, hogy kiindulva:
$uncpath="\\server\dir\to\file";
($p1,p2)=darabolgató(/\/);
magyarul az első \ után már nem nézi mi van tovább, rakja szépen be a p2-be. rosszul emlékszem, hogy volt valami ilyen util? jó lenne, ha nem kéne erre (nem mintha nagy kaland lenne) csinálni sub-ot. persze, ha nem megy másképp, akkor megcsinálom, de nem találom azt, amivel eleve meg lehet csinálni ezt...
- 1235 megtekintés
Hozzászólások
en split -et hasznalnek, szepen arrayba beramolja a darbokat
$uncpath = "\\server\source\dir\file"
@outputarray = split(/\\+/, $uncpath);
# \\ - escape karakter kell a backslashnek
# + a ket szeparator kozotti ures mezot figyelmen kivul hagyja
@outputarray = ("server", "source", "dir", "file");
- A hozzászóláshoz be kell jelentkezni
ezzel az lehet a baj, hogy csak a server és a file tagok "egyértelműek". de ha az útvonal több részből áll, akkor bukhat. nem akartam "terelni a gondolatot" előre, ezért csak most írom le én mivel csinálom most (csak kényelmetlen). az index és az rindex eljárásokkal vágok. úgy ahogy megcsinálható ami kell, de randa kicsit és nem tudom, hogy "átbújhat-e rajta" valami úgy, hogy nem ellenőrzöm...
--
xterm
- A hozzászóláshoz be kell jelentkezni
ez biztos azt csinalja amit te akarsz
my ($p1,$p2) = ($uncpath =~ /^(\\{2}[^\\]+)(.+)$/);
- A hozzászóláshoz be kell jelentkezni
ejha. ezt el tart egy ideig míg értelmezem :) viszont tényleg pont azt csinálja, amit akartam. hiába, a regexp az művészet :) köszi!
--
xterm
- A hozzászóláshoz be kell jelentkezni
nem ertem ez miert nem eleg - lesz egy array-ed, aminek az elso tagja a server, az utolso tagja a file. Sot mitobb a masodik tagja a tombnek a source-t fogja tartalmazni.
azaz
$outputarray[0]="server"
$outputarray[1]="source"
$outputarray[-1]="file"
#ami kozte van meg path to
akar ki is shift(); elheted a server nevet az arraybol kulon es akkor tenyeleg ugy fog kinezni ahogy szeretned
- A hozzászóláshoz be kell jelentkezni
szeparálja a tagokat, ez tény, csak utána ha pl. az útvonalra van szükségem, akkor "össze kell szerelnem". tehát a megoldás jó, csak van szebb, azt kerestem :)
--
xterm
- A hozzászóláshoz be kell jelentkezni
$uncpath=/^(..[^\\]+)(\\.+)$/;
$p1=$1.'\\';
$p2=$2;
Nem túl szép, de működő. A regex első csoportja lesz a bevezető két karakter (két backslash, de minek vizsgálni :), utána addig, amíg nem backslash. A végén a backslash már nem lesz része, ezért kell utólag mögé fűzni (bár nem tudom, miért van rá szükséged. A második csoport a maradék, az elején a backslashsel.
Szerintem egyszerűbb az index():
$i=index($uncpath,'\\',2);
$p1=substr($uncpath,0,$i+1);
$p2=substr($uncpath,$i);
Aztán lehet kedvenc módomon :)
($p1,$p2)=split(/(?<=[^\\])\\)/,$uncpath,2);
$p1.='\\';
$p2="\\$p2";
Itt a lényeg, hogy a regex az első két backslashre nem illeszkedik, mert az első előtt nincs karakter, a második előtt pedig backslash van.
Ebben az a szép, hogy nincs plusz egy változó, mint az előbb, és nem kell az egész stringen végigmennie, mint az elsőben.
- A hozzászóláshoz be kell jelentkezni
ezt is köszi, megemésztem.
--
xterm
- A hozzászóláshoz be kell jelentkezni
Azt lehet tudni, hogy az a <= nyilacska mit csinal ott pontosan? en meg ilyen allatot nem lattam.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
nem per utan levo per re matchol ebben az esetben
- A hozzászóláshoz be kell jelentkezni
Utóvizsgálat. Az adott pozíción ellenőrzi, hogy megelőző rész megfelel-e a feltételnek.
- A hozzászóláshoz be kell jelentkezni