[英]How to read text file line by line which is excessing characters in batch file? Limiting the line length is allowed.(Windows, batch script)
##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 行。 但是,只要有 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
的重定向中<long_text.txt
)。 set /p
的內置限制為 1023 個字符。
因此set /p
用於塊時間。
要計算一行使用多少塊,行長度必須除以 1023,但必須減去 1 個字符,因為 LF 不計算(但 CR)。 +1022
是事實的結果,也必須讀取最后一個完整塊之后的剩余字符。
如果該行是 1023 的倍數(也是空行),則最后一個塊可以為空。
唯一剩下的點是最后一行。
這種技術不會讀取最后一行,但很容易在前面附加一個空行。
如果您使用的是受支持的 Windows 系統,則 PowerShell 將可用。 將20
更改為每行所需的最大字符數。
powershell -NoLogo -NoProfile -Command ^
"Get-Content -Path '.\longlines.txt' |" ^
"ForEach-Object { $_.substring(0,[Math]::min($_.Length, 20)) }"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.