Строка типа: login:password:useragent
-
Нужно из файла ресурсом брать строки
login1:password1:Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:48.0) Gecko/20100101 Firefox/48.0
login2:password2:Mozilla/5.0 (Windows NT 6.3; rv:49.0) Gecko/20100101 Firefox/49.0
login3:password3:Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:50) Gecko/20100101 Firefox/50Используя стандартную функцию Парсить строку появляется проблема: двоеточие или точка с запятой воспринимаются как разделитель и юзерагент в переменную записывается обрезанным на точке с запятой.
Записывается вот так
Mozilla/5.0 (Windows NT 6.3
вместо так
Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:50) Gecko/20100101 Firefox/50Собственно вопрос, как можно корректно обработать эту строку?
Вот тут пробовал разные варианты
1_1481550478835_user_agent_test.xml 0_1481550478834_user_agent_test.txt
-
@servasw45 Список -> Парсить строку
-
@servasw45 чтобы корректно ее обработать, надо корректно ее указать. Указать корректные разделители, для того, чтобы она корректно обработалась. Это если не хочется вникать в регулярки и т.п.
По этому строки нужно задавать так, чтобы разделитель был РАЗДЕЛИТЕЛЕМ, а это значит, чтобы он не делил не разделяемое.
но раз уж строки на вход корректные подавать не хочется, то надо прибегать к такому:
// режем строку var inpStr = {{useragent}}; var inpSep = ":"; // указать свой разделитель var tmpAr = inpStr.split(inpSep); VAR_USERNAME = tmpAr[0]; VAR_PASSWORD = tmpAr[1]; VAR_USERAGENT = tmpAr.slice(2, tmpAr.length).join(inpSep);
твой пример с этим кодом: 0_1481552611138_1481550491114-user_agent_test.xml
выведет это:
[16:23:02] Поток №1 : mail
[16:23:03] Поток №1 : password
[16:23:03] Поток №1 : Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:48.0) Gecko/20100101 Firefox/48.0
ps: или вместо вставки кода городить кирпичики с парсить строку в список, взять элемент 0 с удалением положить в переменную USERNAME,
опять взять элемент 0 с удалением положить в переменную PASSWORDб
объединить список в переменную USERAGENT
-
ilekor, out, спасибо за ответ!
Я бы сказал, что тут случай сильно запущенный :)
строки на вход корректные подавать не хочется
Правильнее было бы сказать не знается (от слова не знаю), и делаю как получается, а не так как было бы правильнее. Ваш пример сохраню как заготовку и буду применять, где потребуется.
...чтобы корректно ее обработать, надо корректно ее указать...
...строки на вход корректные подавать...
А как было бы корректно указать строку типа
логин:пароль:юзерагент ?
или
логин:пароль:прокси:порт:юзерагент ?Настройки для разных аккаунтов удобнее и проще указывать в одну строку, чтобы потом не запутаться. Если создавать несколько ресурсов, то нужно следить, чтобы строки не сдвигались и не пропускались ... удобнее в одну строку.
Пока что Ваш пример выглядит самым правильным.
Главное задать разделитель посложнее, чтобы последовательность символов нигде не использовалась, что то типа -::- (проверил, отлично работает)
-
@servasw45 http://community.bablosoft.com/topic/443/base64/5 в третьем посте мой проект, уберите кодирование и раскодирование в base 64, в шаблоне в самом начале укажите свои ресурсы - там где двойные кавычки ставите прокси и юзерагент
Вот сделал 0_1481569896780_1476212056081-1476115204120-base64.xml
Может коряво, но работает как калашников :)
-
@servasw45 said in Строка типа: login:password:useragent:
Главное задать разделитель посложнее, чтобы последовательность символов нигде не использовалась, что то типа -::- (проверил, отлично работает)
да, все верно. Это и есть ответ на Ваш вопрос выше. Разделитель нужен уникальный, чтобы делилось то, что задумано. Я иногда юзаю
;-s-;
(уродлив -) )
s - потому что от слова separator - разделитель
это дело вкуса, зависит от нюансов.
-
@BigLebovski, спасибо!
Ваш пример из ссылки про кодирование я тоже сохранил как заготовку.
А с обработкой строки есть нюанссобственно из-за этого я и тему с вопросом создал.
Шифруется и дешифруется все отлично. А затем, при обработке командой Парсить строку (уточняю! Парсить строку именно в моем случае) и возникают проблемы.
Получается, что Парсить строку следует использовать для не сложных выражений. При использовании сложных выражений, разделять строку нужно способом предложенным out
-
@servasw45 да накосячил, просто перед последним ресурсом надо ставить разделитель - в моем случае : (двоеточие) иначе два последних ресурса читаются в одну строку . Просто в шаблоне поставьте после третьего ресурса двоеточие http://prntscr.com/dim3ms
-
парсишь строку с разделителем "|" и все
-
@smurfik не все ) я тоже хотел такой вариант предложить сперва, он куда проще. Но действие "Парсить строку" не принимает | как разделить, ну он и не должен. "Парсить строку" принимает в качестве разделителя : или ; На сколько я понял.
-
@out есть парсить строку из модуля список, он принимает разделитель
-
@out как это не принимает? у меня 3 скрипта так реализовано
-
@smurfik так вот http://savepic.org/8398786.jpg
не знаю что там у вас реализовано )
-
Да, точно есть такое! В Парсить строку в модуле Список есть возможность указать свой разделитель
Но результат записывается в одну единственную переменную, указать несколько переменных не получается. А отображается эта переменная в одну строку
и снова возникает проблема, как из этой одной строки отобрать логин, пароль и юзерагент по разным ячейкам
-
Список можно раздерибанить по переменным. Для этого используйте действие получить элемент списка. Можно несколько раз брать первый с удалением, либо без удаления по индексу. Это же действие (парсить строку в список и разделение на переменные) @out показал в виде единого блока в выполнить код
-
@DrPrime , спасибо!
С Вашей помощью удалось обнаружить еще один способ работы со строкой.
Шпаргалка: 0_1481646934957_parstrsep2.xml
-
Небольшой оффтоп
Как или где такое отображение включается ?
-
@servasw45 нажать правой кн. мыши на пустом месте в сценарии