Добавил еще ведущие нули к миллисекундам, если кому-то еще когда-то этот код понадобится
log = function (text, color, define){ var id, time, thread, logHtml, textLog; define = (typeof define == 'string') ? define.split(/[\s,.|:;]+/g) : define; if(typeof define === 'object' && define !== null){ if(Array.isArray(define)){ id = define.indexOf('id') > -1; time = define.indexOf('time') > -1; thread = define.indexOf('thread') > -1; } else{ id = define.id == true; time = define.time == true; thread = define.thread == true; } } else id = time = thread = true; id = id ? '<a href="action://action' + ScriptWorker.GetCurrentAction() + '" style="color:gray;">[' + ScriptWorker.GetCurrentAction() + ']</a>' : ''; time = time ? ' ' + getTime() : ''; thread = thread ? ' Поток №' + thread_number() : ''; logHtml = (id || time || thread) ? id + '<span style="color: white">' + time + thread + ' : </span>' : ''; logHtml += '<span style="color:' + (color ? color : 'white') + '">' + text + '</span>'; textLog = '[' + ScriptWorker.GetCurrentAction() + ']' + time + thread + ' : ' + text function getTime(){ var checkTime = function(i){ return (i < 10) ? "0" + i : i; }; var checkMilliSeconds = function(ms){ if (ms < 10) { return "00" + ms; } else if (ms < 100) { return "0" + ms; } else { return ms; } }; var d = new Date(); var hh = checkTime(d.getHours()); var mm = checkTime(d.getMinutes()); var ss = checkTime(d.getSeconds()); var ms = checkMilliSeconds(d.getMilliseconds()); return '[' + hh + ':' + mm + ':' + ss + '.' + ms + ']'; }; Logger.WriteHtml(logHtml, textLog); }Как найти строку в списке по её части?
-
Есть список вида:
id2000001;2021-09-02
id2000002;2021-09-03
id2000003;2021-09-04
id2000004;2021-09-05
id2000005;2021-09-06
id2000006;2021-09-07
id2000007;2021-09-08
id2000008;2021-09-09
id2000009;2021-09-10
id2000010;2021-09-11
Мне надо в нём проверить, существует ли строка, содержащая id до разделителя ;. Например, надо проверить, существует ли в списке значение «id2000010». При этом все id уникальны и не может быть частичного пересечения, например,
id2000009
и
id20000090
Функция Содержит для списков вроде бы ищет только строку списка целиком.
Выкручивался тем, что список преобразовывал в строку, и парсил через Первое вхождение. Но когда в списке стало >20k строк, при преобразовании в строку BAS начал тормозить. Думаю, должен быть более грамотный способ проверки, но сам не могу понять как. -
@Dim said in Как найти строку в списке по её части?:
Есть список вида:
id2000001;2021-09-02
id2000002;2021-09-03
id2000003;2021-09-04
id2000004;2021-09-05
id2000005;2021-09-06
id2000006;2021-09-07
id2000007;2021-09-08
id2000008;2021-09-09
id2000009;2021-09-10
id2000010;2021-09-11
Мне надо в нём проверить, существует ли строка, содержащая id до разделителя ;. Например, надо проверить, существует ли в списке значение «id2000010». При этом все id уникальны и не может быть частичного пересечения, например,
id2000009
и
id20000090
Функция Содержит для списков вроде бы ищет только строку списка целиком.
Выкручивался тем, что список преобразовывал в строку, и парсил через Первое вхождение. Но когда в списке стало >20k строк, при преобразовании в строку BAS начал тормозить. Думаю, должен быть более грамотный способ проверки, но сам не могу понять как.Нельзя ли все это хранить не в виде списка, а в txt файле, оттуда получить действием "Читать файл", а затем из переменной в которую прочитали, искать нужное значение нужное значение с помощью действия "Найти подстроку". Ну или список записать в файл, если это будет быстрее чем список преобразовывать в строку и выполнить действия описанные выше
-
@Dim @Benson9999 регулярные выражения затратная штука по ресурсам, а если так:
VAR_YOUR_LIST // ваша переменная со списком значений VAR_YOUR_CHECK // ваша переменная с уникальным id for(i=0;i<VAR_YOUR_LIST.length;i++){ if(VAR_YOUR_LIST[i].split(";")[0]==VAR_YOUR_CHECK) { break; //я поставил прерывание вы делайте как вам нужно } }это тоже не быстро, но все равно быстрее чем регулярка, и если у вас списки большие лучше использовать базу кмк.
-
@Benson9999 said in Как найти строку в списке по её части?:
Нельзя ли все это хранить не в виде списка, а в txt файле, оттуда получить действием "Читать файл", а затем из переменной в которую прочитали, искать нужное значение нужное значение с помощью действия "Найти подстроку". Ну или список записать в файл, если это будет быстрее чем список преобразовывать в строку и выполнить действия описанные выше
А сейчас как раз это всё и храниться в тексте. Что-то типо базы idшников в .txt. При каждой итерации, если id нету в списке, он туда вносится, поэтому список постоянно растёт. Каждую итерацию файл читается в список, который переводится в строку. Вот здесь и начинаются тормоза при конвертации списка в строку.
Я вот только немного не понял этот вариант "список записать в файл". Ведь это сейчас и делается. Или я что-то неправильно понял?@lotra said in Как найти строку в списке по её части?:
это тоже не быстро, но все равно быстрее чем регулярка, и если у вас списки большие лучше использовать базу кмк.
Здесь немного не то, регулярка пока что отлично отрабатывает, быстро. Тормоза именно при конвертации списка в строку. Я думал, что можно как-то парсить не строку, а именно список. Чтобы BAS нашёл нужную мне строку в списке по её части. Например, есть строка в списке "id2000010;2021-09-11". У меня есть часть этой строки "id2000010". Вот мне надо как-то получить строку полностью по этой части (а потом регуляркой второю половину, но это уже ерунда).