Написание пакетного скрипта для определения длины строки и падов - PullRequest
0 голосов
/ 17 апреля 2020

Я пытался найти длину строки, которая заключает числа и на основе этого значения я хотел бы заполнить нулями. Но у меня возникли проблемы.

Что я пытаюсь сделать: -> У меня есть CSV-файл, содержащий 3 поля значений, разделенных запятой, и мне нужно проверить каждую из этих переменных, являются ли они больше или меньше чем число для дальнейшей обработки, например

368,0,2334
0,42,2000
24,215,0

-> В зависимости от длины строки я хочу заполнить их нулями, соответственно, прежде чем сравнивать с другим числом 4 di git (Four di git номер фиксирован) для дальнейшей обработки

@echo off
setlocal EnableExtensions enableDelayedExpansion

FOR /F "tokens=1-3* delims=," %%a IN (data.csv) DO (

    set sum1="%%~a"
    set sum2="%%~b"
    set sum3="%%~c"

    set "MYSTRING=!sum1!"
    (echo "!MYSTRING!" & echo.) | findstr /O . | more +1 | (set /P RESULT= & call exit /B %%RESULT%%)
    set /A STRLENGTH=%ERRORLEVEL%-5
    >> length.csv echo string "!MYSTRING!" length = !STRLENGTH!

аналогично другим переменным тоже. Я получаю результаты, как показано ниже.

Output:
string "388" length = -5
string "401" length = -5
string "693" length = -5
string "0" length = -5
string "0" length = -5

некоторые другие выходные данные, использующие проблемы с длиной строки на этом сайте, также приводят к

ECHO is Switched OFF
ECHO is Switched OFF
ECHO is Switched OFF

Expected Output:
string "388" length = 3
string "401" length = 3
string "6934" length = 4

Затем я хочу дополнить нули до 2 или 3 цифр. и сделайте из них 4 цифры, например 0388, 0401 соответственно, и оставьте 4 цифры, чтобы сравнить их с данными.

Может кто-нибудь подсказать мне, где я ошибаюсь?

Почему эта переменная, хранящаяся в sum1, должна быть заключена в! Sum1! а не% sum1%? (Первоначально сделал ошибку и даже не смог сохранить значения в переменной для вычисления длины) Я также очень плохо знаком с пакетным скриптингом.

Спасибо. Ваша помощь очень ценится.

1 Ответ

0 голосов
/ 17 апреля 2020

Вот пример, основанный на моем комментарии: (добавляя затем последние четыре символа) :

@For /F "Tokens=1-4 Delims=]," %%G In ('"%__APPDIR__%find.exe /V /N ""<"data.csv""') Do @(
    Set /A record%%G]field[1]=1000%%H,record%%G]field[2]=1000%%I,record%%G]field[3]=1000%%J
    SetLocal EnableDelayedExpansion
    Echo(!record%%G]field[1]:~-4!,!record%%G]field[2]:~-4!,!record%%G]field[3]:~-4!
    EndLocal)
@Pause

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...