windows中文件中的计数分隔符

windows中文件中的计数分隔符,windows,cmd,Windows,Cmd,我有一堆包含数千条记录的文件,每个文件的结构都是相同的 每条记录位于单独的一行上,并有多个字段由分隔符“|”分隔 每行应该有36个字段,但问题是其中一些行有35个字段,即35个“|”字符 谁能在windows中建议一种方法,我可以通过它来识别行。(如带分隔符35的记录应写入坏文件)。On 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/

我有一堆包含数千条记录的文件,每个文件的结构都是相同的

每条记录位于单独的一行上,并有多个字段由分隔符“|”分隔

每行应该有36个字段,但问题是其中一些行有35个字段,即35个“|”字符

谁能在windows中建议一种方法,我可以通过它来识别行。(如带分隔符35的记录应写入坏文件)。

On

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"
显示

键入
findstr/?
了解更多信息。

@ECHO Off
SETLOCAL
::正在查找36个字段-没有空字段
对于/f“delims=”%(q25936461.txt)中的%%a(
设置好=Y
对于/f“令牌=1,30*delims=|”%%m IN(“%a”)DO(
如果“%%o”eq”“(设置“good=”)其他(
对于/f“tokens=1,6,7delims=|”%%p IN(“%%o”)DO(
如果“%%r”neq“设置”good=”
如果“%%q”相等“设置”良好=”
)
)
)
如果未定义良好回波(%%a
)
回波==============方法1完成=============
::正查找36个字段-允许空字段
对于/f“delims=”%(q25936461.txt)中的%%a(
设置好=Y
设置“行=%%a”
设置/a计数=0
电话:分析
如果未定义,则返回良好%%a
)
回波==============方法2完成=============
后藤:EOF
:分析
设置“linem=%line:*|=%”
如果“%linem%”neq“%line%”设置/a计数+=1并设置“line=%linem%”并转到分析
如果%count%neq 35设置为“good=”
后藤:eof

这里有两种方法。测试是你的问题….

如果有效行上的列数是你说的35时,我不确定我是否正确解释了你。35个字段基本上是
| ||| |
或者大于或小于我假设的35个分隔符的预期数量,那么解决方案有效吗ve是否高效/快速?字符之间的数据是什么字符集?是否只有字母数字?字段可以是数字或字母数字。解决方案不需要高效/快速。将有36个字段,每个字段由分隔符分隔。最后一个字段没有分隔符,因此我假设每行应该有35个分隔符delims。如果delims小于35或大于35,则为坏数据,因此我需要报告该数据(坏)如果最后一个字段包含非空值,则其效果非常好。如果最后一个字段为空,则给出错误结果。我仍然接受。
6:cat|26/7/14|$15.00
findstr /vx "[^|]*|[^|]*|[^|]*" test.txt
<test.txt repl "^([^|]*\|){35}[^|]*$" ""|findstr .