Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Обработка более 1028 символов в переменной (http://forum.oszone.net/showthread.php?t=296095)

worship 26-02-2015 14:48 2476168

Обработка более 1028 символов в переменной
 
Всем привет,

Имеется следующий батник:

Цитата:

@echo off

set /P initList=<temp.txt

call :parse "%initList%"
goto :end

:parse
setlocal
set list=%1

for /F "delims=, tokens=1*" %%f in (%list%) do (
rem if the item exist
if not "%%f" == "" call :getLineNumber %%f
rem if next item exist
if not "%%g" == "" call :parse "%%g"
)
endlocal
goto :end

:getLineNumber
setlocal

echo %1

endlocal

:end
и обрабатываемый файл вида:
Цитата:

0000000000002980,000000000100091C,0000000000D40FF1,00000000001C636B,00000000003D2D33,00000000001C711 2,00000000001A26D8,00000000001A223D,00000000001A2238,0000000001063B24,0000000001063B8A,0000000001063 B57,0000000000B055BF,0000000001063BA3,0000000001063BA1,0000000001063BB2,0000000001063B8F,00000000010 63AF8,00000000003D099B,00000000003D099A,00000000003D08F6,00000000003D08B3,00000000003D08C2,000000000 03D0910,0000000000BC8766,0000000000124B89,00000000003D089C,00000000003D0B81,00000000003D0B79,0000000 0003D0B7A,00000000003D0B67,00000000003D0B9B,00000000003D0B95,00000000003D0A47,00000000003D0B2C,00000 000003D0B40,0000000000C8498E,0000000000BC7626,0000000001062FC5,0000000000125E34,0000000001063956,000 0000000C89C03,000000000010452F,0000000000231840,00000000001EFE81,0000000000BA0525,0000000000BE9EBD,0 0000000001C9DF5,00000000001C9CBC,00000000002577BD,00000000003AFBF0,0000000000C17FAA,0000000000C17FA7 ,0000000000C17FBC,0000000000C17FBA,0000000000C17FB7,0000000000C17FB8,0000000000C17FB2,0000000000C17F B0,0000000000C17F7F,0000000000C17F7E
Обработка обрубается на значении "0000000000C17F7F" - типа превышен лимит символов в переменной. Может кто-нибудь подскажет, как это обойти?

Foreigner 26-02-2015 15:00 2476178

worship,
Код:

@echo off
setlocal

for /f "tokens=* delims=," %%i in ('type temp.txt') do call:1 %%i
goto:eof

:1
for %%i in (%*) do echo %%i


worship 26-02-2015 15:17 2476181

Foreigner, спасибо, работает. Правда только для строки длинной в 8171 символ. Для строки длинее - "The input line is too long.":(

Foreigner 26-02-2015 16:09 2476209

worship,
Тогда придется применять сторонние утилиты. С помощью sed.exe:
Код:

@echo off

for /f %%i in ('sed "s/,/\n/g" temp.txt') do echo %%i

Или смотреть в сторону PowerShell:
Код:

(get-content temp.txt).split(',')

worship 27-02-2015 13:34 2476631

Что-то не додумался sed'ом финт такой сделать) Foreigner, благодарю за помошь.


Время: 13:11.

Время: 13:11.
© OSzone.net 2001-