Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Необходимо из файла считать строку и участи строки присвоить переменным

Ответить
Настройки темы
CMD/BAT - Необходимо из файла считать строку и участи строки присвоить переменным

Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: txt test.txt
(160 байт, 4 просмотров)
Тип файла: txt dirlist.txt
(170 байт, 4 просмотров)
Есть текстовый файл в котором есть строка
remote result (not to be trusted): [ 82074624499369902458868130586453554849 65228258370552867395165752861763116226784530337709001549878075 100000000000 256 ]
необходимо для каждое числа, которое заключено в [ ] присвоить значение переменной, числа могут быть разной длины каждое
a=82074624499369902458868130586453554849
b=65228258370552867395165752861763116226784530337709001549878075
c=100000000000
d=256

Отправлено: 22:38, 18-11-2021

 

Аватара для YuS_2

Crazy


Contributor


Сообщения: 1231
Благодарности: 515

Профиль | Отправить PM | Цитировать


Цитата boomdeamon:
необходимо для каждое числа, которое заключено в [ ] присвоить значение переменной, числа могут быть разной длины каждое »
С такими числами именно, CMD работать не умеет... решение можно реализовать на powershell. Для реализации необходимо описать задачу, а не попытку/способ её решения.

-------
scio me nihil scire. Ѫ

Это сообщение посчитали полезным следующие участники:

Отправлено: 09:29, 19-11-2021 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6668
Благодарности: 1555

Профиль | Отправить PM | Цитировать


Powershell
Код: Выделить весь код
$a,$b,$c,$d = ((gc 'D:\temp\test.txt') -replace ".*?\[(.*?)\].*",'$1').Trim().Split()

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

Это сообщение посчитали полезным следующие участники:

Отправлено: 09:29, 19-11-2021 | #3


Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата YuS_2:
С такими числами именно, CMD работать не умеет... решение можно реализовать на powershell. Для реализации необходимо описать задачу, а не попытку/способ её решения. »
Хорошо если с числами не умеет работать то можно оставить как строку, понятно что на powershell можно реализовать, но нужно CMD, понятно что нужно в цикле перебрать символы входной строки, найти [ как начало фрагмента и собирать посимвольно строку из символов, где разделитель между ними пробел и конец фрагмента ] но пока не разобрался как.

Отправлено: 09:42, 19-11-2021 | #4


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1231
Благодарности: 515

Профиль | Отправить PM | Цитировать


Цитата boomdeamon:
если с числами не умеет работать то можно оставить как строку »
Цитата boomdeamon:
нужно в цикле перебрать символы входной строки, найти [ как начало фрагмента и собирать посимвольно строку из символов, где разделитель между ними пробел и конец фрагмента ] »
Если файлы, показанные Вами, всегда в таком формате, то разделителя достаточно в виде пробела...
Код: Выделить весь код
@echo off
for /f "tokens=8-11 delims= " %%a in (test.txt) do set "a=%%a"&set "b=%%b"&set "c=%%c"&set "d=%%d"
echo [%a%]-[%b%]-[%c%]-[%d%]
pause&exit /b
Если квадратные скобки не всегда обрамляются пробелами, то код немного усложнится и придется пересчитывать номера токенов...

Ну и сравните код powershell, лишенный всех подобных недостатков, при этом с числами можно работать именно как с числами, а не как с текстом:
Код: Выделить весь код
$file = '.\dirlist.txt'
$arr=@()
foreach($item in ((gc $file -enc utf8) -split " |\[|\]"|?{$_ -match '^\d+$'})){$arr += [bigint]"$item"}
$arr

-------
scio me nihil scire. Ѫ

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:00, 19-11-2021 | #5


Ветеран


Contributor


Сообщения: 2733
Благодарности: 1698

Профиль | Отправить PM | Цитировать


Еще вариант:
Код: Выделить весь код
@Echo Off
cls
	Set "FileIn=D:\Мой контент\Загрузки\dirlist.txt"
	Set "KeyWord=remote result (not to be trusted):"

	If Not Exist "%FileIn%" (Echo File "%FileIn%" not found &Pause &Exit /B 2)
	For /F "usebackq tokens=2 delims=[]" %%s In (`2^>nul FINDSTR /I "%KeyWord%" "%FileIn%"`) Do Call :Out "a" "b" "c" "d"  %%s
	Echo a=%a% &Echo b=%b% &Echo c=%c% &Echo d=%d%  
Pause
Exit /B

:Out
	Set "%~1=%5" &Set "%~2=%6" &Set "%~3=%7" &Set "%~4=%8"
Exit /B
При этом в файле строка может быть не единственной, вместе с иными строками, без этой указанной ключевой фразы.
Цитата YuS_2:
Если квадратные скобки не всегда обрамляются пробелами »
- здесь это глубоко безразлично, лишь бы [] были, и не важно, сколько пробелов до и между числами.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 19-11-2021 в 11:00.

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:38, 19-11-2021 | #6


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1231
Благодарности: 515

Профиль | Отправить PM | Цитировать


Цитата megaloman:
При этом в файле строка может быть не единственной, вместе с иными строками, без этой указанной ключевой фразы. »
Это да, без описания задачи и реальных данных... можно предполагать, что угодно...
Например, что количество переменных должно быть не четыре, а неограниченно много, по сумме необходимых строк, в итоге.

В варианте для powershell, об этом задумываться не надо, все числа будут в массиве, по сути - на каждое число по переменной.

Цитата megaloman:
здесь это глубоко безразлично, лишь бы [] были, и не важно, сколько пробелов до и между числами. »
Да, точно, в cmd же разделители складываются, если идут подряд... ну, тогда и усложнения не потребуется...

-------
scio me nihil scire. Ѫ

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:12, 19-11-2021 | #7


Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: zip pow-miner-win-util-main (1).zip
(15.2 Kb, 2 просмотров)
Тип файла: 7z global.config.json.7z
(6.1 Kb, 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

Отправлено: 13:18, 19-11-2021 | #8


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1231
Благодарности: 515

Профиль | Отправить PM | Цитировать


Цитата boomdeamon:
это второе значение в [] »
Цитата boomdeamon:
Необходимо опросить каждый из десяти гиверов и выбрать тот из гиверов BestGiver у которого искомое значение Complex будет наибольшим и передать эти значения BestGiver в другую программу »
Вот тут и вступит ограничение CMD, в числовых значениях, ибо сравнить их не получится, а сравнение литеральных значений чисел приведет к неожиданным результатам. Это легко пронаблюдать, например в таком выражении:
Код: Выделить весь код
if "11" gtr "102" (echo Yes) else (echo No)
которое выдаст результат "Yes", хотя 11, явно не больше 102
Так что, выход только один - переходить на powershell и в нем уже организовывать сравнение чисел...

Вашу строку:
Цитата boomdeamon:
lite-client.exe -v 0 -C global.config.json -rc "runmethod %Giver0% get_pow_params" »
можно запускать и в powershell и возможно, даже получать выходные данные по конвейеру, с целью дальнейшего их применения в коде...
Но чтобы не делать сизифов труд, тут необходимо Ваше желание в использовании powershell, а где-то даже его и изучение

ЗЫ И как, майнинг - доходное дело? Получается что-то намайнить?

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 19-11-2021 в 14:14.

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:59, 19-11-2021 | #9


Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата YuS_2:
которое выдаст результат "Yes", хотя 10001, явно не меньше и уж тем более, не равно 1002
Так что, выход только один - переходить на powershell и в нем уже организовывать сравнение чисел... »
Это я понял что некорректно идет сравнение строк таких, выход я придумал, но реализовать не получилось, первое узнать длину строки и выбирать из них с большей длиной, если строк больше одной, то выбирать ту у которой первая цифра больше(хотят тут проблема будет правильно сравнивать 9 будет в строке больше 5 )) ), если опять больше одной строки то проверять вторую цифру и выбирать ту что больше и дальше уже не важно можно остановиться и выбирать любой из гиверов где комплекс будет удовлетворять описанным условиям, но реализовать пока знаний не хватает )

Отправлено: 14:11, 19-11-2021 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Необходимо из файла считать строку и участи строки присвоить переменным

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - CMD - читаю из файла, если первый символ строки =*, то вывести на экран строку jester7 Скриптовые языки администрирования Windows 16 11-04-2022 13:52
PowerShell - Разложить строку по переменным. garm Скриптовые языки администрирования Windows 8 14-10-2020 12:18
CMD/BAT - Слова вводимые пользователем разбить на части и присвоить переменным zerdox@vk Скриптовые языки администрирования Windows 20 03-08-2019 18:30
CMD/BAT - [решено] Присвоить переменным значения имен файлов в папке kopbetby Скриптовые языки администрирования Windows 5 10-10-2016 14:26
VBS/WSH/JS - Считать переменную из файла Udar_Nick Скриптовые языки администрирования Windows 17 30-06-2016 12:14




 
Переход