Конвертируем конвертером и хвастаемся



 
Начать новую тему   Ответить на тему    Форумы -> Общий
Автор Сообщение
Борисыч

Капитан команды Участник команды:
Команда!

Борисыч

Зарегистрирован: 2006-11-23
Постов: 33304
Местоположение: Знаю прикуп - живу в Сочи

СообщениеДобавлено: Сб 18 Мар 2017 12:06    Заголовок сообщения: Конвертируем конвертером и хвастаемся Ответить с цитатой

Превед, чесс-онлайн!

Много много лет я провожу Рукодельный швейцарский классический турнир. Он начался где-то в 2008-м году. Тогда на сайте сломался турнирный движок и все долго сидели без турниров и скучали. Поначалу я выкладывал туры и результаты вот в таком виде

Код:
Номер|Имя|Общий|Результат|Имя|Общий

1|Mihachess, |[4]|.5:.5|Данмер, |[3.5]
2|Миха_Ла, |[3]|.5:.5|RusGross, |[3]
3|APOLLO79, |[1.5]|-:-|makarov_i21, |[2.5]
4|Борисыч, |[1.5]|0:1|aaprof, |[2.5]
5|Володиславир, |[2]|-:+|Семеныч, |[1.5]
6|iii30, |[1]|1:0|Свободен|


Вполне функционально, но очень не презентабельно. В последних турнирах, я начал оформлять все с помощью html. Стало гораздо красивее.

Рукодельный швейцарский классический турнира
НомерИмяОбщийРезультатИмяОбщий
1Mihachess, [4].5:.5Данмер, [3.5]
2Миха_Ла, [3].5:.5RusGross, [3]
3APOLLO79, [1.5]-:-makarov_i21, [2.5]
4Борисыч, [1.5]0:1aaprof, [2.5]
5Володиславир, [2]-:+Семеныч, [1.5]
6iii30, [1]1:0Свободен


Но приходилось каждый тур копировать из SwissPerfect98 в текстовый редактор, дорисовывать теги, убирать сбрасывания строки и делать прочие волшебные вещи. Времени это отнимало много. Поэтому решил потратить время сейчас, чтобы сэкономить его в будущем. На Python3 набросал очень простой скрипт, который первый вариант превращает во второй. Чуть позже закину этот проект на Гитхаб, а пока тело скрипта запощу здесь:

Код:
htmlData = "<table width=" + "450" + "><caption>Рукодельный швейцарский классический турнира</caption>"
oldFile = open("Test Trump.txt")


for line in oldFile:
   htmlData = htmlData + "<tr><td>"
   for item in line:
      if item == "|":
         htmlData = htmlData + "</td><td>"
      elif item == '\n':
         continue
      else:
         htmlData = htmlData + item
   htmlData = htmlData + "</td></tr>"

htmlData = htmlData + "</table>"
f = open('result.txt', 'w')
f.write(htmlData);
f.close()


Если кто хочет проводить рукодельные турниры, то сохраняйте и пользуйтесь. Кто слабо разбирается во всех этих Пайтонах и прочих скриптах - пишите, помогу.
Для работы скрипта из шахматной программы нужно экспортировать данные с разделителем "|". Файл должен называться "Test Trump.txt', ну или меняйте вторую строчку скрипта на то что нравится. Скрипт и файл должны лежать в одной папке. В этой же папке появляется файл с результатом. Результат просто копируется в окно сообщений нашего форума.

Дальнейшие планы.
Первую строчку хочу сделать хедером таблицы, а не обычной строкой.
Хочу сделать пользовательский вызов с предложением заполнить заголовок таблицы.

В совсем уж отдаленной перспективе хочу создать базу данных игроков, чтобы в таблице генерировались ссылки на профиль.
Вернуться к началу
Посмотреть профайл Отправить личное сообщение
дaнмep

Участник команды:
CATS

Андрей

Зарегистрирован: 2004-11-01
Постов: 3093
Местоположение: Морровинд

СообщениеДобавлено: Сб 18 Мар 2017 13:05    Заголовок сообщения: Re: Конвертируем конвертером и хвастаемся Ответить с цитатой

Борисыч писал(а):
Кто слабо разбирается во всех этих Пайтонах и прочих скриптах - пишите, помогу.

Как запускать этот скрипт?
Вернуться к началу
Посмотреть профайл Отправить личное сообщение
Свинюшка


Свинюшка

Зарегистрирован: 2016-11-22
Постов: 658
Местоположение:

СообщениеДобавлено: Сб 18 Мар 2017 13:09    Заголовок сообщения: Ответить с цитатой

Надо как нибудь записаться в твои турниры по рапиду, давно хотел опробывать ab.gif
Вернуться к началу
Посмотреть профайл Отправить личное сообщение
дaнмep

Участник команды:
CATS

Андрей

