Forum Webscript.Ru
Программирование => Perl => Тема начата: Yaroslav от 01 Июня 2003, 21:59:59
-
После долгих мучений решился спросить у профи совета Пишу вообщем я тендер (1топик и много ответов), поначалу решил сделать так:
Запись всех сообщений файл построчно (дата\\имя\\сообщение). Правильно ли это?
Вопрос 2:
Пролистал кучу книг, но так и не нашел как можно записать в этот файл строку например между 3 и 4 строчкой. Хотелось бы увидеть что то типа этого
open (DATA,$ File);
print DATA $номер строки; #но так что б остались в файле остальные строки
close(DATA);
буду очень благодарен любой информации
-
Yaroslav:
между 3 и 4 строчкой
Напрямки не получится. Обычно все содержимое берут в массив и потом с ним работают. Вставляют/изымают данные и потом весь массив в файл. Мона делать записи фиксированной длинны и ориентироваться на это, но впихнуть запись между двумя существующими не получится. Учи матчасть и используй БД.
-
исходя из этого получается что это самый оптимальный вариант?
$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);
-
Yaroslav
Примерно так, только во время обработки не забудь flock,
И я обычно произвожу обработку, а потом запись...
-
только файл нужно открывать на запись-четение "+<"
что вроде
$str=5; # №строки которую надо вставить
open (FILE, "+flock FILE,2;
@file=;
seek file,0,0;
foreach $line (@file) {
.....
}
flock FILE,8;
close(FILE);
P.S. только нужно убедится что фаил существует
-
вот тут я и попал........
когда писал скрипт, в файле test.txt пронумеровал строки цифрами :)), а на самом то деле у меня там будет текст:((
вот и поучается что строчка if ($line == $str) не работает....
уважаемые знатоки, как дальше быть?
кстати, если поставить flock, а в это время попытается кто то еще записать в файл информацию, что будет, ошибка?
и что значит после flock цифры 2 и 8?
-
Alone:
только файл нужно открывать на запись-четение "+<"
не катит, он начинает записывать все в конец файла и у меня получается в 2 раза больше сообщений :)
-
прикольно я сам спрашиваю сам отвечаю :)) (благодоря вам конечно)
вообщем на данный момент вырисовывается такая картина:
$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);
что вы про это думаете?
-
А не хочешь посмотреть в сторону DBD:XBase ?
-
Glader:
А не хочешь посмотреть в сторону DBD:XBase ?
это как и куда?
-
Заходишь на search.cpan.org, в поле ввода набираешь DBD::XBase, скачиваешь модуль, читаешь его документацию. Вкратце - работа с dbf файлами через SQL-запросы.
-
спасибо, но я еще с Perl не разобрался...