##test.txt##
First line = 1;*|:12345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345
Second line = 5;*|:3215432;*|:21543215432154321543215432154321543215432154321543215432154321543215;*|:543215;*|:5432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321543215432154321
SetLocal EnableDelayedexpansion
for /F "tokens=* delims=" %%a in ('type "test.txt"') do (
set "Line=%%a"
echo Line: "!Line!"
)
显然,以上代码无法读取test.txt中的2行,因为每一行都超出了限制(8191个字符)。
通过键入
type "test.txt"
仍然导致test.txt文件中的两行。但是,一旦有2行进入for循环,就无法读取这些行。
我不需要整个行长,因此我尝试通过删除字符串的多余部分来预处理文本文件。例如,在上面的示例中,将行长度限制为8100。
1.如何在Windows环境中不使用记事本(任何GUI编辑器)的情况下编辑上述文本文件?
2.如果我不需要预处理文件,避免上述问题的诀窍是什么?
您可以使用块读取器,它将每一行拆分为最大大小为1023个字符的块。
@echo off
setlocal EnableDelayedExpansion
set pos=0
set line=
<long_text.txt (
FOR /F "tokens=1 delims=:" %%1 in ('findstr /o "^" long_text.txt') DO (
set new_pos=%%1
set /a size=new_pos-pos
set /a "chunks=(size-1+1022) / 1023"
if defined line echo Line: !line! chunks=!chunks!
set /a pos=new_pos
for /L %%# in (1 1 !chunks!) do (
set "partial="
set /p partial=
if defined partial (
echo #!line! chunk %%# -- !partial:~0,10! ... !partial:~-10!
)
)
set /a line+=1
)
)
外环FOR /F .. findstr /O
用于通过计算两条线之间的位置差来确定每条线的长度。行长
用于计算要读取整行必须读取多少块。
一行本身被读取set /p
(从的重定向读取<long_text.txt
)。set /p
内置限制为1023个字符。
因此set /p
使用块时间。
要计算单行使用多少块,必须将行长度除以1023,但必须减去1个字符,因为LF不计数(而是CR)。这+1022
是事实的结果,最后一个完整块之后的其余字符也必须被读取。
如果该行是1023的倍数(也是一个空行),则最后一个块可以为空。
唯一剩下的一点是最后一行。
此技术不会读取最后一行,但是在前面添加一个空行很容易。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句