Не сте регистриран! Регистрирайте се БЕЗПЛАТНО, за да използвате услугите на сайта!

   Рубрики
 
 
 
 

 Форуми
» SEO и оптимизация
» Всичко за PHP и Perl
» Всичко за C, C++ и .NET
» Всичко за Java и JSP
» Всичко за SQL и MySQL
» Всичко за XHTML и CSS
» Презентация на сайтове
 Файлове и директории
  1. Файлове и директории
  2. Файлове и директории - 2
     
Автор  eminem (05.02.2005 14:28)  съобщение до автора
Погледнат  3060 пъти  добави към любими
Оценка  добави коментар
Гласове  --  изпрати на приятел
Коментари  (0)  абонирай се за Perl
    Страница 1 / 2

 



Файлове
Отваряне

CODE
1
2
3
4
5
6
7
$stuff="c:/scripts/stuff.txt";

open (STUFF, $stuff) or die $!;

while (<STUFF>) {
print "Line number $. is : $_";
}
  
Задаваме във един скалар пътя до даден файл. Функцията open има две променливи, който трябва да се зададат. Първата е името, което ще се даде на отворения файл, което ще се използва за достъп до него, наричано още filehandle. Втората променлива е името на файла, в случая скалара $stuff го съдържа. Функцията die прекъсва програмата и изкарва последната системна грешка ($!), ако отварянето на файла не е било успешно.
Предполагам вече се досещате какво е това - while (<STUFF>). <> - този оператор наричан диамант служи за четене от файлове. В него се поставя filehandle за да се прочита файла. Функцията while прочита един ред от файла изпълнява нещо с него и после пак докато се стигне до последния ред. Специалната променлива $. - съдържа номера на, реда от който се чете в момента.

Запис

CODE
1
2
3
4
5
6
$out="c:/scripts/out.txt";

open OUT, ">$out" or die "Cannot open $out for write :$!";
for $i (1..10) {
print OUT "$i : The time is now : ",scalar(localtime),"n";
}
В този скрипт първо отваряме файл и го означаваме с filehandle OUT. Функцията for се изпълнява 10 пъти, като всеки път записва във файла out.txt текущата дата и час. Когато на print му се посочи даден filehandle, в случая OUT, тя знае че записите трябва да се правят в този filehandle. Ако не е зададен filehandle, използва по подразбиране STDOUT, което е монитора на компютъра.
@ARGV: Аргументи от командния ред
Perl притежава специален масив наречен @ARGV. Това е списък от аргументи следващи името на скрипта на командния ред. Стартирайте следния код:

CODE
1
2
3
4
5
perl myscript.pl hello world how are you

foreach
(@ARGV) {
print "$_n";
}

Друг начин да направите същото е :

CODE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
while (<>) {
print ;
}

или:

print <> ;
Директории
glob

@fa=<C:/*.*>; # Масива се попълва със всички файлове на C:/
@fa=<C:/*.html>; # Попълва се само от файлове с разширение html
@ga=glob ("C:/*.com"); # Прави същото, но тук може да се задава и със скалар, допуска интерполация
@ga=glob ("$ааа/*.com"); # например в $ааа е зададен пътя

open(SESAME, "filename"); # прочита от съществуващ файл
open(SESAME, "<filename"); # същото
open(SESAME, ">filename"); # създава файл и записва в него
open(SESAME, ">>filename"); # допълва съществуващ файл
open(SESAME, [/quote] output-pipe-command"); # изпраща информация
open(SESAME,
"input-pipe-command [quote]); # приема информация

$dir=shift; # shifts @ARGV

chdir $dir or die "Can't chdir to $dir:$!n" if $dir;

while (<*>) {
print "Fo
und a file: $_n" if -f;
}
Функцията chdir променя текущата директория, от която може да се чете, на друга подадена на chdir, в случая, която е зададена от скалара $dir, който пък си взима стойността от командния ред. След това while прочита всички файлове в текущата директория, преминава ги през теста -f, и ако са файлове се изпечатват на екрана.

CODE
1
2
3
4
5
6
7
8
$dir =shift;
$type='txt';

chdir $dir or die "Can't chdir to $dir:$!n" if $dir;

while (<*.$type>) {
print "Found a file: $_n";
}
Тук в директорията ще се търсят файлове само с разширение зададено от $type, което в случая е txt.
readdir - как да четем от директория
Има и фукция readdir, с която може да направим по друг начин горния пример:

CODE
1
2
3
4
5
6
7
$dir= shift || '.';

opendir DIR, $dir or die "Can't open directory $dir: $!n";

while ($file= readdir DIR) {
print "Found a file: $filen";
}
Първата разлика с горния пример, е че ако няма стойност в @ARGV, то $dir = ., което ще е текущата директория. След това отваряме директорията, анаголично на командата open използвана за файлове, но тук е opendir и задаваме възможност, ако директорията не може да бъде отворена то да нои се съобщи. Функцията readdir прочита съдържание на един ред и го подава на скалара $file.

@files=readdir(DIR);
По този начин се прочита цялото съдържание на директорията и попълваме с нея масива @files.
За да затворим един filehandle на файл или директория използваме close или closedir.
Функциите telldir и seekdir
По-долу е представен работещ скрипт, който ще Ви даде представа за използването и значението на двете функции telldir и seekdir.

  1. Променяме местоположението и вече всички файлове който ще отваряме
  2. ще се отварят от директорията D:/
chdir "D:/";
  1. Отваряме директорията . - което означава, че ще отворим D:/
opendir (GLAV,".");
  1. Прочитаме всеки файл или директория който се намират в D:/ (не трябва да Ви смущава, че това е
  2. дял на диска, просто така ми е по удобно за писане - разглеждайте го като директория
  3. все едно, че е C:/my documents/mitko/
while ($a=readdir GLAV) {
  1. Подаваме на $b къде се намира манипулатора на директорията в момента
  2. Това е число което отговаря на файл или директория която е прочетена последна
$b=telldir GLAV;
  1. Изпечатваме дадения файл или директория и позицията му
print "$an$bn";
  1. Създаваме масива @dirtell който ще съдържа всички позиции на файловете и директориите в D:/
  2. за да може да ги използваме после с функцията seekdir
push @dirtell,$b;
}
  1. По-долу на мястото на XXX в $dirtell[XXX] въведете някаква стойност валидна за дължината на масива
  2. и ще видите, че ще бъде прочетена файла или директорията който отговаря на посочената стойност
CODE
1
2
3
seekdir GLAV,$dirtell[XXX];
$v=readdir GLAV;
print "$vn"



  Следваща страница >> 


Ключови думи: perl програмиране файл директория скрипт


Още уроци от тази рубрика


 
  • Подобни теми от myLinks
 

 1 посетител чете този урок (0 потребители и 1 гост)  
Активни потребители: ---
   
  

Еmail  
 

 

 
  • Интересно от Софтуер
 



IT-PLACE.NET © 2004 - 2008