brunchik
написал 11 января 2011 года в 11:20 (3175 просмотров)
Ведет себя
неопределенно; открыл 5 тем в форуме, оставил 22 комментария на сайте.
Народ выручайте! Уже не могу, второй день не могу решить проблему.Скрипт должен открывать фаил на запись и сверять с веденым с клавиатуры числом.Если оно найдено то закрыть файл, а если нет то дописать в конец данное число.Скрипт я написан но он вместо желаемого результата то если в файле есть запись он дописывает или ее нету то все равно пишит.Или один раз запишит а в остальные не хочет.Помогите решить проблему.
<code class="auto ruby">#!/usr/bin/perl $s=<>; chomp($s); unless (-e 'file') { system('touch file'); } open(file,"+<file"); @file=<file>; STOP: foreach $file(@file) { chomp($file); if($file eq $s) { print "Запись найдена\n"; last STOP; } print "Запись ненайдена\n"; print file $s,"\n";
close file; }
close file;
print "The End\n"; <>;
Что то при вставки кода форма зависает</code>
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
ecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.
Какой интересный код :-)
Судя по нему, действительно print file $s выполняется в любом случае. А если оно выполняется в любом случае, то чего еще вы ждете? Код-то кто писал?
И да, метка со STOP — это ужас! Она не нужна, такой «подход» только ухудшает читабельность.
Сделайте переменную-флаг, которой присваивайте значение 1, если число было найдено в файле. После просмотра всего содержимого файла проверяйте: флаг == 1 — ничего дописывать не надо, флаг == 0 — надо дописать.
Код писал лично я.Больше некому.
Переменную-флаг я не умею делать.Подскажи как.Метка STOP нужна.А если в файле 100000 строк, а число находится в 889 строке.То зачем тогда читать остальные строки? Или эта переменная-флаг дальше найденой не читает строки? Функцию дописал в 28 строк.Пока сам себе не поможишь никто не поможит.Расскажи все же про флаги.Может я переделаю код.
Идея с флагом такая:
P.S. О, сломалась вставка кода :-(
Попробуем.Смысл тут такой: начинается цикл с того что если $flag=1 тоцикл завершается, а если нет то $flag приравнивается к 1 и проверяется условие и начинается второй цикл.Ладно спасибо будем пробывать.А как отрывать файл на чтение c +<?
Про режимы, в которых файл открывается, можно почитать, например, тут: www.perlfect.com/articles/perlfile.shtml
В данном случае хорошо подойдет read+append.
А может знаешь модуль для работы с js.Просто мне нужно из консоли нажать на js кнопку на сайте.Через web жмется а через консоль нет.
Про какую консоль речь? JS выполняется на стороне клиента. Тебе нужен клиент для UNIX-консоли с поддержкой JS? Для имитирования обычного нажатия на кнопку формы достаточно сформировать на основе параметров этой формы POST- или GET-запрос.
на сайте есть кнопка js через модуль LWP нужно ее нажать.get и post там не прокатывают.
LWP не умеет JavaScript.
Я знаю.Ну че ни как нельзя передать по HTTP о нажатии js кнопки? Может так через модуль HTTP?
Результат работы JS передается по HTTP. Но этот результат надо вычислить, выполнив JS. Это может быть и просто, и сложно — зависит от кода на JS.
Слысл скрипта таков: при первом запуске скрипта файла нет.Его я создаю так system(’touch file’)unless (-e 'file’).; Я открываю так на запись +<.Если так >> то массив пустой.
Посмотри код.Может я что то не так делаю? Уже не могу.Заранее приготовил файл с 10 строками разных чисел.Выбираю из них 1 и ввожу и мне пишит запись окончина.Т.е. число есть и еще раз его в конце пишит.А если открою еще то пишит найдено.В чем проблема?
#!/usr/bin/perl
chomp($s=<>);
system(’touch ip.log’) unless (-e 'l.log’);
open(ip,«+<l.log»);
@l=<l>;
$fl=0;
foreach $l(@l)
{
last if($fl);
$fl=1 if($l eq $s);
}
if($fl)
{
print «Запись найдена\n»;
close l;
}
else
{
print l «$s»;
print «Запись добавлена\n»;
close l;
}
<>;
system(’touch ip.log’) unless (-e 'l.log’); — опечатка в имени файла.
Далее открывается файл с хэндлером ip, а считывание идет по <l>.
И напоследок: chomp для ввода (<>) делается, а для файла (<l>) — нет.
Спасибо.Просто забыл ее написать.В вопросе не забыл.Ладно с js потом.Как модуль ssh называется? А то telnet пароль в открытом види передает
Для этого же придумали CPAN: search.cpan.org/search?query=ssh&mode=all
Я знаю про этот сайт.Там tz а я их устанавливать не умею.Ты не знаешь почему я когда скачиваю по LWP фаил скачивается и исчезает?
Для установки (и не только) модулей из CPAN есть удобная одноименная консольная утилита («cpan»).
Про скачивается и исчезает — видимо, что-то делается не так :-) Надо просто обратиться к документации по модулю.
как ей пользоваться?
я че то в консоли через ssh подключиться не могу к роутеру.расскажи как.а то я искал найти не могу.