Автор Тема: работа со строками  (Прочитано 4977 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
работа со строками
« : 01 Июня 2003, 21:59:59 »
После долгих мучений решился спросить у профи совета Пишу вообщем я тендер (1топик и много ответов), поначалу решил сделать так:
Запись всех сообщений файл построчно (дата\\имя\\сообщение). Правильно ли это?

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

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

Оффлайн Mog.

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 828
  • +0/-0
  • 0
    • Просмотр профиля
работа со строками
« Ответ #1 : 02 Июня 2003, 08:16:28 »
Цитировать
Yaroslav:
между 3 и 4 строчкой
Напрямки не получится. Обычно все содержимое берут в массив и потом с ним работают. Вставляют/изымают данные и потом весь массив в файл. Мона делать записи фиксированной длинны и ориентироваться на это, но впихнуть запись между двумя существующими не получится. Учи матчасть и используй БД.
Все болезни от нервов, только сифилис от удовольствия

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
работа со строками
« Ответ #2 : 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

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
работа со строками
« Ответ #3 : 02 Июня 2003, 11:03:02 »
Yaroslav
Примерно так, только во время обработки не забудь flock,
И я обычно произвожу обработку, а потом запись...

Оффлайн Alone

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 182
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
работа со строками
« Ответ #4 : 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

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
работа со строками
« Ответ #5 : 02 Июня 2003, 13:45:01 »
вот тут я и попал........
когда писал скрипт, в файле test.txt пронумеровал строки цифрами :)), а на самом то деле у меня там будет текст:((
вот и поучается что строчка if ($line == $str) не работает....
уважаемые знатоки, как дальше быть?

кстати, если поставить flock, а в это время попытается кто то еще записать в файл информацию, что будет, ошибка?
и что значит после flock цифры 2 и 8?
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
работа со строками
« Ответ #6 : 02 Июня 2003, 14:56:05 »
Цитировать
Alone:
только файл нужно открывать на запись-четение "+<"

не катит, он начинает записывать все в конец файла и у меня получается в 2 раза больше сообщений :)
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
работа со строками
« Ответ #7 : 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

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 66
  • +0/-0
  • 0
    • Просмотр профиля
    • http://glader.ru
работа со строками
« Ответ #8 : 03 Июня 2003, 10:02:07 »
А не хочешь посмотреть в сторону DBD:XBase ?

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
работа со строками
« Ответ #9 : 03 Июня 2003, 18:40:13 »
Цитировать
Glader:
А не хочешь посмотреть в сторону DBD:XBase ?

это как и куда?
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

Оффлайн Glader

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 66
  • +0/-0
  • 0
    • Просмотр профиля
    • http://glader.ru
работа со строками
« Ответ #10 : 16 Июня 2003, 10:49:30 »
Заходишь на search.cpan.org, в поле ввода набираешь DBD::XBase, скачиваешь модуль, читаешь его документацию. Вкратце - работа с dbf файлами через SQL-запросы.

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
работа со строками
« Ответ #11 : 18 Июня 2003, 10:51:09 »
спасибо, но я еще с Perl не разобрался...
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28