Зарегистрирован: 2004-11-01
Постов: 3093
Местоположение: Морровинд

СообщениеДобавлено: Сб 18 Мар 2017 13:11    Заголовок сообщения: Ответить с цитатой

Свинюшка писал(а):
Надо как нибудь записаться в твои турниры по рапиду, давно хотел опробывать ab.gif

Торопись - запишись! ab.gif Посмотреть
Вернуться к началу
Посмотреть профайл Отправить личное сообщение
Борисыч

Капитан команды Участник команды:
Команда!

Борисыч

Зарегистрирован: 2006-11-23
Постов: 33304
Местоположение: Знаю прикуп - живу в Сочи

СообщениеДобавлено: Сб 18 Мар 2017 13:28    Заголовок сообщения: Re: Конвертируем конвертером и хвастаемся Ответить с цитатой

Данмер писал(а):
Борисыч писал(а):
Кто слабо разбирается во всех этих Пайтонах и прочих скриптах - пишите, помогу.

Как запускать этот скрипт?
Создай файл с разрешением .py

Например script.py

В тело файла залей скрипт из темы и сохрани.

На всех Линуксах файл будет запускаться как есть двойным кликом мыши. На Винду нужно установить интерпретатор Питона. С официального сайта качай третью версию и смело устанавливай.

После установки файл обретет красивый жовто-блакитный значок и сможет запускаться двойным кликом мыши. Как уже было сказано, выгруженный txt-файл закидываешь в одну папку со скриптом, запускаешь, находишь в этой же папке файл result.txt
Вернуться к началу
Посмотреть профайл Отправить личное сообщение
дaнмep

Участник команды:
CATS

Андрей

Зарегистрирован: 2004-11-01
Постов: 3093
Местоположение: Морровинд

СообщениеДобавлено: Сб 18 Мар 2017 13:30    Заголовок сообщения: Ответить с цитатой

Понятно. Спасибо.
Вернуться к началу
Посмотреть профайл Отправить личное сообщение
Борисыч

Капитан команды Участник команды:
Команда!

Борисыч

Зарегистрирован: 2006-11-23
Постов: 33304
Местоположение: Знаю прикуп - живу в Сочи

СообщениеДобавлено: Вс 30 Июл 2017 06:46    Заголовок сообщения: Ответить с цитатой

Чуть-чуть допилил скрипт и нашел ему еще одно применение.

Свежую версию можно скачать отсюда.

Важное отличие в том, что теперь эта утилита принимает на вход файл с названием "Data.txt". Раньше было Test Trump.

А вот из интересного - теперь можно делать ссылки на профили участников. Сложно, но можно.

Если открыть скрипт тектстовым редактором (например Блокнотом), то можно править исходный код. С четвертой строчки начинается список игроков. В данный момент там всего трое:
Код:
"Борисыч" : "[url=http://old.chess-online.com/Players/Cards/6072]Борисыч[/url]",
   "APOLLO79" : "[url=http://old.chess-online.com/Players/Cards/35721]APOLLO79[/url]",
   "Миха_Ла" : "[url=http://old.chess-online.com/Players/Cards/35473]Миха_Ла[/url]"


Конструкция такая:
Логин - Двоеточие - Ссылка на профиль игрока в формате BBcode-запятая.

Левая часть (Логин) будет заменен на правую. Если игрок из списка не участвует в турнире, то страшного ничего нет, утилита просто пропустит эту строчку. Удобно для различных внутрикомандных турниров и таблиц. С тремя игроками в списке скрипт отрабатывается за треть секунды. Значит и несколько десятков игроков не затормозят систему. В список игроков планирую собирать участников Рукоделки. А в данный момент результат выглядит вот так:

НомерИмя1234567
1Mihachess, 11:W2:-12:W9:W3:W4:W2:D
2Володиславир, 10:W1:+3:D4:L9:W5:W1:D
3Данмер, 7:W9:W2:D5:W1:L6:D4:W
4Семеныч, 14:W5:L8:W2:W6:W1:L3:L
5Борисыч, 13:W4:W9:L3:L8:+2:L8:W
6космонавт, 12:L14:L10:W7:W4:L3:D9:W
7Миха_Ла, 3:L12:W14:-6:L13:+9:D10:+
8Сирена, 9:L13:W4:L11:W5:-10:+5:L
9NikolayTokarev, 8:W3:L5:W1:L2:L7:D6:L
10APOLLO79, 2:L11:D6:L13:L14:+8:-7:-
11aaprof, 1:L10:D13:+8:L12:-13:-0:
12LaraCroft, 6:W7:L1:L14:-11:-0:0:
13Andrei-SPB, 5:L8:L11:-10:W7:-11:-0:
14МИФАСИК 01011980, 4:L6:W7:-12:-10:-0:0:


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

Капитан команды Участник команды:
Команда!

