IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Веб-программирование (http://www.imho.ws/forumdisplay.php?f=29)
-   -   Php и тектовые файлы (http://www.imho.ws/showthread.php?t=41114)

Goryn 16.10.2003 19:41

Php и тектовые файлы
 
У меня вопрос, связанный с попыткой перейти с Perl на PHP.

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

Есть ли подобная вещь в PHP?

RaZEr 16.10.2003 20:05

Есть, нет ... писать пять минут. Чтобы открыть файл как массив строк, используй file() ... хочешь поменять по номеру - измени в массиве, затем implode("\r\n",$file_arr) и fwrite() ...

Goryn 17.10.2003 16:42

Спасибо за совет, но, видимо, я не совсем ясно пояснил, что имею в виду.

То, что предлагаешь ты , состоит из нескольких этапов:
1) считывание файла в память ЦЕЛИКОМ
2) обработка в памяти
3) запись в файл целиком.

Это очевидный вариант, но он обладает рядом существенных минусов:
1) происходит чтение/запись ОГРОМНОГО массива данных
2) необходимо заботится о блокировки файла на время работы с ним
и т.д и т.п.

Меня же интересует вариант другой. Я привязываю к идентификатору файл таким образом, что для меня он выглядит уже как массив.
Я обращаюсь к его конкретной строке по ее номеру, и модуль сам находит ее и делает что мне надо. При этом он работает только с нужной мне строкой. Фактически это работа с DBM-базой данных.

Пример: у меня есть текстовый конфикурационный файл, в первой строке которого находится счеткик. Тогда чтобы мне считать текушее его показание для использования в дальнейшем, при этом увеличив индекс на 1 надо всего лишь 3 строки + добавление модуля в начале скрипта (код дан на Perl):

Код:

use DB_File;
...
$numobj=tie(@numline, "DB_File", "имя_текстового_файла", O_RDWR|O_CREAT, 0666, $DB_RECNO); # привязываем файл
$orgnum=$numline[0]=$numline[0]+1; # считываем индекс счетчика в переменную $orgnum
undef $numobj; untie @numline; # отвязываем файл

Собственно, аналог вот чего мне хотелось бы найти в PHP

RaZEr 17.10.2003 17:31

Я бы на твоем месте не изобретал велосипед и использовал БД.


Часовой пояс GMT +4, время: 11:08.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.