2

ファイルを 8159 バイト長の順次ページに分割しようとしています。ファイルの 8159 バイトを読み取り、all!count! に保存するにはどうすればよいですか。var? ファイルが 8159 以下の場合、ファイルを読み取り、!all! に設定します。変数。:split ラベルで、非常に多くのバイトだけを読み取って変数に保存するにはどうすればよいですか。

@echo off
setlocal EnableDelayedExpansion EnableExtensions
for /f "tokens=*" %%a in ("newhtml.html") do set FileSize=%%~za
echo FileSize is %FileSize% bytes
if %FileSize% GTR 8159 goto split

SETLOCAL DisableDelayedExpansion 
set "all="
FOR /F "usebackq delims=" %%a in (`"findstr /n ^^ newhtml.html"`) do (
    set "line=%%a"
    SETLOCAL EnableDelayedExpansion
    set "line=!line:#=#S!"
    set "line=!line:*:=!"
    for /F "delims=" %%p in ("!all!#L!line!") do (
        ENDLOCAL
        set "all=%%p"
    )
)
SETLOCAL EnableDelayedExpansion
if defined all (
set "all=!all:~2!"
set ^"all=!all:#L=^
[blank line, remove this comment]
[blank line, remove this comment]   
!"
set "all=!all:#S=#!"
)
echo the all variable is: !all!
goto end

:split
set count=0
set /a all_sub=%FileSize% / 8159
set /a all_rem=%FileSize% %% 8159
if %all_rem% NEQ 0 set /a all_ttl=%all_sub% + 1
echo %all_sub% full page(s), %all_rem% bytes(s) leftover, %all_ttl% total pages

for  %%a in ("newhtml.html") do (
    set /a count=count + 1
    echo Read 8159 bytes from this file newhtml.html, save to all!count!
    if !count! EQU %all_ttl% echo All done & goto end
)

goto end

:end

ヘルプが必要なセクションは分割ラベルで、ファイルを読み取る for ループで、一度に 8159 バイトのデータのみを取得してシーケンシャル変数に書き込む方法です。!all! を作成する必要があると思います。関数を呼び出してから?

編集:このファイル(http://www.fourmilab.ch/splits/)を見つけて分割を行い、それをALLルーチンに追加して再構築する短い作業を行いました。dbenham と jeb に感謝します。

4

1 に答える 1

2

Why not simply read the file into an array?
Each line would be one entry this works, if there isn't any line with more than ~8190 characters.
Then you didn't need the replacing tricks for the linefeed and so on.

But this depends of your actual problem.

@echo off
SETLOCAL DisableDelayedExpansion
set "all="
set count=0
FOR /F "usebackq delims=" %%a in (`"findstr /n ^^ aux1.txt"`) do (
    set "line=%%a"
    set /a count+=1
    SETLOCAL EnableDelayedExpansion
    set "line=!line:*:=!"
    for /F "delims=" %%p in (^"set "array[!count!]=!line!"^") do (
        ENDLOCAL
        %%p
    )
)

SETLOCAL EnableDelayedExpansion
for /L %%n in (1 1 %count%) do (
  echo Line%%n:!array[%%n]!
)
于 2012-05-17T20:13:22.087 に答える