Вывод нескольких строчек из файла

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

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

Вывод нескольких строчек из файла

Сообщение valera » 10 фев 2014 14:16

Привет народ. Помогите со скриптом.
Есть файл .txt, размером 10мб
Нужно, чтобы по команде бот брал заданное кол-во строчек из файла, идущих подряд и писал их в канал по команде
valera
 
Сообщения: 3
Зарегистрирован: 10 фев 2014 14:09
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Версия бота: Eggdrop 1.6.21+suzi

Re: Вывод нескольких строчек из файла

Сообщение tvrsh » 10 фев 2014 15:24

Читал вот это? post47.html#p47
Из какого места файла брать строчки?
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: Вывод нескольких строчек из файла

Сообщение valera » 10 фев 2014 15:39

tvrsh писал(а):Читал вот это? post47.html#p47
Из какого места файла брать строчки?


читал, в кодинге совсем не силен)
строчки брать из рандомного места, но не по одной, а по заданному числу

не могу понять, как сделать, чтобы брать не одну строчку, а например 5

TCL: [ Скачать ] [ Скрыть ]
#settings#
set txtfolder "/home/eggdrop/bot/scripts"

#binds#
bind pub - !txt LQ:txt

#script#

proc LQ:txt {nick mask handle chan text} {
global txtfolder
set random_q [ LQ:load $txtfolder/old.txt ]
putmsg $chan "[lindex $random_q [rand [llength  $random_q]]]"
}

proc LQ:load {file} {
putlog "load $file"
set fd [open $file r]
while {![eof $fd]} {
 gets $fd dline
 lappend var $dline
 }
close $fd
return $var
}
Последний раз редактировалось tvrsh 10 фев 2014 16:10, всего редактировалось 1 раз.
Причина: подсветка синтаксиса - TCL
valera
 
Сообщения: 3
Зарегистрирован: 10 фев 2014 14:09
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Версия бота: Eggdrop 1.6.21+suzi

Re: Вывод нескольких строчек из файла

Сообщение tvrsh » 10 фев 2014 16:23

Попробуй этот код:
TCL: [ Скачать ] [ Скрыть ]
# Биндим команду
bind pub - !txt txtproc

# Начинается процедура
proc txtproc {nick uhost hand chan text} {

# Открываем условие. Если после команды число от 0 до 10, то выполнятся действия в первых скобках.
if {[isnumber $text] && $text > 0 && $text <= 10} {
# Имя файла который будем читать.
set fname "yourfile.txt"

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

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

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

# Теперь разбиваем данные на отдельные строки.
set lines [split $data "\n"]

# получаем количество строк в файле.
set numlines [llength $lines]

# Выбираем номер случайной строки используя функцию rand.
set num [rand $numlines]

# Устанавливаем счетчик
set i 0
# Условие: пока счетчик меньше или равен числу в команде, то ...
while {$i <= $text} {
    # Выводим в канал строку начиная со случайной...
    putserv "PRIVMSG $chan :[lindex $lines [expr $num + $i]]"    
    #  и каждый раз увеличивая ее номер на счетчик
    incr i
}
} else {
# А эти действия для случая когда условия выше не выполняются.
    putserv "PRIVMSG $chan :$nick, в команде укажите число строк от 0 до 10"
    return 0
}
}
Have fun.
-
Получить помощь можно на каналах #egghelp в сети IrcNet.ru и #eggdrop в сети RusNet(Ключ канала eggdrop).
Перед созданием новой темы внимательно читайте Правила оформления топиков.

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

Re: Вывод нескольких строчек из файла

Сообщение valera » 10 фев 2014 16:32

tvrsh, спасибо большое. то что нужно, все работает
valera
 
Сообщения: 3
Зарегистрирован: 10 фев 2014 14:09
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Версия бота: Eggdrop 1.6.21+suzi

Re: Вывод нескольких строчек из файла

Сообщение Bart » 13 окт 2014 20:48

tvrsh писал(а):Попробуй этот код:
TCL: [ Скачать ] [ Скрыть ]
# Биндим команду
bind pub - !txt txtproc

# Начинается процедура
proc txtproc {nick uhost hand chan text} {

# Открываем условие. Если после команды число от 0 до 10, то выполнятся действия в первых скобках.
if {[isnumber $text] && $text > 0 && $text <= 10} {
# Имя файла который будем читать.
set fname "yourfile.txt"

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

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

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

# Теперь разбиваем данные на отдельные строки.
set lines [split $data "\n"]

# получаем количество строк в файле.
set numlines [llength $lines]

# Выбираем номер случайной строки используя функцию rand.
set num [rand $numlines]

# Устанавливаем счетчик
set i 0
# Условие: пока счетчик меньше или равен числу в команде, то ...
while {$i <= $text} {
    # Выводим в канал строку начиная со случайной...
    putserv "PRIVMSG $chan :[lindex $lines [expr $num + $i]]"    
    #  и каждый раз увеличивая ее номер на счетчик
    incr i
}
} else {
# А эти действия для случая когда условия выше не выполняются.
    putserv "PRIVMSG $chan :$nick, в команде укажите число строк от 0 до 10"
    return 0
}
}


