Навигация
Главная
Поиск
Форум
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
Реклама
Сейчас на сайте
Гостей: 8
На сайте нет зарегистрированных пользователей

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

моделирование процесса поступления заявок в ЭВМ на GPSS + Пояснительная ...
Игра Sokoban на Delphi + Блок схемы
Диплом RSA, ЭЦП, сертификаты, шифрование на C#

Работаем с файлами на 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 Комментариев · 6697 Прочтений · Для печати

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


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



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

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

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

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

    Пароль



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

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

    Случайные загрузки
    Создание лабиринт...
    StartMark
    PCX
    CaptionButton
    Программирование ...
    Х. М. Дейтел, П. ...
    Midi
    DS_Group
    PBFoldder
    GamesBase 3.0
    Animation (Пример...
    Удаление своего EXE
    PrevInst
    IIIDTrans
    FreeNet
    База предприятий ...
    WebReg v1.3
    WinAmp
    OnlineIP
    Drag&Drop

    Топ загрузок
    Приложение Клие... 100774
    Delphi 7 Enterp... 97829
    Converter AMR<-... 20268
    GPSS World Stud... 17014
    Borland C++Buil... 14191
    Borland Delphi ... 10290
    Turbo Pascal fo... 7373
    Калькулятор [Ис... 5981
    Visual Studio 2... 5207
    Microsoft SQL S... 3661
    Случайные статьи
    Проектирование экр...
    Проверка достоверн...
    Записать в текстов...
    Табулирование функ...
    Процедура LineRel ...
    Дополнительные фак...
    Бизнес в Шотландии.
    Локальные сети с ш...
    Вы можете сразу от...
    В этой главеГруппо...
    Передача символьно...
    Выбор ключевых сло...
    Сортировка
    Организация запрос...
    Mill Trade (доход ...
    Как подключиться к...
    Интерфейс физическ...
    Создание настраива...
    Преобразование иде...
    Последнее подразум...
    Чего мы хотим от п...
    После утверждения ...
    Казино Колумбус
    Функции
    Париматч: киберспо...
    Статистика



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


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