Вывод из файла

Просьбы о написании новых скриптов или поиске уже существующих.

Модератор: Модераторы

Вывод из файла

Сообщение ssd » 26 сен 2010 23:17

Добрый вечер. Очень нужен скрипт, который будет каждый час и 10мин проверять текстовый файл на сайте. В файле будут цифры, если цифры поменялись, то бот их будет писать на канале один раз и еще что бы можно было по команде вывести цифры на канал из данного текстового файла.
Буду очень благодарен за любую помощь.
http://zoneirc.ru/eset_upd.html - Обновляй свой ESET NOD32 бесплатно.
Аватара пользователя
ssd
 
Сообщения: 33
Зарегистрирован: 28 ноя 2009 06:42
Благодарил (а): 6 раз.
Поблагодарили: 1 раз.
Версия бота: Eggdrop 1.8

Re: Вывод из файла

Сообщение tvrsh » 27 сен 2010 23:08

Проверку каждый час десять минут надо делать с помощью таймеров. Это немного сложнее чем используя bind time. На последнем и остановимся.

TCL: [ Скачать ] [ Скрыть ]
# Биндим на каждые 00 минут. То-есть будет срабатывать раз в час.
bind time - "00 * * * *" timeccheck

# Начинаем процедуру в которой указываем канал куда будем писать новые цифры из файла.
proc timecheck {min hour day month year} {
set channel "#chan"


Далее открываем тему Работа с файлами и читаем там пункт номер 1.
Копипастим оттуда все строки кроме последней.

TCL: [ Скачать ] [ Скрыть ]
# Имя файла который будем читать.
set fname "yourfile.txt"

# Открываем доступ к файлу для чтения (мы не ловим ошибки, однако
# можно использовать catch {} в случае если файл отсутствует.
set fp [open $fname "r"]

# Тут мы считываем все данные из файла.
set data [read -nonewline $fp]

# Закрываем файл.
close $fp


Ну вот, все цифры у нас теперь в переменной data. Сохраняем ее во временный файл.

TCL: [ Скачать ] [ Скрыть ]
# Имя файла в который будем писать.
set fname "timedfile.txt"

# Открываем доступ к файлу для записи (мы не ловим ошибки, однако
# можно использовать catch {} в случае если файл отсутствует.
set fp [open $fname "w"]

# Тут мы записываем все данные файл.
puts $fp $data

# Закрываем файл.
close $fp


Далее, при следующей проверки мы должны снова считать данные из твоего файла и сравнить из с данными из временного, если результаты совпадут то оставить все как есть, если нет то вывести новые данные в канал и перезаписать их во временный файл. Выглядеть это будет примерно так:

TCL: [ Скачать ] [ Скрыть ]
# Проверяем наличие временного файла.
if {[file exists "timedfile.txt"]} {

# Считываем данные из обоих файлов и сравниваем их.
# Имя файла который будем читать.
set fname "yourfile.txt"

# Открываем доступ к файлу для чтения (мы не ловим ошибки, однако
# можно использовать catch {} в случае если файл отсутствует.
set fp [open $fname "r"]

# Тут мы считываем все данные из файла.
set data [read -nonewline $fp]

# Закрываем файл.
close $fp

# Имя файла который будем читать.
set fname "timedfile.txt"

# Открываем доступ к файлу для чтения (мы не ловим ошибки, однако
# можно использовать catch {} в случае если файл отсутствует.
set fp [open $fname "r"]

# Тут мы считываем все данные из файла.
set data2 [read -nonewline $fp]

# Закрываем файл.
close $fp

    # Если данные разные до переписываем данные из основного файла во временный.
    if {$data != $data2} {

    # Имя файла в который будем писать.
    set fname "timedfile.txt"

    # Открываем доступ к файлу для записи (мы не ловим ошибки, однако
    # можно использовать catch {} в случае если файл отсутствует.
    set fp [open $fname "w"]

    # Тут мы записываем все данные файл.
    puts $fp $data

    # Закрываем файл.
    close $fp
    }
}


И итоговый скрипт:
TCL: [ Скачать ] [ Скрыть ]
bind time - "00 * * * *" timeccheck
proc timecheck {min hour day month year} {
set channel "#chan"
    if {[file exists "timedfile.txt"]} {
        set fname "yourfile.txt"
        set fp [open $fname "r"]
        set data [read -nonewline $fp]
        close $fp
        set fname "timedfile.txt"
        set fp [open $fname "r"]
        set data2 [read -nonewline $fp]
        close $fp
            if {$data != $data2} {
                foreach line [split $data "\n"] {
                    putserv "PRIVMSG $channel :$line"
                }
                set fname "timedfile.txt"
                set fp [open $fname "w"]
                puts $fp $data
                close $fp
            }
    }
}


Ничего не тестировал. Может не работать.
Have fun.
-
Получить помощь можно на каналах #egghelp в сети IrcNet.ru и #eggdrop в сети RusNet(Ключ канала eggdrop).
Перед созданием новой темы внимательно читайте Правила оформления топиков.
Аватара пользователя
tvrsh
 
Сообщения: 1230
Зарегистрирован: 19 авг 2008 16:55
Откуда: Russian Federation, Podolsk
Благодарил (а): 6 раз.
Поблагодарили: 130 раз.
Версия бота: Eggdrop 1.6.20+suzi

Re: Вывод из файла

Сообщение ssd » 01 окт 2010 01:09

tvrsh, спасибо большое. На днях попробую проверить.
http://zoneirc.ru/eset_upd.html - Обновляй свой ESET NOD32 бесплатно.
Аватара пользователя
ssd
 
Сообщения: 33
Зарегистрирован: 28 ноя 2009 06:42
Благодарил (а): 6 раз.
Поблагодарили: 1 раз.
Версия бота: Eggdrop 1.8

Re: Вывод из файла

Сообщение ssd » 15 окт 2010 00:56

tvrsh, Не покажешь как сделать. В файле к примеру так 1111 2222, что бы бот выводил не всю строку а цифры 111 т.е до пробела которые. Спасибо за ранее.
http://zoneirc.ru/eset_upd.html - Обновляй свой ESET NOD32 бесплатно.
Аватара пользователя
ssd
 
Сообщения: 33
Зарегистрирован: 28 ноя 2009 06:42
Благодарил (а): 6 раз.
Поблагодарили: 1 раз.
Версия бота: Eggdrop 1.8

Re: Вывод из файла

Сообщение tvrsh » 15 окт 2010 22:45

ssd писал(а):tvrsh, Не покажешь как сделать. В файле к примеру так 1111 2222, что бы бот выводил не всю строку а цифры 111 т.е до пробела которые. Спасибо за ранее.

#egghelp @ IrcNet.ru писал(а):[22:44:21] <@tvrsh> $$ set infile "111 222 333"; return [lindex [split $infile] 0]
[22:44:21] <+bionic> Return: 111 - 0.114 ms.
Have fun.
-
Получить помощь можно на каналах #egghelp в сети IrcNet.ru и #eggdrop в сети RusNet(Ключ канала eggdrop).
Перед созданием новой темы внимательно читайте Правила оформления топиков.
Аватара пользователя
tvrsh
 
Сообщения: 1230
Зарегистрирован: 19 авг 2008 16:55
Откуда: Russian Federation, Podolsk
Благодарил (а): 6 раз.
Поблагодарили: 130 раз.
Версия бота: Eggdrop 1.6.20+suzi

Re: Вывод из файла

Сообщение wr` » 13 апр 2012 16:30

а если файл который будем читать на другом сервере,что нибудь от этого меняется?
tvrsh писал(а):# Имя файла который будем читать.
set fname "yourfile.txt"

Здесь прописываем путь до файла?
Аватара пользователя
wr`
 
Сообщения: 121
Зарегистрирован: 26 май 2009 21:17
Благодарил (а): 19 раз.
Поблагодарили: 0 раз.
Версия бота: Eggdrop 1.6.21+suzi

Re: Вывод из файла

Сообщение tvrsh » 13 апр 2012 16:58

Да, здесь.
set fname "хттп:\\твойсайт.ру/yourfile.txt"
Have fun.
-
Получить помощь можно на каналах #egghelp в сети IrcNet.ru и #eggdrop в сети RusNet(Ключ канала eggdrop).
Перед созданием новой темы внимательно читайте Правила оформления топиков.

За это сообщение автора tvrsh поблагодарил:
wr` (13 апр 2012 20:46)
Аватара пользователя
tvrsh
 
Сообщения: 1230
Зарегистрирован: 19 авг 2008 16:55
Откуда: Russian Federation, Podolsk
Благодарил (а): 6 раз.
Поблагодарили: 130 раз.
Версия бота: Eggdrop 1.6.20+suzi


Вернуться в Заявки на скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

cron