Борисыч

Зарегистрирован: 2006-11-23
Постов: 33304
Местоположение: Знаю прикуп - живу в Сочи

СообщениеДобавлено: Вс 30 Июл 2017 07:22    Заголовок сообщения: Ответить с цитатой

Второй способ использовать данную утилиту: отображение данных на форуме. Сразу начну с простого кейса. Рукодельный турнир с ручной жеребьевкой на двух человек. А можно и не турнир, а любую таблицу.

Открываю Блокнот и составляю таблицу используя в качестве разделителей вертикальную черту:

Пустой квадратик | Вася Пупкин | Кто-то еще| Общий результат
Вася Пупкин | Х | |
Кто-то еще | |Х |

Чтобы не ошибиться можно пробелами выставить нужную ширину ячеек. Важно, чтобы количество разделителей во всех строчка было одинаковым.

Файл сохраняем с именем Data.txt в папку со скриптом. Запускаем скрипт. Смотрим файл result.txt.

Пустой квадратик Вася Пупкин Кто-то еще Общий результат
Вася Пупкин Х
Кто-то еще Х


Примерно таким образом я использовал мою утилиту вчера для выкладывания матча в Бородине.

Со страницы команды были грубо скопированы пары.

GAL NN• (1790.61) alesha403• (1396.05)
warrior• (1784.12) ГреМ• (1943.55)
martin 1976• (1763.54) kamikaze• (1740.19)
usz• (1625.01) РАВ• (1916.02)
Pike• (1605.69) Tiger-1 (1653.96)
Данмер• (1568.15) Xenon-s• (1632.48)
Зипун (1555.95) maksimus2403• (1618.72)
Папаня-А• (1514.72) космонавт• (1606.69)
aaprof• (1511.61) Cagan• (1585.16)
cinerin• (1464.00) Дунай• (1528.54)
Zheludenko• (1475.96) PavelF74• (1462.30)
igogo1• (1428.24) makarov_i21• (1459.41)
Антенна• (1343.21) nuces• (1426.18)
Evgen_• (1295.96) Седой 2012• (1422.45)
Пушечек• (1232.11) Novice81• (1325.60)
The Lukas• (950.88) МИФАСИК 01011980• (1287.58)

Отображение на сайте оставляет желать лучшего. Я проставил номера досок, убрал кружки присутствия и расставил разделители. Для примера приведу только одну строку.

1 | warrior | (1784.12) | : | ГреМ| (1943.55)

После перегонки получаем чистый продукт.

1 warrior (1784.12) : ГреМ (1943.55)
2 martin 1976 (1763.54) : kamikaze (1740.19)
3 usz (1647.15) : РАВ (1916.02)
4 Pike (1605.69) : Tiger-1 (1653.96)
5 Данмер (1574.69) : Xenon-s (1652.04)
6 Зипун (1555.95) : maksimus2403 (1618.72)
7 Папаня-А (1514.72) : космонавт (1606.69)
8 aaprof (1511.61) : Cagan (1585.16)
9 cinerin (1464.00) : Дунай (1534.44)
10 Zheludenko (1461.55) : PavelF74 (1462.30)
11 igogo1 (1428.24) : makarov_i21 (1459.41)
12 Антенна (1343.21) : nuces (1426.18)
13 Evgen_ (1295.96) : Седой 2012 (1422.45)
14 GAL NN (1790.61) : alesha403 (1396.05)
15 Пушечек (1232.11) : Novice81 (1325.60)
16 The Lukas (950.88) : МИФАСИК 01011980 (1287.58)


Или вот возьмем теннисный турнир Джоя.

__________ 1/8 ФИНАЛА ___________

1. KyZMi4 (1829) ---- Novice81 (1117)
2. ........... 3 ---------- Витэк (1571)
3. .......... 12 --------------- 7 .............
4. GAL NN (1792) ---------- 5 .............
5. sjirah (1917) ------ GlMol (1823) --------------------- 0-1 (3-6. ...)
6. Starshoi (1290) --- alex_master74 (1370) ---------- 3-1 (6-4. 7-6(7-5). 5-7. 7-5)
7. ............ 9 ---------- Cap_ut-66 (1963)
8. ............ 2 ---------- Димон88 (1778)

Меня его хитрые разделители на свои.

1.| KyZMi4| (1829) ||Novice81| (1117) |
2.| 3| | |Витэк |(1571) |
3.| 12| | |7| |
4.| GAL NN |(1792) | |5||
5.| sjirah |(1917)| |GlMol |(1823)| 0-1 (3-6. ...)
6.| Starshoi |(1290)| |alex_master74| (1370) | 3-1 (6-4. 7-6(7-5). 5-7. 7-5)
7.| 9|| |Cap_ut-66| (1963) |
8.| 2| ||Димон88| (1778) |

