![]() |
Необходимо из файла считать строку и участи строки присвоить переменным
Вложений: 2
Есть текстовый файл в котором есть строка
remote result (not to be trusted): [ 82074624499369902458868130586453554849 65228258370552867395165752861763116226784530337709001549878075 100000000000 256 ] необходимо для каждое числа, которое заключено в [ ] присвоить значение переменной, числа могут быть разной длины каждое a=82074624499369902458868130586453554849 b=65228258370552867395165752861763116226784530337709001549878075 c=100000000000 d=256 |
Цитата:
|
Powershell
Код:
$a,$b,$c,$d = ((gc 'D:\temp\test.txt') -replace ".*?\[(.*?)\].*",'$1').Trim().Split() |
Цитата:
|
Цитата:
Цитата:
Код:
@echo off Ну и сравните код powershell, лишенный всех подобных недостатков, при этом с числами можно работать именно как с числами, а не как с текстом: Код:
$file = '.\dirlist.txt' |
Еще вариант:
Код:
@Echo Off Цитата:
|
Цитата:
Например, что количество переменных должно быть не четыре, а неограниченно много, по сумме необходимых строк, в итоге. :) В варианте для powershell, об этом задумываться не надо, все числа будут в массиве, по сути - на каждое число по переменной. Цитата:
|
Вложений: 2
Спасибо за помощь, да если интересует вся задача целиком, то могу ее описать, та как дальше столкнулся со следующими проблема так как в CMD не силен от слова совсем.
Есть 10 так называемых гиверов: Set Giver0=kf-kkdY_B7p-77TLn2hUhM6QidWrrsl8FYWCIvBMpZKprBtN Set Giver1=kf8SYc83pm5JkGt0p3TQRkuiM58O9Cr3waUtR9OoFq716lN- Set Giver2=kf-FV4QTxLl-7Ct3E6MqOtMt-RGXMxi27g4I645lw6MTWraV Set Giver3=kf_NSzfDJI1A3rOM0GQm7xsoUXHTgmdhN5-OrGD8uwL2JMvQ Set Giver4=kf8gf1PQy4u2kURl-Gz4LbS29eaN4sVdrVQkPO-JL80VhOe6 Set Giver5=kf8kO6K6Qh6YM4ddjRYYlvVAK7IgyW8Zet-4ZvNrVsmQ4EOF Set Giver6=kf-P_TOdwcCh0AXHhBpICDMxStxHenWdLCDLNH5QcNpwMHJ8 Set Giver7=kf91o4NNTryJ-Cw3sDGt9OTiafmETdVFUMvylQdFPoOxIsLm Set Giver8=kf9iWhwk9GwAXjtwKG-vN7rmXT3hLIT23RBY6KhVaynRrIK7 Set Giver9=kf8JfFUEJhhpRW80_jqD7zzQteH6EBHOzxiOhygRhBdt4z2N Передавая каждому из гиверов через внешнюю программку lite-client.exe(в качестве передаваемого параметра идет сам гивер) она возвращает параметры, которые можно записать в файл, а можно и на лету обработать lite-client.exe -v 0 -C global.config.json -rc "runmethod %Giver0% get_pow_params" >%file% в таком виде выдает параметры using liteserver 24 with addr [54.157.78.74:32000] zerostate set to -1:17A3A92992AABEA785A7A090985A265CD31F323D849DA51239737E321FB05569:5E994FCF4D425C0A6CE6A792594B71732 05F740A39CD56F537DEFD28B48A0F6E latest masterchain block known to server is (-1,8000000000000000,16193696):BC4F543DDD3DD7E91AF970BE1016A43E73405A27538E2F967D4161BFDA3BC3DD:8FAE84 41576BB5AFECFC0D295FE3B234771DDB223800F7CF68493542C8399031 created at 1637308490 (4 seconds ago) BLK#1 = (-1,8000000000000000,16193696):BC4F543DDD3DD7E91AF970BE1016A43E73405A27538E2F967D4161BFDA3BC3DD:8FAE84 41576BB5AFECFC0D295FE3B234771DDB223800F7CF68493542C8399031 BLK#2 = (-1,8000000000000000,0):17A3A92992AABEA785A7A090985A265CD31F323D849DA51239737E321FB05569:5E994FCF4D425 C0A6CE6A792594B7173205F740A39CD56F537DEFD28B48A0F6E arguments: [ 101616 ] result: [ 240981390008640605705570785453111617011 63407965974365185119488504750453864583808513014607073315407340 100000000000 256 ] remote result (not to be trusted): [ 240981390008640605705570785453111617011 63407965974365185119488504750453864583808513014607073315407340 100000000000 256 ] Из всего это участка данных интересуют значения в строке, точнее сейчас именно одно значение, раньше больше значений нужно было, это второе значение в [] remote result (not to be trusted): [ 240981390008640605705570785453111617011 63407965974365185119488504750453864583808513014607073315407340 100000000000 256 ] в нашем случае это значение таково: Complex=63407965974365185119488504750453864583808513014607073315407340 оно может быть переменной длины, каждый гивер дает свое значение Необходимо опросить каждый из десяти гиверов и выбрать тот из гиверов BestGiver у которого искомое значение Complex будет наибольшим и передать эти значения BestGiver в другую программу tonlib-cuda-cli.exe -v 3 -C %CONFIG_FILE% -e "pminer start %BestGiver% %MY_ADDR% %GPU_ID% %BOOST_FACTOR% %GPU_PLATFORM_ID%" Сейчас параметры для запуска программы считываются из ini файла run_config.ini и далее уже запускаются в bat файле run_cuda.bat батники и ini фал прикрепил сейчас Гивер задан жестко, а нужно выбирать наилучшего и запускать работу tonlib-cuda-cli.exe только с лучшим гивером BestGiver не могу подгрузить файлы целиком вроде для архивов 8 мегабайт, но мне дает только 1 мегабайт использовать https://github.com/tontechio/pow-min...tag/20211119-4 |
Цитата:
Цитата:
Код:
if "11" gtr "102" (echo Yes) else (echo No) Так что, выход только один - переходить на powershell и в нем уже организовывать сравнение чисел... Вашу строку: Цитата:
Но чтобы не делать сизифов труд, тут необходимо Ваше желание в использовании powershell, а где-то даже его и изучение :) ЗЫ И как, майнинг - доходное дело? Получается что-то намайнить? :) |
Цитата:
|
Цитата:
|
Цитата:
Вот, только реализовывать - мне лично, лень вспоминать CMD, ибо с powershell-ом всё гораздо проще решается, а cmd фактически уже не пользуюсь и многое позабылось... Но возможно, кому-нибудь захочется это реализовать... просто подождать надо. |
Да я согласен и на powershell если на нем задача целиком решается
|
Вложений: 1
YuS_2, boomdeamon,
Цитата:
Поэтому извратимся: приделаем к началу цифровой строки для удобства обозначения границы буковку, например, z (потом пригодится для усекновения лишнего) и, допустим, 120 нулей. Далее, отрежем от конца 120 символов, приделаем к этой строке префикс, например, @@, получим набор одинаковых по длине строк, и сделаем финт: используем эту строку как имя переменной, присвоим ей номер гивера. Получим (в сокращенном виде, длинную строку лень рисовать) нечто подобное @@0000000z123454=4 Далее Set "@@" выдаст номера гиверов в порядке возрастания их строковых значений, а вычленить из имени переменной гивер (помним о буковке z) не составляет труда. Код:
@Echo Off Для отладки применил обходной маневр: создал 10 файлов с именами совпадающими с гиверами (не знаю, что это такое и вряд ли захочу узнать), как указано у заказчика, в которых записал содержимое, которое, как я понял, выдаёт программа lite-client.exe. И вместо этой программы стандартным морем выдаю содержимое для обработки (в красной отладочной строке). Естественно, данные слегка изменил, чтобы иметь возможность для сортировки. Набор этих отладочных файлов прилагаю - вдруг кто-то захочет попробовать, только путь надо будет вместо Z:\Box_In свой прописать) В принципе, вся задача, которая сводится к сортировке длинных цифровых строк, в CMD решается. |
Цитата:
К сожалению не заработал скрипт и думаю проблема в том что из-за перенаправлений ввода и вывода lite-client.exe не успевает отдать весь фрагмент вывода и видимо в данном случае нужно использовать вывод в отдельный временный файл, For /F "usebackq tokens=2 delims=[]" %%s In (lite-client.exe -v 0 -C global.config.json -rc "runmethod %%%Prefix%%%i%% get_pow_params" >%file%) а потом уже это файл парсить как в примере, так как пример именно с файлом да отлично справляется, когда фрагмент в файле. А по результату работы примера, да пример вычисляется, только BestGiver это должно быть одно из значений одного из десяти гиверов, а в примере туда подставляется наибольший Complex, а необходимо значение лучшего гивера сейчас скрипт выдает значения по тестовым данным nBestGiver=Giver5 BestGiver=363407965974365185119488504750453864583808513014607073315407340 а надо nBestGiver=Giver5 Complex=363407965974365185119488504750453864583808513014607073315407340 BestGiver=kf8kO6K6Qh6YM4ddjRYYlvVAK7IgyW8Zet-4ZvNrVsmQ4EOF |
Цитата:
Хотелось бы разобраться, почему К сожалению не заработал скрипт и не думаю что проблема из-за перенаправлений ввода и вывода, но надо больше информации.
Я иду у Вас на поводу и выделяю формирование файлов отдельно. Код:
@Echo Off |
Цитата:
lite-client.exe -v 0 -C global.config.json -rc "runmethod kf-kkdY_B7p-77TLn2hUhM6QidWrrsl8FYWCIvBMpZKprBtN get_pow_params">kf-kkdY_B7p-77TLn2hUhM6QidWrrsl8FYWCIvBMpZKprBtN @Echo Off cls Set "KeyWord=remote result (not to be trusted):" Set "Prefix=Giver" Set "Giver0=kf-kkdY_B7p-77TLn2hUhM6QidWrrsl8FYWCIvBMpZKprBtN" Set "Giver1=kf8SYc83pm5JkGt0p3TQRkuiM58O9Cr3waUtR9OoFq716lN-" Set "Giver2=kf-FV4QTxLl-7Ct3E6MqOtMt-RGXMxi27g4I645lw6MTWraV" Set "Giver3=kf_NSzfDJI1A3rOM0GQm7xsoUXHTgmdhN5-OrGD8uwL2JMvQ" Set "Giver4=kf8gf1PQy4u2kURl-Gz4LbS29eaN4sVdrVQkPO-JL80VhOe6" Set "Giver5=kf8kO6K6Qh6YM4ddjRYYlvVAK7IgyW8Zet-4ZvNrVsmQ4EOF" Set "Giver6=kf-P_TOdwcCh0AXHhBpICDMxStxHenWdLCDLNH5QcNpwMHJ8" Set "Giver7=kf91o4NNTryJ-Cw3sDGt9OTiafmETdVFUMvylQdFPoOxIsLm" Set "Giver8=kf9iWhwk9GwAXjtwKG-vN7rmXT3hLIT23RBY6KhVaynRrIK7" Set "Giver9=kf8JfFUEJhhpRW80_jqD7zzQteH6EBHOzxiOhygRhBdt4z2N" call kf-kkdY_B7p-77TLn2hUhM6QidWrrsl8FYWCIvBMpZKprBtN.cmd call kf8SYc83pm5JkGt0p3TQRkuiM58O9Cr3waUtR9OoFq716lN-.cmd call kf-FV4QTxLl-7Ct3E6MqOtMt-RGXMxi27g4I645lw6MTWraV.cmd call kf_NSzfDJI1A3rOM0GQm7xsoUXHTgmdhN5-OrGD8uwL2JMvQ.cmd call kf8gf1PQy4u2kURl-Gz4LbS29eaN4sVdrVQkPO-JL80VhOe6.cmd call kf8kO6K6Qh6YM4ddjRYYlvVAK7IgyW8Zet-4ZvNrVsmQ4EOF.cmd call kf-P_TOdwcCh0AXHhBpICDMxStxHenWdLCDLNH5QcNpwMHJ8.cmd call kf91o4NNTryJ-Cw3sDGt9OTiafmETdVFUMvylQdFPoOxIsLm.cmd call kf9iWhwk9GwAXjtwKG-vN7rmXT3hLIT23RBY6KhVaynRrIK7.cmd call kf8JfFUEJhhpRW80_jqD7zzQteH6EBHOzxiOhygRhBdt4z2N.cmd For /L %%i In (0,1,9) Do ( For /F "usebackq tokens=2 delims=[]" %%s In (`2^>nul Call More "%%%Prefix%%%i%%" ^| FINDSTR /I "%KeyWord%"`) Do Call :Out "a" "Complex" "c" "d" %%s Call Set "Name=0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000z%%Complex%%" Call Set "Name=@@%%Name:~-120%%" Call Set "%%Name%%=%%i" ) For /F "usebackq tokens=1,2 delims==" %%i In (`Set "@@"`) Do ( Set "nBestGiver=%%j" Set "BestGiver=%%i" Call Set "BestGiver=%%BestGiver:*z=%%" Call Set "Out= %%BestGiver%%" Call Echo %%j=%%Out:~-100%% ) Echo. &Echo nBestGiver=%Prefix%%nBestGiver% &Echo MaxComplex=%BestGiver% &Call Echo BestGiver=%%%Prefix%%nBestGiver%%% Pause Exit /B :Out Set "%~1=%5" &Set "%~2=%6" &Set "%~3=%7" &Set "%~4=%8" Exit /B |
boomdeamon, не знаю, что в ваших CMD, явно будет удобнее, чтобы не рисовать одно и то же дважды:
Код:
Call %Giver0%.cmd |
Цитата:
Цитата:
В общем: boomdeamon, если не выйдет соорудить код на CMD, то попробуем на powershell. Не хочется вникать в сам майнинг и запускать эти программы у себя, но чтобы написать код, необходимо тестировать сами программы и проверять, что у них на выходе... в крайнем случае, можно будет через внешний файл работать. |
Цитата:
Примерно так: 1. Создаем новый батник run_cuda_new.bat run_cuda_new.bat
Код:
@echo off - отличается от оригинального вставленным кодом из двух частей (пометки на вставки есть) Giver-ы записаны в переменную %Givers% (каждый отдельно, в двойных кавычках и друг от друга отделяются пробелом) В процессе работы будет создан каталог "1" (имя можно изменить, но если менять, то и в батнике, и в скрипте powershell одновременно), в котором будут формироваться результаты работы тестирования lite-client.exe, в текстовых файлах с именами Giver-ов. 2. Скрипт powershell script.ps1 (сохранить лучше в UTF8 с BOM и разместить надо рядом с run_cuda_new.bat): script.ps1
Код:
$folder = '.\1' - в powershell анализируются результаты тестов Giver-ов, выбирается единственный по наибольшему значению: Цитата:
- Это если, конечно, я верно осмыслил задачу... если что не так, поправить можно легко... PS Да, powershell должен быть v 5.1... на более старых версиях работоспособность не гарантируется. :) |
YuS_2,
Цитата:
boomdeamon, Вот вариант CMD. Вычистил от извращений из-за недомыслия в постановке.
Оставил за вами организацию промежуточного файла, хотя, ИМХО, можно бы было обойтись и без него. Код:
@Echo Off Код:
lite-client.exe -v 0 -C global.config.json -rc "runmethod %1 get_pow_params" >"%OutFile%" |
Подскажите возникла такая проблема, когда последовательно выполняются данные командники, то иногда происходит зависание и работа общего батника останавливается, как обработать исключение, например если 5 секунд нет ответа то переходить к выполнению следующей строки cmd ?
внутри командника такой код, для каждого со своими параметрами lite-client.exe -v 0 -C global.config.json -rc "runmethod kf-kkdY_B7p-77TLn2hUhM6QidWrrsl8FYWCIvBMpZKprBtN get_pow_params">kf-kkdY_B7p-77TLn2hUhM6QidWrrsl8FYWCIvBMpZKprBtN call kf-kkdY_B7p-77TLn2hUhM6QidWrrsl8FYWCIvBMpZKprBtN.cmd call kf8SYc83pm5JkGt0p3TQRkuiM58O9Cr3waUtR9OoFq716lN-.cmd call kf-FV4QTxLl-7Ct3E6MqOtMt-RGXMxi27g4I645lw6MTWraV.cmd call kf_NSzfDJI1A3rOM0GQm7xsoUXHTgmdhN5-OrGD8uwL2JMvQ.cmd call kf8gf1PQy4u2kURl-Gz4LbS29eaN4sVdrVQkPO-JL80VhOe6.cmd call kf8kO6K6Qh6YM4ddjRYYlvVAK7IgyW8Zet-4ZvNrVsmQ4EOF.cmd call kf-P_TOdwcCh0AXHhBpICDMxStxHenWdLCDLNH5QcNpwMHJ8.cmd call kf91o4NNTryJ-Cw3sDGt9OTiafmETdVFUMvylQdFPoOxIsLm.cmd call kf9iWhwk9GwAXjtwKG-vN7rmXT3hLIT23RBY6KhVaynRrIK7.cmd call kf8JfFUEJhhpRW80_jqD7zzQteH6EBHOzxiOhygRhBdt4z2N.cmd |
Цитата:
Вот вариант с запуском вашей процедуры (уточните, в чем отличаются параметры, возможно это уточнить при её вызове)
Введено время ожидания её завершения. По истечении этого времени она будет убита. Код:
@Echo Off |
boomdeamon, сколько времени в норме отрабатывает программа lite-client.exe? Как идея: запускать эту утилиту 10 раз со своими настройками по очереди с некоторым интервалом, приблизительно равным среднему времени на отработку без ожидания завершения через START, каждая сохранит результат работы в свой файл, и, после всей этой десятки, после некоторого интервала, убить задачи, которые не успели отработать (зависли?)
Реализовано
Код:
@Echo Off |
Время: 10:25. |
Время: 10:25.
© OSzone.net 2001-