Forum Webscript.Ru

Программирование => Perl => Тема начата: Yaroslav от 01 Июня 2003, 21:59:59

Название: работа со строками
Отправлено: Yaroslav от 01 Июня 2003, 21:59:59
После долгих мучений решился спросить у профи совета Пишу вообщем я тендер (1топик и много ответов), поначалу решил сделать так:
Запись всех сообщений файл построчно (дата\\имя\\сообщение). Правильно ли это?

Вопрос 2:
Пролистал кучу книг, но так и не нашел как можно записать в этот файл строку например между 3 и 4 строчкой. Хотелось бы увидеть что то типа этого
open (DATA,$ File);
print DATA $номер строки; #но так что б остались в файле остальные строки
close(DATA);

буду очень благодарен любой информации
Название: работа со строками
Отправлено: Mog. от 02 Июня 2003, 08:16:28
Цитировать
Yaroslav:
между 3 и 4 строчкой
Напрямки не получится. Обычно все содержимое берут в массив и потом с ним работают. Вставляют/изымают данные и потом весь массив в файл. Мона делать записи фиксированной длинны и ориентироваться на это, но впихнуть запись между двумя существующими не получится. Учи матчасть и используй БД.
Название: работа со строками
Отправлено: Yaroslav от 02 Июня 2003, 10:08:42
исходя из этого получается что это самый оптимальный вариант?

$str=5;        # №строки которую надо вставить
open (FILE, "test.txt");
@file=;
close(FILE);
open (FILE, ">test.txt");
foreach $line (@file) {
if ($line == $str) { print FILE "текст новой строки\\n$line"; }
else { print FILE "$line"; }
}
close(FILE);
Название: работа со строками
Отправлено: Phoinix от 02 Июня 2003, 11:03:02
Yaroslav
Примерно так, только во время обработки не забудь flock,
И я обычно произвожу обработку, а потом запись...
Название: работа со строками
Отправлено: Alone от 02 Июня 2003, 12:51:07
только файл нужно открывать на запись-четение "+<"
что вроде
$str=5; # №строки которую надо вставить
open (FILE, "+flock FILE,2;
@file=;
seek file,0,0;
foreach $line (@file) {
 .....
}
flock FILE,8;
close(FILE);

P.S. только нужно убедится что фаил существует
Название: работа со строками
Отправлено: Yaroslav от 02 Июня 2003, 13:45:01
вот тут я и попал........
когда писал скрипт, в файле test.txt пронумеровал строки цифрами :)), а на самом то деле у меня там будет текст:((
вот и поучается что строчка if ($line == $str) не работает....
уважаемые знатоки, как дальше быть?

кстати, если поставить flock, а в это время попытается кто то еще записать в файл информацию, что будет, ошибка?
и что значит после flock цифры 2 и 8?
Название: работа со строками
Отправлено: Yaroslav от 02 Июня 2003, 14:56:05
Цитировать
Alone:
только файл нужно открывать на запись-четение "+<"

не катит, он начинает записывать все в конец файла и у меня получается в 2 раза больше сообщений :)
Название: работа со строками
Отправлено: Yaroslav от 02 Июня 2003, 14:59:55
прикольно я сам спрашиваю сам отвечаю :)) (благодоря вам конечно)
вообщем на данный момент вырисовывается такая картина:

$str=5;
$s=1;

open (FILE, "test.txt");
@file=;
close(FILE);
open (FILE, ">test.txt");
flock FILE,2;
foreach $line (@file) {
if ($s == $str) { print FILE "новая строчка\\n $line"; }
else { print FILE "$line"; }
$s++; }
flock FILE,8;
close(FILE);

что вы про это думаете?
Название: работа со строками
Отправлено: Glader от 03 Июня 2003, 10:02:07
А не хочешь посмотреть в сторону DBD:XBase ?
Название: работа со строками
Отправлено: Yaroslav от 03 Июня 2003, 18:40:13
Цитировать
Glader:
А не хочешь посмотреть в сторону DBD:XBase ?

это как и куда?
Название: работа со строками
Отправлено: Glader от 16 Июня 2003, 10:49:30
Заходишь на search.cpan.org, в поле ввода набираешь DBD::XBase, скачиваешь модуль, читаешь его документацию. Вкратце - работа с dbf файлами через SQL-запросы.
Название: работа со строками
Отправлено: Yaroslav от 18 Июня 2003, 10:51:09
спасибо, но я еще с Perl не разобрался...