Еще раз напомню, что количество разделителей во всех строчках должно быть одинаковым. Иначе таблица поплывет. А мы тем временем запускаем скрипт.

1. KyZMi4 (1829) Novice81 (1117)
2. 3 Витэк (1571)
3. 12 7
4. GAL NN (1792) 5
5. sjirah (1917) GlMol (1823) 0-1 (3-6. ...)
6. Starshoi (1290) alex_master74 (1370) 3-1 (6-4. 7-6(7-5). 5-7. 7-5)
7. 9 Cap_ut-66 (1963)
8. 2 Димон88 (1778)


Вот такое вот колдунство.
Вернуться к началу
Посмотреть профайл Отправить личное сообщение
warrior


warrior

Зарегистрирован: 2013-02-10
Постов: 987
Местоположение:

СообщениеДобавлено: Вс 30 Июл 2017 21:04    Заголовок сообщения: Ответить с цитатой

Молодец Борисыч!

Python это правильная автоматизация ab.gif

рекомендую для стандартных задач использовать стандартные модули, которых тьма

т.е. не бросаться сразу самому что-то писать, а сначала погуглить есть ли для этого Python модуль ab.gif
Вернуться к началу
Посмотреть профайл Отправить личное сообщение
warrior


warrior

Зарегистрирован: 2013-02-10
Постов: 987
Местоположение:

СообщениеДобавлено: Вс 30 Июл 2017 21:15    Заголовок сообщения: Ответить с цитатой

Например это касается такой типовой задачи, как парсинг текстового файла af.gif
Вернуться к началу
Посмотреть профайл Отправить личное сообщение
дaнмep

Участник команды:
CATS

Андрей

Зарегистрирован: 2004-11-01
Постов: 3093
Местоположение: Морровинд

СообщениеДобавлено: Вс 30 Июл 2017 21:26    Заголовок сообщения: Ответить с цитатой

warrior писал(а):

Python это правильная автоматизация ab.gif

Чем простой си не устраивает?
Вернуться к началу
Посмотреть профайл Отправить личное сообщение
warrior


warrior

Зарегистрирован: 2013-02-10
Постов: 987
Местоположение:

СообщениеДобавлено: Вс 30 Июл 2017 22:10    Заголовок сообщения: Ответить с цитатой

Данмер писал(а):
warrior писал(а):

Python это правильная автоматизация ab.gif

Чем простой си не устраивает?


фанаты могут и на ассемблеры парсить af.gif
Вернуться к началу
Посмотреть профайл Отправить личное сообщение
дaнмep

Участник команды:
CATS

Андрей

Зарегистрирован: 2004-11-01
Постов: 3093
Местоположение: Морровинд

СообщениеДобавлено: Пт 04 Авг 2017 12:45    Заголовок сообщения: Ответить с цитатой

Борисыч писал(а):

А вот из интересного - теперь можно делать ссылки на профили участников. Сложно, но можно.

Можно ли сделать так, что бы "скрипт" брал по имени игрока ссылку на его профиль сразу с сайта (http://old.chess-online.com/players), например, используя печеньки?
Вернуться к началу
Посмотреть профайл Отправить личное сообщение
Борисыч

Капитан команды Участник команды:
Команда!

Борисыч

Зарегистрирован: 2006-11-23
Постов: 33304
Местоположение: Знаю прикуп - живу в Сочи

СообщениеДобавлено: Пт 04 Авг 2017 13:14    Заголовок сообщения: Ответить с цитатой

Данмер писал(а):
Можно ли сделать так, что бы "скрипт" брал по имени игрока ссылку на его профиль сразу с сайта (http://old.chess-online.com/players), например, используя печеньки?
Думал о таком функционале. Но во-первых, у сайта нет API.

А во-вторых время работы скрипта в этом случае станет неприлично большим.

Была мысль попросить Дока доступ к СУБД ради вот этого вот. Но понял что для моих целей это лишнее. Игроки в турнире одни и те же.

Разве что планирую список игроков вынести в отдельный файл. Но приоритет у этой задачи низкий, так как в нынешнюю Рукоделку записались 10 игроков. Список внутри скрипта будет не большим. И ближайший год скорее всего тоже.
Вернуться к началу
Посмотреть профайл Отправить личное сообщение
дaнмep

Участник команды:
CATS

Андрей

Зарегистрирован: 2004-11-01
Постов: 3093
Местоположение: Морровинд

СообщениеДобавлено: Пт 04 Авг 2017 13:26    Заголовок сообщения: Ответить с цитатой

Борисыч писал(а):

Разве что планирую список игроков вынести в отдельный файл.

мм... да, это самый разумный и практичный вариант.
Вернуться к началу
Посмотреть профайл Отправить личное сообщение
Начать новую тему   Ответить на тему    Форумы -> Общий Часовой пояс: GMT +3:00
 

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах