簡體   English   中英

在Windows中計算文件中的定界符

[英]Count delimiter in a file in windows

我有一堆包含數千條記錄的文件。每個文件的結構是相同的。

每個記錄在單獨的行上,並具有多個由定界符“ |”分隔的字段。

每行應具有36個字段,但問題是其中某些行具有<> 35個字段,即<> 35'|' 字符。

有人可以在Windows中建議一種方法,通過它我可以識別行。 (如記錄中帶有分隔符<> 35的記錄應寫入錯誤的文件中)。

@ECHO Off
SETLOCAL
:: Looking for exactly 36 fields - no empty fields
FOR /f "delims=" %%a IN (q25936461.txt) DO (
 SET good=Y
 FOR /f "tokens=1,30*delims=|" %%m IN ("%%a") DO (
  IF "%%o" equ "" (SET "good=") ELSE (
   FOR /f "tokens=1,6,7delims=|" %%p IN ("%%o") DO (
    IF "%%r" neq "" SET "good="
    IF "%%q" equ "" SET "good="
   )
  )
 )
 IF NOT DEFINED good ECHO(%%a
)
ECHO ========== method 1 done =============
:: Looking for exactly 36 fields - allow empty fields
FOR /f "delims=" %%a IN (q25936461.txt) DO (
 SET good=Y
 SET "line=%%a"
 SET /a count=0
 CALL :analyse
 IF NOT DEFINED good ECHO %%a
)
ECHO ========== method 2 done =============

GOTO :EOF
:analyse
SET "linem=%line:*|=%"
IF "%linem%" neq "%line%" SET /a count+=1&SET "line=%linem%"&GOTO analyse
IF %count% neq 35 SET "good="
GOTO :eof

這是兩種方法。 測試是您的問題。

cat|dog|26/7/14|$15.00
cat|dog|26/7/14|$15.00
cat|dog|26/7/14|$15.00
cat|dog|26/7/14|$15.00
cat|dog|26/7/14|$15.00
cat|26/7/14|$15.00
cat|dog|26/7/14|$15.00
cat|dog|26/7/14|$15.00

這個命令

findstr /r /i /n /v "^.*|.*|.*|.*$" "C:\Users\User\Desktop\test.txt"

節目

6:cat|26/7/14|$15.00

鍵入findstr /? 更多。

如果有效行上的列數小於等於15,則可以單獨使用FINDSTR來完成。

例如,以下內容將顯示所有不完全具有三列的行:

findstr /vx "[^|]*|[^|]*|[^|]*" test.txt

但是FINDSTR不能處理超過15個字符類術語。 請參閱Windows FINDSTR命令的未記錄功能和限制是什么? 有關更多信息。 您的搜索將需要35個這樣的術語。

以下解決方案返回所有有故障的行,但忽略空行。 它依賴於REPL.BAT-一個混合的JScript / batch實用程序 ,它在stdin上執行正則表達式搜索/替換並將結果寫入stdout。 REPL.BAT是純腳本,它將在XP以后的任何現代Windows計算機上運行。

該解決方案使用REPL.BAT從正好具有36列的行中刪除所有字符,然后使用FINDSTR打印至少具有一個字符的其余行。

<test.txt repl "^([^|]*\|){35}[^|]*$" ""|findstr .

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM