QSP импорт google таблиц/excel
Для тех кто еще сомневается в многомерных массивах и/или приверженец консервативного QSP 5.7.0
Есть желание редактировать таблицу в google таблиц/excel.
Есть таблица с некими предметами и их свойствами и описанием
| 0 | Мяч | предмет | 10 | 0 |
|---|---|---|---|---|
| 1 | Меч | оружие | 1000 | 100 |
| 2 | Стакан | предмет | 5 | 0 |
| 3 | Хлеб | еда | 20 | -10 |
| 4 | ёж | животное | 10 | 0 |
| 5 | Ледоруб | оружие | 100 | 50 |
напрямую QSP player работать с файлами не умеет. Пойдем по пути кодогенерации. Сперва добавим локацию-обработчик ‘add’
“Код локации ‘add’”
Spoiler
!$ARGS[0] - список массивов
!$ARGS[1] - строка данных
!INSTR([$Что ищем],[$Где ищем]) - возвращает номер позиции символа, с которого начинается вхождение строки [$Что ищем] в строку [$Где ищем] (или 0, если вхождения нет). Поиск начинается с символа номер [#начало].
!$TRIM([$стр]) - удаляет прилегающие пробелы и символы табуляции из [$стр] и возвращает полученную строку.
!$MID([$стр],[#начало],[#длина]) - вырезает из строки [$стр] строку, которая начинается с символа номер [#начало] и имеет длину [#длина]. Нумерация символов в строке ведётся с 1.
!LEN([$стр]) - возвращает длину строки
!Разделитель
$Separ=' '
!убираем первый разделитель
$add_text0=$MID($ARGS[0],2)
$add_text1=$MID($ARGS[1],2)
!$addName - наименование массива и переменной из первой колонки
$addName=''
!$addData - значение
$addData=''
separPozData=0
!убираем колонку id
!separPozCol = INSTR($add_text0,$Separ)
!$add_text0=$MID($add_text0,separPozCol+1)
!значение id
!separPozData = INSTR($add_text1,$Separ)
!i=$TRIM($MID($add_text1,1,separPozData))
!$add_text1=$MID($add_text1,separPozData+1)
:mark_addnew
!'<<$add_text0>>'
separPozCol = INSTR($add_text0,$Separ)
if separPozCol>0:
!название массива
$addName=$TRIM($MID($add_text0,1,separPozCol))
$add_text0=$MID($add_text0,separPozCol+1)
!значение строки
separPozData = INSTR($add_text1,$Separ)
$addData=$TRIM($MID($add_text1,1,separPozData))
$add_text1=$MID($add_text1,separPozData+1)
!pl '<<$addName>>|<<$addData>>'
if $addName='RUN':
if $addData!'':Dynamic('<<$addData>>')
else
if $MID($addName,1,1)='$':
!pl '<<$addName>>=$str(<<$addData>>)'
Dynamic('<<$addName>>=''<<$addData>>''')
else
!pl '<<$addName>>=<<VAL($addData)>>'
Dynamic('<<$addName>>=<<VAL($addData)>>')
end
end
if LEN($add_text0)>0: JUMP'mark_addnew'
else
!последняя колонка с кодом
$addName=$add_text0
$add_text0=$TRIM($add_text0)
if LEN($add_text0)>0:Dynamic($add_text0)
$add_text0=''
$add_text1=$TRIM($add_text1)
if LEN($add_text1)>0:Dynamic($add_text1)
$add_text1=''
end
в таблицу добавим:
первую строку с описанием массивов для каждой колонки
первую колонку с текстом “gs ‘add’,’”
последнюю колонку с текстом “‘’” (две одинарные кавычки)
в ячейку А1 добавим текст “$col=‘”
Должно получиться
| gs ‘add’,$col,’ | 0 | Мяч | предмет | i=w | 10 | 0 | ’ |
|---|---|---|---|---|---|---|---|
| gs ‘add’,$col,’ | 1 | Меч | оружие | i=w | 1000 | 100 | ’ |
| gs ‘add’,$col,’ | 2 | Стакан | предмет | i=w | 5 | 0 | ’ |
| gs ‘add’,$col,’ | 3 | Хлеб | еда | i=w | 20 | -10 | brod=i ’ |
| gs ‘add’,$col,’ | 4 | ёж | животное | i=w | 10 | 0 | ’ |
| gs ‘add’,$col,’ | 5 | Ледоруб | оружие | i=w | 100 | 50 | ’ |
Создаем локацию ‘genItems’ и копипастим в нее таблицу, добавляем вызов gs ‘genItems’ сохраняемся, запускаем и получаем заполненные массивы.
теперь достаточно знать id предмета, чтобы получить по нему внесенную информацию
'схватить <<$item[brod]>> по цене <<item_price[brod]>>
При “импорте” есть возможность выполнять код, который можно добавить в колонку ‘RUN’ или добавить в последней колонке.
Код довольно чувствителен к лишним пробелам. Ограничение на общую длину строки около 3620.
Файлик с примером приложил.
ExapleBase.qsp
Код писал лично, при использовании в своих проектах настаиваю на сохранении авторства.
Это мой первый пост, прошу не судить строго.
USER:
Jorge
Jorge,
не совсем понял. Или понял, но не совсем.
Ты склеиваешь в экселевской таблице данные из таблицы в виде строк и получаешь на выходе валидный код QSP.
Затем этот валидный код вставляешь на локации, и с помощью своего модуля распарсиваешь строку с данными, чтобы получить таблицу данных в QSP?
Похвально. Все рано или поздно приходят к таблицам данных. :)
Вот я, например:
http://aleksversus.narod.ru/index/pravilnyj_sposob_khranenija_dannykh/0-21
Сейчас перерабатываю видео по примитивной системе объектов, где подобная таблица данных играет ключевую роль.
https://youtu.be/O5mnzI7mPV4
Кстати, очень советую познакомиться с модулем Олегуса. Натолкнёт на парочку идей по развитию модуля.
https://qsp.org/forum/120-modul-dla-raboty-s-tablicami-dannyh