Aurora v1.1.0 - новая версия библиотеки.



  • По многочисленным просьбам трудящихся выкладываю новую версию Авроры. Описание первого релиза библиотеки здесь: https://community.bablosoft.com/topic/6681/библиотека-aurora

    Актуальную версию можно скачать вот здесь: https://github.com/Pragmatikc/Aurora/tree/current

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

    Теперь чтобы всё заработало, нужно клацнуть первую кнопку "Библиотека Аврора 1.1.0" и добавить библиотеку в проект:
    0_1551451094384_4.jpg
    Если вы используете функции библиотеки в OnApplicationStart, там придётся сделать то же самое. Минус будет в том, что это несколько утяжелит сам xml файл проекта, там будет дважды повторяться код библиотеки. Однако не нужно будет никуда лезть при компиллировании.

    Далее, добавил в библиотеку все функции для обработки json из этого модуля: https://community.bablosoft.com/topic/6192/модуль-парсинга-json
    Даже несколько расширил функционал за счёт введения разделителей между несколькими объектами json.
    Пример работы в коде:

    var obj_1 = '{"person": [{"name":"Вася","surname":"Пупкин"}]}'
    var obj_2 = '{"person1": [{"name":"Вася","surname":"Пупкин"}],"person2": [{"name":"Петя","surname":"Горохов"}]}'
    var obj_3 = '"person": [{"name":"Вася","surname":"Пупкин"}]' // Неправильный json
    var obj_4 = '{"person1": [{"name":"Вася","surname":"Пупкин"}]}*{"person2": [{"name":"Петя","surname":"Горохов"}]}'
    [[CHECK1]] = ajn.check(obj_1) // true
    [[CHECK2]] = ajn.check(obj_2) // true
    [[CHECK3]] = ajn.check(obj_3) // false
    [[COUNT1]] = ajn.count(obj_1, "") // 1
    [[COUNT2]] = ajn.count(obj_2, "") // 2
    [[KEY1]] = ajn.key(obj_1, "") // ['person']
    [[KEY2]] = ajn.key(obj_2, "") // ['person1','person2']
    [[KEYS]] = ajn.keys(obj_4, "person1*person2", "*") // [[person1],[person2]]
    [[PARSE]] = ajn.parse(obj_1, 'person.[name]') // ['Вася']
    [[PARSE2]] = ajn.multyparse(obj_4, 'person1.[name]*person2.[name]', '*') // [['Вася'],['Петя']]
    

    Результат:
    0_1551451600863_5.jpg
    Понятно, что правильнее будет парсить json встроенными функциями js, однако мои функции могут существенно облегчить парсинг множества однотипных json-объектов (да и не однотипных тоже, пути можно задавать отдельно каждому).

    Так же добавил функции для работы с CSV-файлами, пока только две:
    asv.check(resource, string) - проверяет, нужный ли csv файл находится в ресурсе и выдаёт true или false если да и если нет соответственно. Так же выводит в лог информацию:
    0_1551451919216_0.jpg
    Можно использовать в OnApplicationStart для проверки файла перед записью, чтобы случайно не записать в другой файл. Для проверки нужно передать в строке или массиве значения, которые должны быть в шапке csv-файла (верхнюю строчку файла), в моём, описанном ниже случае, либо строку

    var string = 'Номер,Цена,Количество,Наименование,Где ёжик?'
    

    Либо массив

    var string = ['Номер','Цена','Количество','Наименование','Где ёжик?']
    

    asv.add(resource, string) - добавляет строку в csv-файл.

    Особенности функций объекта asv: в качестве аргумента resource указывается имя ресурса в кавычках либо переменная с именем ресурса. Это должен быть ресурс "из файла", где должен быть указан ваш csv файл.
    В качестве аргумента string можно указать переменную, содержащую как строку с данными, так и массив данных. Массив даже предпочтительнее, так как функция сама обрабатывает его и все элементы, не соответствующие типу записи csv приводит к нужному виду.

    Пример работы:

    var block = '776661215'
    [[TEST]] = asv.check('csv', ['Номер','Цена','Количество','Наименование','Где ёжик?']) // true
    var string1 = [1,200,3,'Товар первый','Под деревом']
    var string2 = [1,600,3,'Товар странный','Под деревом']
    var string3 = [1,300,3,'Товар на полке','Под деревом']
    var string4 = [1,800,3,'Товар, пролежавший год','Под деревом']
    var string5 = [1,1400,3,'Товар, который никто не покупает :-(','Пока таблицу заполнял, в лес убежал!']
    asv.add('csv',string1)
    asv.add('csv',string2)
    asv.add('csv',string3)
    asv.add('csv',string4)
    asv.add('csv',string5)
    

    Это только пример, правильнее будет выполнять функцию в цикле, меняя каждый раз переменные. Такой пример запишет в файл:
    0_1551452238839_1.jpg
    Далее нужно будет открыть файл любым opensource csv редактором (например, из пакетов open office, libre office), забудьте про excel ибо microsoft is shit так как он некорректно работает с чистым csv.
    0_1551452471578_2.jpg
    Настройки должны быть как у меня, насколько помню, это и есть стандартные умолчания формата csv. Как видите, даже Open Office поначалу выдаёт нам неправильную таблицу, однако после открытия перестаёт тупить:
    0_1551452661212_3.jpg
    Таким образом передав все нужные ячейки строки csv в массиве, мы легко публикуем данные в файл, не запариваясь о запятых и кавычках.
    Думаю, в следующий релиз авроры включу возможность отправлять данные в csv сразу списком, либо каждый элемент - новая строка, либо вообще возможность публикации строк через многомерный массив, где каждый подмассив - строка.

    Благодарности: @URAABK - за идею публикации на github, @OYASUMI PUNPUN - за его модуль парсинга json, @DRPRIME - за подсказки по оптимизации и замене костылей на нормальные функции, @GAMID - за идею добавить функции для работы с csv.



  • @pragmatik xls(xlsx) будет?



  • @gamid я сначала с csv разберусь до конца - нужно ещё читать csv и записывать списком. А в xml сейчас можно писать из базы данных BAS



  • @pragmatik Библиотека огонь. Спасибо, но есть одно замечание). Но это так просто мне лень править, меня устраивает и так. Если ее тянуть с github current-version то не отображается в панели экшенов картинко. Текст ссылки



  • @tts9 точно, недосмотрел, сам-то пользуюсь не выкачанной, а оригинальной. В следующем релизе исправлю, и ещё несколько багов функций нашёл.



  • @pragmatik Заметил еще одну забавность. Если использовать что то такое

    als.del(list, element_number) 
    //****************** она же
    als.del = function(array, index){
    	return array.splice(index,1)
    

    то рез все равно надо одевать в стринги. Получается как и с JSON резулт массив. Даже если ее обозвать VAR_ЧТО_ТО в окне переменных норм, все равно в конструкциях на подобии indexOf не отработает без принудительно String() в этом же блоке кода. Но это кмк связанно уже не с библиотекой, а с интерпретатором.

    upd/ Только не подумайте что я недоволен. Я наоборот доволен как слон). Этого я просто не встречал в описании, а может невнимательно читал.
    И да если ее использовать дальше даже не обрабатывая то нормально. Например если это ссылка и ее использовать в следующем блоке для http запроса. Запрос не в коде. А встроенным.



  • Спасибо за библиотеку.
    Не подскажите, как добавить символ окончания строки в ячейку?