Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Чтение из файла (Perl)

11K
02 октября 2008 года
mitrof4nov
68 / / 10.09.2007
Подскажите пожалуйста, будьте любезны как из файла на примере кода вывести записанный в него текст. Сам перл начал учить не так давно, поэтому в таких вещах еще не разобрался. Есть тут в faq раздел по работе с файлами в perl, но таковой темы нет.

Вот пример простой программы: создаем каталог, создаем файлы, переименовываем. Вообщем все. как вывести текст из обоих файлов, подскажите пожалуйста:

Код:
#!/usr/bin/perl
print "Start program...\n";
#смена текущего каталога
$flag=-1;
do {
    print "Enter path to locate copy of log file: ";
    chomp ($scat=<STDIN>);
    if (($scat eq ".") || ($scat eq ".."))
    {
        print "You enter symbol . or ..\n";
        $flag=-1;
    }
    else
    {
        if (-e "$scat") {
            print "You catalog exist\n";
            if (chdir $scat){
                print "Catalog open succesfully\n";
                $flag=0;
            }
            else
            {
                print "Bad path!!!\n";
                $flag=-1;
            }
        }
        else
        {
            print "Catalog not exist\n";
        }
    }
} while ($flag==-1);
do {
if($Index eq "y") {chdir($scat);}
#создание нового рабочего каталога
$cat="OS_01 ";
if ( mkdir("$cat",0777)){
    $dir=$scat.$cat;
    chdir ($dir);
    print "Create catalog $dir\n";
    logger("open");
    #выполнение основных действий программы
    $Index=body();
    print $Index;print"\n";
    if ($Index eq "y")
    {
        close (F);
        unlink(F);
    }
    else
    {
        logger("close");
    }
}
else{
    print "Create catalog failed. Program stop!!!!";
}
} while ($Index eq "y");
#функция записи собыий в лог файл
sub logger{
    ($sec,$min,$hour,$day,$mon,$year)=(localtime(time))[0,1,2,3,4,5];
    $year+=1900;
    #print $_[0];
    if ($_[0] eq "open")
    {
        open (F,">log.txt");
        $msg=$day." ".$month[$mon]." ".$year." - ".$hour.".".$min.".".$sec." - Создан лог файл\n";
        printf F "$msg";
    }
    else
    {
        if ($_[0] eq "close"){
            $msg=$day." ".$month[$mon]." ".$year." - ".$hour.".".$min.".".$sec." - Завершение работы программы\n";
            printf F "$msg";
            close(F);
        }
        else
        {
            $msg=$day." ".$month[$mon]." ".$year." - ".$hour.".".$min.".".$sec." - ".$_[0]."\n";
            printf F "$msg";
        }
    }
}

#главная рабочая функция
sub body{
        if ($dummy eq "y") {logger ("Повторное выполнение программы");}
        #создание трех файлов для примера работы программы
       
        open (File2,">tstFile2.txt");
        logger("Создан файл tstFile2.txt");
        print "Create tstFile2.txt\n";
       
        open (File3,">tstFile3.txt");
        logger("Создан файл tstFile3.txt");
        print "Create tstFile3.txt\n";
       
        printf File2 "Filllz1";
        printf File3 "Filllz2";
       
                chomp($dummy=<STDIN>);
       
               
        #остановка программы и переименование файла tstFile2.txt в tstFile4.txt
        print "\nPress Enter to continue... \n";
        chomp($dummy=<STDIN>);
       
        close (File3);
        rename("tstFile3.txt","tstFile4.txt");
        logger("Переименование файла tstFile3.txt в tstFile4.txt");
        print "Rename file tstFile3.txt to tstFile4.txt\n";
       
        close (File1);
       
       





        #остановка программы и ожидание ответа пользователя
        logger ("Запрос на повтор программы");
        print "reply?[y/n]";
        chomp($dummy=<STDIN>);
    return $dummy;
}



Пробовал так

 
Код:
open(File3, ">tstFile3.txt") or die "Ошибка открытия файла: $!";
print <File3>; # Печать всего файла
close(File3) or die $!;


... не помогло.
11K
02 октября 2008 года
mitrof4nov
68 / / 10.09.2007
Даже простейший код
 
Код:
open(File2, ">tstFile2.txt");
    $line=<File2>;
    while (defined($a=<File2>)) {
    print $a;
    }


Видимо файл пересоздается по новой, удаляя ранее внесенную в него запись. Это как-то можно исправить,помогите пожалуйста.
2
02 октября 2008 года
squirL
5.6K / / 13.08.2003
прочитайте, пожалуйста, perldoc -f open и разберитесь, что такое '>' в open(File2, ">tstFile2.txt");
11K
03 октября 2008 года
mitrof4nov
68 / / 10.09.2007
Спасибо что направили в нужное русло, очень помого.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог