Перейти к содержимому


Скрипт для создания вопросов викторины


Сообщений в теме: 13

#1 Юрий765

    Профи

  • Пользователи
  • PipPipPipPipPip
  • 493 сообщений
  • ГородКалужская ОБЛ

Отправлено 01 Март 2010 - 00:03

написал скрипт для создания вопросов викторины...
Опишу как с ним работать :)
/**
 * Скрипт для расширения команд чата
 * Автор: Юрий765
 */

import ru.jimbot.modules.AbstractServer;
import ru.jimbot.util.*;
import ru.jimbot.modules.chat.*;
import ru.jimbot.modules.*;

//Установка скрипта как обработчика команды
if(in.equals("install")){
	cmd.addCommand("!txt", new Cmd("!txt","",39,name));
	out="Ok";
	return;
}


try{
String s = "";
	//Прочитаем текст из файла
      BufferedReader r = new BufferedReader(new InputStreamReader(new FileInputStream("./victorina.txt"), "windows-1251"));
      while (r.ready())
        s = s + r.readLine() + "\n";
       r.close();        
       //Заеняем все что нам надо дабы мускул разобрался в текстовике
        s = s.replace("'","");
        s = s.replace("|","', '");
        s = s.replace("\n","');\nINSERT INTO `victorina` VALUES ('");
       // s = s.replace("","");
        //запишим в фаил запросов на викторину  
        OutputStreamWriter ow = new OutputStreamWriter(new FileOutputStream("./victorina.sql",true),"windows-1251");   
        ow.write(s);   
        ow.close(); 
} catch (Exception ex) {
    ex.printStackTrace();
    proc.mq.add(uin,"Ошибка "+ex.getMessage());
} 
Создать файл victorina.txt ссодержащий до 3,5 тыс вопросов...
Данный скрипт делает из вопросв викторины для IRC вопросы под базу..
До:
Скрытый текст
После:
Скрытый текст
Види, что нету ида...
Создаем базу вида:
CREATE TABLE `victorina` (
  `question` varchar(255) NOT NULL,
  `answer` varchar(255) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=131 ;
И добвляем наши запросики в базу..
Теперь нужен ид для вопросов....
Выполняем следущее:
ALTER TABLE `victorina` ADD `id` INT( 11 ) AUTO_INCREMENT PRIMARY KEY FIRST ;
Или
Изображение
Будьте внимательнее не накосячьте
Результат:
Скрытый текст
АХТУНГ это касается любителей халявы и прочего всего такого
Максимум строчек в файле не больше 3,5 тысяч!!!!!!!!!!!!!!! Иначе тупо заглючи, так же лучше не полениться и запустить новый двиг дабы чат не завис... Я када тестил лоханулся Так же первая и последняя строки выходного файла не соответствуют запросу тобишь удалить нах

Сообщение отредактировал mmaximm: 14 Апрель 2010 - 10:33


#2 fraer72

    Профи

  • Специалисты
  • PipPipPipPipPip
  • 1 429 сообщений

Отправлено 01 Март 2010 - 00:05

Спасибо.

#3 Юрий

    Профи

  • Специалисты
  • PipPipPipPipPip
  • 1 196 сообщений

Отправлено 01 Март 2010 - 00:06

А зачем скрипт, если это можно сделать текстовым редактором?

#4 F1aME

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 189 сообщений
  • ГородКиров

Отправлено 01 Март 2010 - 00:07

Автор молодец, хорошо постарался :rolleyes:

#5 fraer72

    Профи

  • Специалисты
  • PipPipPipPipPip
  • 1 429 сообщений

Отправлено 01 Март 2010 - 00:08

Ну можно улучшить скрипт что бы он сразу в БД записывал.

#6 Юрий765

    Профи

  • Пользователи
  • PipPipPipPipPip
  • 493 сообщений
  • ГородКалужская ОБЛ

Отправлено 01 Март 2010 - 00:26

Да ребят, что то еще сказать хотел....
Может получиться такая шняга, она в принципе и будет:
Геометрический орнамент, узор в виде изогнутых линий или полос, образующих ряд спиралей (в изобразительном искусстве).', 'меандр');
INSERT INTO `victorina` VALUES ('Предметы комнатной обстановки (столы, стулья, диваны и т.п.).', 'мебель');
INSERT INTO `victorina` VALUES ('Знак отличия в виде круглой металлической пластинки с различными рельефными изображениями и надписями, выдаваемый в награду за или в память.', 'медаль');
INSERT INTO `victorina` VALUES ('Медицинское высшее учебное заведение; медицинский вуз.', 'медвуз');
INSERT INTO `victorina` VALUES ('Мастер, занимающийся изготовлением или починкой медных изделий, посуды.', 'медник');
INSERT INTO `victorina` VALUES ('Кишечнополостное морское животное с прозрачным студенистым телом, снабженным щупальцами.', 'медуза');
INSERT INTO `victorina` VALUES ('Средний уровень воды в реке, озере.', 'межень');
INSERT INTO `victorina` VALUES ('Один из средних румбов компаса между главным и четвертным.', 'межник');
INSERT INTO `victorina` VALUES ('Ветер промежуточного направления.', 'межник');
INSERT INTO `victorina` VALUES ('Слой подкожной клетчатки на невыделанной коже, шкуре животных.', 'мездра');
INSERT INTO `victorina` VALUES ('Изнаночная сторона выделанной кожи или шкуры.', 'мездра');
INSERT INTO `victorina` VALUES ('Пряжа или ткань из смешанных, различных по выделке, качеству, окраске волокнистых материалов.', 'меланж');
INSERT INTO `victorina` VALUES ('Замороженная смесь яичных желтков и белков, используемая на предприятиях общественного питания и в кондитерском производстве.', 'меланж
Что ввурху нет INSERT INTO `victorina` VALUES (' а в низу нету ');
Вопросов для ирки дохуища, вот около 240 тыс вопросов http://www.bestirc.r...tions240000.rar
И сайт где нашел http://www.bestirc.ru/?topic=bots

Фраер, я хотел что бы еще ид заполнял но не додумал.... Вот что можно накидать за 20 минут кушая картошку с катлетой :)
А можно и в бд писать, это вообще шикарно....
Можно и приложенице маленькое написать, не проблема :)

Тёска, не знаю скриптом проще, написал !тхт и кури бамбук...

Ахтунг, обновление версии скрипта
Исправлена мелкая ошибка при записи
/**
 * Скрипт для расширения команд чата
 * Автор: Юрий765
 * в 2.0
 */

import ru.jimbot.modules.AbstractServer;
import ru.jimbot.util.*;
import ru.jimbot.modules.chat.*;
import ru.jimbot.modules.*;

//Установка скрипта как обработчика команды
if(in.equals("install")){
        cmd.addCommand("!txt", new Cmd("!txt","",39,name));
        out="Ok";
        return;
}


try{
String s = "";
        //Прочитаем текст из файла
      BufferedReader r = new BufferedReader(new InputStreamReader(new FileInputStream("./victorina.txt"), "windows-1251"));
      while (r.ready())
        s = s + r.readLine() + "\n";
       r.close();        
       //Заеняем все что нам надо дабы мускул разобрался в текстовике
        s = s.replace("'","");
        s = s.replace("|","', '");
        s = s.replace("\n","');\nINSERT INTO `victorina` VALUES ('");
       // s = s.replace("","");
        //запишим в фаил запросов на викторину  
        OutputStreamWriter ow = new OutputStreamWriter(new FileOutputStream("./victorina.sql",true),"windows-1251");   
        ow.write("INSERT INTO `victorina` VALUES ('" +s);   
        ow.close(); 
} catch (Exception ex) {
    ex.printStackTrace();
    proc.mq.add(uin,"Ошибка "+ex.getMessage());
} 
Вот теперь не должно быть этой херни вначале и вконце....

Сообщение отредактировал Юрий765: 01 Март 2010 - 00:28


#7 VOLKODAV

    Специалист

  • Пользователи
  • PipPipPipPip
  • 288 сообщений
  • ГородКотельнич

Отправлено 01 Март 2010 - 00:30

Юрий765 клас сделал уважуха

Юрий765 клас сделал уважуха за скрипт +5

#8 fraer72

    Профи

  • Специалисты
  • PipPipPipPipPip
  • 1 429 сообщений

Отправлено 01 Март 2010 - 00:33

Думаю что бы сразу в бд, можно накалякать что то типо этого.
На работо способность непроверял :smile:
/**
 * Скрипт для расширения команд чата
 */

import ru.jimbot.modules.AbstractServer;
import ru.jimbot.util.*;
import ru.jimbot.modules.chat.*;
import ru.jimbot.modules.*;
import java.sql.*;

//Установка скрипта как обработчика команды
if(in.equals("install")){
        cmd.addCommand("!txt", new Cmd("!txt","",39,name));
        out="Ok";
        return;
}


try{

  void setBD( int ids, String questions, String answers ){  
  PreparedStatement pst = cmd.srv.us.db.getDb().prepareStatement("insert into victorina values (?, ?, ?)");
  pst.setInt(1, ids);
  pst.setString(2, questions);
  pst.setString(3, answers);
  pst.execute();
  pst.close();
  }
      String s = "";
      //Прочитаем текст из файла
      BufferedReader r = new BufferedReader(new InputStreamReader(new FileInputStream("./victorina.txt"), "windows-1251"));
      while (r.ready()){
      s += r.readLine() + "";
	  }
      r.close();   
      String[] vic = s.split("\n");	  
      String len = vic.length();
	  int id = (int)cmd.srv.us.db.getLastIndex("victorina");;
      for(int i=0; i<len; i++){
	  String[] vic2 = vic[i].split("|");
	  String question = vic[0];
	  String answer = vic[1];
	  setBD(id, question, answer);
	  id++;
	  }

} catch (Exception ex) {
    ex.printStackTrace();
    proc.mq.add(uin,"Ошибка "+ex.getMessage());
} 

Сообщение отредактировал fraer72: 01 Март 2010 - 00:45


#9 Юрий765

    Профи

  • Пользователи
  • PipPipPipPipPip
  • 493 сообщений
  • ГородКалужская ОБЛ

Отправлено 01 Март 2010 - 01:30

Вот решил попробывать написать на пхп, возможно это брез и вообще не рубит как мне кажется примерно это :) Немного не знаком с функциями строк..
Но 2 скрипта все же написал
<? 
  $file = fopen ("file.txt","r+");
   $file2 = fopen ("file.sql","r+");
   if ( !$file )  
 {    
 echo("Ошибка открытия файла");
   }   else   { 
    $buff = fread ($file,100);
     $buff = str_replace("'","",$file);
     $buff = str_replace("'","', '",$file);
     $buff = str_replace("\n","');\nINSERT INTO `victorina` VALUES ('",$file);
    fputs ( $file2, $buff);
   }   fclose ($file);
 ?>
    
<?   
$file = fopen ("file.txt","r+");
   $server = "localhost";
   $user = "test";
   $password = "test";
   $db = "test";   
if ( !$file )   
{     echo("Ошибка открытия файла");
   }   else   { 
$link = mysql_connect("mysql_host", "mysql_user", "mysql_password");
     $buff = fread ($file,100);//читаем 
   $mod_buff = wordwrap($buff,5000,"\n");//получаем весь вопрос с ответом 
   $que = wordwarp($mod_buff, 2000, "|"); 
   $answ = str_replace($que,"",$mod_buff); 
   if (!mysql_connect($server, $user, $password))
 {    echo "Ошибка подключения к серверу MySQL";    exit;     } 
      // Соединились, теперь выбираем базу данных:       
    mysql_select_db($db);//выбрали 
    $sql = 'INSERT INTO `victorina` (`id`, `question`, `answer`) VALUES (LAST_INSERT_ID(), ''.$que.'', ''.$answ.'')'; 
     $q = mysql_query ($sql);    
 mysql_fetch_object($q);// Заполнили  
mysql_close($link);  
 } 
?>

Сообщение отредактировал Юрий765: 01 Март 2010 - 01:35


#10 mmaximm

    Эх...

  • Модераторы
  • 927 сообщений

Отправлено 01 Март 2010 - 09:24

Класс для загрузки вопросов. Сразу в бд. Создает новый поток, и все делает в нем, для того чтобы при загрузке вопросов чат не висел пока все вопросы не загрузятся.
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ru.jimbot.modules.chat;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.FileInputStream;

/**
 *
 * @author Raziel
 */
class LoadVic implements Runnable {

    String name;
    Thread t;
    String uin;
    ChatServer srv;
    RobVic vict;

    LoadVic(String threadname, String uins, ChatServer srvs, RobVic vict) {
        name = threadname;
        t = new Thread(this, name);
        t.start();
        uin = uins;
        srv = srvs;
        this.vict = vict;
    }

    public void run() {
        try {
            int cnt = 0;
            String fname = "./text/" + srv.getName() + "/vic.txt";
            String s = "";
            try {
                BufferedReader r = new BufferedReader(new InputStreamReader(new FileInputStream(fname), "windows-1251"));
                while (r.ready()) {
                    s = r.readLine();
                    String[] ss = s.split(";");
                    String question = ss[0].trim();
                    String answer = ss[1].trim();
                    //Делаем проверку, вдруг вопрос пустой или ответ.
                    //Или же в ответе есть пробел. Нам такиие не нужны
                    if (!question.equals("") && !answer.equals("") && answer.indexOf(" ") < 0) {
                        //Добавляем вопрос в бд
                        srv.us.addVic(question, answer);
                        cnt++;
                    }
                }
            } catch (Exception ex) {
                ex.printStackTrace();
                srv.getIcqProcess(srv.us.getUser(uin).basesn).mq.add(uin, "Error " + ex.getMessage());
            }
            //Оповещаем в комнату с викториной, что были добавлены вопросы
            srv.cq.addMsg(ChatProps.getInstance(srv.getName()).getStringProperty("vic.Name") + ": в базу было добавлено " + cnt + " вопросов.", "", ChatProps.getInstance(srv.getName()).getIntProperty("vic.Room"));
            srv.getIcqProcess(srv.us.getUser(uin).basesn).mq.add(uin, "Добавлено вопросов " + cnt);
            //Обновляем количество вопросов в викторине.
            vict.setCount();
        } catch (Exception e) {
            srv.getIcqProcess(srv.us.getUser(uin).basesn).mq.add(uin, "Прервано");
        }
        //srv.getIcqProcess(srv.us.getUser(uin).basesn).mq.add(uin, "Удачно");
    }
}


#11 sedyh

    Новичок

  • Пользователи
  • Pip
  • 20 сообщений
  • ГородТюмень

Отправлено 07 Февраль 2012 - 20:35

кто нибудь выложите готовых вопросов штук так 200тыщ...

#12 ikurakaev

    Новичок

  • Пользователи
  • Pip
  • 1 сообщений

Отправлено 07 Ноябрь 2012 - 14:19

Как его запустить? Я положил файл со скриптом в /services/НазваниеЧата/scripts/commands/
Файл victorina.txt положил в /services/НазваниеЧата/

Сообщение отредактировал ikurakaev: 07 Ноябрь 2012 - 14:19


#13 ~ёМАё~

    Профи

  • Специалисты
  • PipPipPipPipPip
  • 817 сообщений
  • ГородТамбовская обл.

Отправлено 07 Ноябрь 2012 - 16:39

Просмотр сообщенияikurakaev (07 Ноябрь 2012 - 14:19) писал:

Как его запустить? Я положил файл со скриптом в /services/НазваниеЧата/scripts/commands/
Файл victorina.txt положил в /services/НазваниеЧата/
BufferedReader r = new BufferedReader(new InputStreamReader(new FileInputStream("./victorina.txt"), "windows-1251"));

#14 Zloff

    Профи

  • Пользователи
  • PipPipPipPipPip
  • 430 сообщений

Отправлено 26 Ноябрь 2012 - 00:37

Просмотр сообщенияikurakaev (07 Ноябрь 2012 - 14:19) писал:

Как его запустить? Я положил файл со скриптом в /services/НазваниеЧата/scripts/commands/
Файл victorina.txt положил в /services/НазваниеЧата/
пиши в личку ,есть 580 000 вопросов)





Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 скрытых пользователей