Jump to content

apgūstot PERL


lusis987
 Share

Recommended Posts

Nu jau esmu ķēries pie programmēšanas valoda ar nosaukumu - Perl.

Šī brīža uzdevums kas jāizpilda:

 

Uzrakstīt skriptu PERLī, kurš nolasa visu datņu nosaukumus komandrindā norādītajā katalogā (ja komandrindā parametra nav, ņem tekošo katalogu) un ieliek tos masīvā. Pēc tam iziet cauri masīvām ar foreach un izvadīt uz ekrāna atsevišķi datnes vārdu un datnes paplašinājumus rindu pa rindai

formātā "Nosaukums: ...... Paplašinājums: ......... "

 

sadalīt datnes nosaukumu pašā nosaukumā un paplašinājumā vajag ar regulārajām izteiksmēm.

 

Šobrīd esmu uzrakstījis sākumu, bet jau nestrādā. :)

Pie ceļa ievadīšanas piem ( C:\F ) ( iekš c diska f mape man ir ;) )

 

Izmet erroru,ka -readdir() attempted on invalid dirhandle IMD

Nesaprotu, kāpēc neatrod mapi.

 

Pagaidām vajadzētu atrisināt šo problēmu :)

 

ps

Fails glabājas uz servera, kam piekļūstu izmantojot Putty, ja nu tas kaut ko maina.

Link to comment
Share on other sites

Google?

http://www.google.com/search?q=readdir()&oq=readdir()&sugexp=chrome,mod=10&sourceid=chrome&ie=UTF-8#hl=en&safe=off&tbo=d&sclient=psy-ab&q=readdir()+perl&oq=readdir()+perl&gs_l=serp.3..0i10i30j0i30l3.3184.3962.0.4224.5.5.0.0.0.0.121.351.3j1.4.0.les%3Bcrnk_timediscounta..0.0...1c.1.KheLBKGqAmQ&pbx=1&bav=on.2,or.r_gc.r_pw.r_qf.&fp=30ac5f17b29a5ede&bpcl=39650382&biw=927&bih=946

 

http://perldoc.perl.org/functions/readdir.html

 

http://perlmeme.org/faqs/file_io/directory_listing.html

 

Es to nesauktu par programēšanas valodas apgūšanu, bet gan par domāt negribēšanu un hvz bakstīšanos.

  • Patīk 1
Link to comment
Share on other sites

Pēdējais links no Tevis dotajiem ir vienīgais ko nebiju redzējis. Protams, ka domāšu tālāk kas un kā. Negaidīšu gatavus piemērus. Vajag mājienus, ieteikumus....

Lai nedomātu, ka neko neesmu sācis, tad lūk:

#!/usr/bin/perl -w

print "Ievadi celu uz direktoriju ";
$sourcedir=<>;
opendir(IMD, "$sourcedir");
@thefiles= readdir(IMD);
print @thefiles;
closedir(IMD);

Labots - lusis987
Link to comment
Share on other sites

Nu jaa, buushu ljoti riebiigs. Saprashana nav vispaar nekaadas autoram.FAils atrodas uz servera, bet gramstaas gar lokaalo failu. Kods nav autora rakstiits, bet parasts paraugs. KAa shii rindinja var izpildiities?

$sourcedir=<>;
Labots - Grisha
Link to comment
Share on other sites

Nu, a kā es varu zināt kas tur par mapēm uz servera, lai norādītu ceļu? Kods ir salasīts no visa, ko esmu lasījis un cik esmu sapratis.

$sourcedir=<>;

 

Kā es saprtu:

$sourcedir - vienkāršs mainīgais

<> - ievadīt vērtību, ko piešķir mainīgajam.

Kas tur ne tā, lai nestrādātu? Nu, jā varu vēl pielikt chomp, bet diez vai tas kaut ko mainīs.

Link to comment
Share on other sites

No Tevis dotā linka neredzu neko tādu, ko nebūtu jau izmantojis. Liekas ka bija domāts kaut kasmazliet cits.

Link to comment
Share on other sites

lusis987: tu neiebrauci. ieleja tev iedeva piemēru komandrindas argumentu saņemšanai un apstrādei.

Use $ARGV[n] to display argument.

Use $#ARGV to get total number of passed argument to a perl script.

 

kur vēl skaidrāk var uzrakstīt ? Vienīgi - protams to masīvu var izmantot kā gribas , ne tikai izvadei.

Labots - zeds
Link to comment
Share on other sites

Tātad man ir jāizmanto tas $#ARGV tad kad gribu saņemt to ceļu uz direktoriju? Paskaidro latviski... Mēģināšu manu variantu.

 

Tikko sapratu, ka man nav dotas tiesības līst tur pie kādiem failiem. Spriežu no šī:

ls: cannot open directory /root: Permission denied
********@Ubuntu11Stud:~$ ls: cannot open directory /root: Permission denied
-bash: ls:: command not found
********@Ubuntu11Stud:~$ sudo su
sudo: unable to resolve host Ubuntu11Stud
[sudo] password for ********:
******** is not in the sudoers file.  This incident will be reported.

 

Tad man jebkurā variantā nekas nedarbosies vai ne? Būs jāparunā ar skolotāju.

Labots - lusis987
Link to comment
Share on other sites

versatile

komandrindas parametrs ir šitas, piemēram:

ping 127.0.0.1 -n 100 -l 256

kur: ping ir izpildāmais skripts

127.0.0.1 ir nepieciešamais parametrs

n un l ir papildus parametri ar vērtībām 100 un 256, attiecīgi

 

Tātad, komandrindas parametrs norāda to, ka Tu uzraksti garu penteri, nospied entr un viss tiek izdarīts, nevis parādās "ievadiet direktoriju"...

Link to comment
Share on other sites

Tad kad tikšu pie skolas neta vada, tad testēšu un skatīšos kas un kā.

Kā noskaidroju - jāburas pa savu direktoriju.

Vienīgi nevaru iebraukt tajā Perl'ē... Ar kādu komandu to sadalīšanu (bāze un paplašinājums)? Piemēru nevajag tikai funkc. nosaukumu.

Papildināts

Redzu ka neviens neko diži man negrib palīdzēt. Esmu izbūries cauri tām regulārajām izteiksmēm un cenšos sadalīt to faila nosaukumu bāzē un paplašinājumā. Šī brīža kods :
 

if ($file =~/ [^[a-zA-Z0-9]+] /) {
$base=$1;
}


Varētu izskaidrot kas tur īsti nav kārtībā? Tā uzreiz iebraukt visās niansēs neesmu sējīgs.

 

Paldies visiem "palīdzētājiem"... Tā kā varētu nebūt vienīgais kas kaut ko tādu mēģina..... Lūk, mans gala rezultāts.

 

#!/usr/bin/perl -w
opendir(IMD, $ENV{"HOME"});
@thefiles = readdir(IMD);
foreach $file (@thefiles) {
	$base='';
	$ext='';
		
		if ($file =~/^([a-zA-Z0-9]+)\.?([a-zA-Z0-9]+)?/) {
		$base=$1;
		$ext=$2;
		} 

           
	    if ($base) {print "filename: $base";}
		if ($base and $ext) {print ";\t";}
		
		if ($ext) {print "extension: $ext";}
        if ($base || $ext) {print "\n";}
}
closedir(IMD);
Labots - lusis987
Link to comment
Share on other sites

Izveido kontu, vai pieraksties esošajā, lai komentētu

Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas

Izveidot jaunu kontu

Piereģistrējies un izveido jaunu kontu, tas būs viegli!

Reģistrēt jaunu kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...