А если данные в файле в таком формате:
текст1
текст2
текст3
Как вывести эти строчки в канал в таком формате?
текст1 текст2 текст3
То есть, в строчку.
И что самое важное, чтобы не ограничивалось одним сообщением, если строк будет больше 100, например.
Аватара пользователя
Bart
 
Сообщения: 24
Зарегистрирован: 05 фев 2014 01:35
Благодарил (а): 17 раз.
Поблагодарили: 0 раз.
Версия бота: Eggdrop 1.6.21+suzi

Re: Вывод нескольких строчек из файла

Сообщение Vertigo » 13 окт 2014 21:03

Как вывести эти строчки в канал в таком формате?
текст1 текст2 текст3
То есть, в строчку.


Заменить часть кода
TCL: [ Скачать ] [ Скрыть ]
# Устанавливаем счетчик
set i 0
# Условие: пока счетчик меньше или равен числу в команде, то ...
while {$i <= $text} {
     # Выводим в канал строку начиная со случайной...
     putserv "PRIVMSG $chan :[lindex $lines [expr $num + $i]]"    
     #  и каждый раз увеличивая ее номер на счетчик
     incr i
}
на
TCL: [ Скачать ] [ Скрыть ]
# Устанавливаем счетчик
set i 0
# Устанавливаем переменную со списком
set list [list]
# Условие: пока счетчик меньше или равен числу в команде, то ...
while {$i <= $text} {
     # Добавляем в список строку начиная со случайной...
     lappend list [lindex $lines [expr $num + $i]]    
     #  и каждый раз увеличивая ее номер на счетчик
     incr i
}
# Выводим полученный список в канал
putserv "PRIVMSG $chan :[join $list]"

За это сообщение автора Vertigo поблагодарил:
Bart (13 окт 2014 22:48)
Аватара пользователя
Vertigo
 
Сообщения: 107
Зарегистрирован: 20 авг 2008 23:49
Откуда: Москва
Благодарил (а): 0 раз.
Поблагодарили: 37 раз.
Версия бота: Eggdrop 1.8

Re: Вывод нескольких строчек из файла

Сообщение Bart » 13 окт 2014 22:00

Работает, спасибо.

[21:58] <~warlock> !test 5
[21:58] <bot> тест1 тест2 тест3 тест4 тест5 тест6
Ок.
[21:58] <~warlock> !test 50
[21:59] <bot> тест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 тест29 тест30 тест31 тест32 тест33 тест34 тест35 тест36 тест37 тест38 тест39 тест40 тест41 тест42 т
Вот остальные слова можно перевести на новое сообщение?
Аватара пользователя
Bart
 
Сообщения: 24
Зарегистрирован: 05 фев 2014 01:35
Благодарил (а): 17 раз.
Поблагодарили: 0 раз.
Версия бота: Eggdrop 1.6.21+suzi

Re: Вывод нескольких строчек из файла

Сообщение Vertigo » 13 окт 2014 22:29

Вот остальные слова можно перевести на новое сообщение?

Посмотри процедуру вывода с разбиением по строкам в скриптах tvrsh. В том же, eweather2, например. Процедура называется
# Работа с длинными строками
proc ::eweather::print {text chan} {

Копируешь её себе и отправляешь текст на канал через ::твой_неймспейс::print [join $list] $chan. Если с неймспейсами пока туго, копируй процедуру просто как print (в тикле нет стандартной такой команды). И вызывать тогда просто через print [join $list] $chan. Успехов.

За это сообщение автора Vertigo поблагодарил:
Bart (13 окт 2014 22:48)
Аватара пользователя
Vertigo
 
Сообщения: 107
Зарегистрирован: 20 авг 2008 23:49
Откуда: Москва
Благодарил (а): 0 раз.
Поблагодарили: 37 раз.
Версия бота: Eggdrop 1.8

Re: Вывод нескольких строчек из файла

Сообщение Bart » 13 окт 2014 22:48

Получилось. :)
Аватара пользователя
Bart
 
Сообщения: 24
Зарегистрирован: 05 фев 2014 01:35
Благодарил (а): 17 раз.
Поблагодарили: 0 раз.
Версия бота: Eggdrop 1.6.21+suzi


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

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 1

cron