Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
21 ошибка прогр... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Имитационное мо... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Реклама
Сейчас на сайте
Гостей: 9
На сайте нет зарегистрированных пользователей

Пользователей: 13,363
новичок: xopumun11
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Выбор наилучших альтернатив с использованием методов оптимизации на Delp...
Моделирование ЭВМ на GPSS (три класса заданий) + Пояснительная записка
База данных студентов на Turbo Pascal (Списки) + Пояснительная записка

Работаем с файлами на Perl
О том, что такое файл писать я надеюсь ненужно, но думаю нужно подумать над тем, что с ними можно делать, как видно из заголовка статьи, на Perl. Ну, приступим ...

В этой статье обсудим:

  • Что такое файловые манипуляторы, и с чем их едят
  • Манипуляции с файлом
  • Работа со строками в файле

    Что такое файловые манипуляторы, и с чем их едят



    Доступ к файлам осуществляется с помощью файловых манипуляторов, которые представляют собой так сказать синоним файла. Они не являются переменными, а поэтому их нельзя непосредственно присваивать другим переменным или передавать в функции (для этого нужно, что называется, пойти другим путем).

    Есть и стандартные Перловские файловые манипуляторы. Они называются STDIN (стандартный ввод), STDOUT (стандартный вывод) и STDERR (стандартный поток ошибок). Например параметры скрипту из формы передаются именно через STDIN (при условии использования метода POST).

    Если понадобится создать копию файлового манипулятора (не файла, а только манипулятора по которому осуществляется доступ к файлу), то можно воспользоваться функцией open (о ней подробнее поговорим позже).


    Пример:
    open(FILL,"file.txt");
    open(FAIL,"<&FILL");

    О присваивании переменным файловых манипуляторов:


    $handle=*FILL;
    или передать его в функцию:
    some_sub(*FILL);

    И под конец скажу, что файловые манипуляторы в Perl используются не только для связи с, собственно, файлом. Они могут быть связаны с каким-нибудь процессом, сокетом и т.д. Но это не входит в тематику статьи.

    Манипуляции с файлом



    Открытие файла осуществляется функцией open.

    open(FFF,"> file.txt");

    Разберемся. У функции три параметра: FFF - название файлового манипулятора (его задаете вы), режим доступа ">" и "file.txt" - имя нужного вам файла. Есть три основных режима: ">" - запись,"<"- чтение, ">>"- добавление в файл.

    Есть еще функция sysopen. Работа с ней не на много сложнее, чем с open, зато с ее помощью вы сможете более детально "сказать" системе о ваших намерениях (то есть то, что вы хотите сделать с файлом).

    В sysopen три обязательных параметра и один необязательный.


    Например:
    sysopen(FH,$name, $flags, $param);

    FH - собственно, файловый манипулятор, $name - имя файла в чистом виде (без ">" и др.). В $flags помещаем число, полученное объединением нижеописанных констант через OR ( | ):





    O_RDONLY
    Только для чтения

    O_WRONLY
    Только для записи

    O_RDWR
    Для чтения и для записи

    O_CREAT
    Если файла нет, создать!

    O_APPEND
    Открытие в режиме присоединения

    O_TRUNC
    Очищаем содержимое при открытии

    Это, конечно, не полный перечень, но здесь перечислены самые необходимые и часто используемые константы.

    И наконец $param. Этот параметр задает маску доступа к файлу и записывается в восьмеричной системе. Обычно используется значение 0666 (значение по умолчанию, то есть если $param опущен), или 0777. Первое значение используется для обычных файлов, второе же для каталогов и исполняемых файлов.

    Пример открытия файла для записи (если не найден - создается):

    sysopen(FH,"data.txt",O_WRONLY|O_TRUNC|O_CREATE);


    Запись в файл делаем функцией print.

    print(FFF "oppa! Пишем в файл!");


    Здесь FFF - имя файлового манипулятора, а строка в кавычках - текст, который мы хотим записать в файл, ассоциированный с FFF.

    Если до попытки открытия файла не существовало, то функция open его создаст, а если файл был, и он был не пустой, то после вышеуказанной функции print, в нем ничего не останется от предыдущей информации, а записана будет та ерунда, которую я там вписал.

    Как уже было сказано, существуют три стандартных файловых манипулятора, и при опущенном файловом манипуляторе функция print осуществит вывод в STDOUT (то же относится к функциям printf и write). Чтобы изменить направление вывода в Perl предусмотрена функция select (правда не только для этого).
    Пример:


    open(F1,"> one.txt");
    print "Файл открыт! Пишем в STDOUT.";
    $old_point=select(F1);
    print "Пишем в файл one.txt";
    select($old_point);
    print "Снова пишем в STDOUT.";
    close(F1);

    Закрываем файл функцией close.

    close(FFF);

    Принцип убирать за собой прививается всем с детства. Давайте не забывать об этом и в программировании, хотя при завершении процесса, в котором был открыт данный файл, файл закрывается автоматически.

    Блокировка файла

    Во-первых для чего? А для того, что если несколько процессов хотят одновременно заполучить доступ к файлу, причем на запись, причем еще и хотят туда что-то писать (кошмар), то представьте, что оказалось бы, если не этот чудный механизм блокировки. Он позволяет, грубо говоря, ставить процессы в очередь. Делаем так:


    open(FIL,"> file.dat");
    flock(FIL,2);
    close(FIL);

    О функциях open и close уже говорили, а на flock остановимся немного подробнее. Она получает два параметра - файловый манипулятор и, образно говоря, категорию блокировки.

  • 1 совместная блокировка (для чтения)
  • 2 монопольная блокировка (для записи)
  • 4 асинхронный запрос блокировки
  • 8 снятие блокировки

    Про снятие блокировки: блокировка автоматически снимается при завершении процесса, вызванного текущим скриптом, либо при закрытии файлового манипулятора, который "привязан" к заблокированному файлу. Если вы снимаете блокировку вручную, будьте аккуратны - вы даете возможность другому процессу делать с (ВНИМАНИЕ!) не закрытым вами файлом все что ему угодно! Последствия могут быть, мягко говоря, неприятные, а грубо говоря - непредсказуемые (для вас непредсказуемые).

    Работа со строками в файле



    Так как именно те файлы, которые содержат строковую информацию составляют наибольший интерес для, собственно, человека, то и речь сейчас пойдет именно о них.

    Для чтения строк из файла используется файловый манипулятор "поставленный" в <>.

    Например:


    open(FIL,"data.txt");
    while(<FIL>)
    {
    # делаем что-то с каждой строкой файла
    }

    Если не указано иначе, то внутри такого цикла используется стандартная переменная "$_", а номер строки записывается в "$.". Так как конец строки обозначается спецсимволом, например "\n", для получения самой строки (без эдакого "хвоста") нужно ее усечь функцией chomp.


    open(FIL,"data.txt");
    while(<FIL>)
    {
    chomp; # отрезается спецсимвол от переменной $_
    print; # пишем $_ на STDOUT
    }

    Можно прочитать строки в массив:


    @strings=<FIL>;
    foreach $line (@strings)
    {
    print $list;
    }



    Для передвижения по файлу используются функции tell и seek.


    open(FIL,"data.txt");
    $position=tell(FIL);
    print "Текущая позиция в файле $position. \n";
    seek(FIL,$position+10,1);
    print "А теперь переместились на 10 байт к концу файла от текущей позиции. \n";
    $position=tell(FIL);
    print "Теперь текущая позиция в файле $position. \n";

    Результат:


    Текущая позиция в файле 0.
    А теперь переместились на 10 байт к концу файла.
    Теперь текущая позиция в файле 10.

    Функция tell принимает в качестве параметра файловый манипулятор, а seek берет три параметра. Первый - файловый манипулятор, второй - смещение в байтах, третий - направление смещение. Есть три направления смещения: 0 - от начала файла, 1 - от текущей позиции, 2 - с конца файла.

    Нельзя сказать, что это все, что нам предлагает Perl для работы с файлами. Будем надеяться, что у меня будет время на то, чтобы написать о том, как работать с каталогами, тонкости при работе с бинарными файлами, объектно-ориентированный подход к управлению файлами и их содержимым.

  • Опубликовал Kest October 31 2008 15:37:03 · 0 Комментариев · 6699 Прочтений · Для печати

    • Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


    Комментарии
    Нет комментариев.
    Добавить комментарий
    Имя:



    smiley smiley smiley smiley smiley smiley smiley smiley smiley
    Запретить смайлики в комментариях

    Введите проверочный код:* =
    Рейтинги
    Рейтинг доступен только для пользователей.

    Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

    Нет данных для оценки.
    Гость
    Имя

    Пароль



    Вы не зарегистрированны?
    Нажмите здесь для регистрации.

    Забыли пароль?
    Запросите новый здесь.
    Поделиться ссылкой
    Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
    Загрузки
    Новые загрузки
    iChat v.7.0 Final...
    iComm v.6.1 - выв...
    Visual Studio 200...
    CodeGear RAD Stud...
    Шаблон для новост...

    Случайные загрузки
    HTMLredaktor
    Globus VCL Extent...
    DelphiX
    Visual Basic Script
    AJAX и PHP. разра...
    PDJPack
    AVIwriter
    Delphi на примерах
    Архив программ
    DeleteEdit
    Dynamic Titles дл...
    Rotolabel
    Калькулятор [Исхо...
    Заставка. Изображ...
    Библия для програ...
    CoolDev TipsSyste...
    База игр
    TelBook
    Удаление своего EXE
    Gold Submitter II...

    Топ загрузок
    Приложение Клие... 100774
    Delphi 7 Enterp... 97832
    Converter AMR<-... 20268
    GPSS World Stud... 17014
    Borland C++Buil... 14191
    Borland Delphi ... 10290
    Turbo Pascal fo... 7373
    Калькулятор [Ис... 5984
    Visual Studio 2... 5207
    Microsoft SQL S... 3661
    Случайные статьи
    Раскрутка сайта в ...
    Использование спец...
    Index TOP 20 (дохо...
    Программно получит...
    Магистральное соед...
    Объекты-функции
    Предварительная по...
    Создание вертикаль...
    Удаление последова...
    «Использование» ша...
    Полноценный отдых ...
    Оценка точности оп...
    Обновленные источн...
    Прежде чем предост...
    Раздел операторов
    Программирование: ...
    Какую из масок выб...
    Как программно пом...
    Еще раз о способах...
    Раскрутка - Seo се...
    Класс TManager
    Шифрование алгорит...
    Исходя из этого, о...
    Взаимосвязь станда...
    Символьные строки....
    Статистика



    Друзья сайта
    Программы, игры


    Полезно
    В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?