[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]批处理findstr /o为何无法正常显示第一行偏移量?

本帖最后由 lfoqtal 于 2011-8-9 08:27 编辑
/O        在每个匹配行前打印字符偏移量。

这句话是findstr的说明
但在实际运行中,我发现它无法正常显示文本的第一行
  1. @echo off
  2. echo 123456|findstr /o "."
  3. echo 123456>1.txt
  4. echo asdafw>>1.txt
  5. echo 45688>>1.txt
  6. findstr /o "." 1.txt
  7. pause
复制代码
可以看到在显示单个变量时,根本无法计算出偏移量,显示0:
而在显示文本时第一行也是为0:,后几行则可以正常显示只是多算了两个数是换行符所占偏移量
为什么会这样呢,
尝试了多次后发现原来是累计偏移量问题啊!
第一行显示的是起头初始值,所以是0
他并不会在最后一行显示所累计的最终值,所以显示文本时少了最后一行的值

所以/o并不是用来计算总字符偏移量的,而是用来计算本行在总文本中是从第几位偏移开始的,所以只显示头不显示尾
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2
通用简洁实用就是批处理精神

这个/o在我的理解中是计算本行之前的字符偏移量之和
而在第一行之前是没有字符的,所以才会显示为0

TOP

计算单个变量长度的方法
  1. @echo off
  2. :1
  3. set /p p=
  4. for /f "delims=:" %%a in ('(echo.%p%^&echo.1^) ^|findstr /o "."') do set /a a=%%a-3
  5. echo %a%个字符
  6. pause>nul
  7. goto :1
复制代码
但在这里就不明白了.
为什么要-3而不是-2??
通用简洁实用就是批处理精神

TOP

正如2L所说
FINDSTR /O 会计算包括它自身产生的字符,并在相应的行首显示出其总和
但不得不说这个参数没用过几回,也不知道对不对
枫中残雪:风停了,我的心却在动,让我心中的寒意走向远方

TOP

本帖最后由 ArdentMan 于 2011-8-9 00:47 编辑

每一行除了可见字符还有一个回车符和一个换行符

所以计算时要减去它们的偏移量2

因此计算本行的字节数要用下一行的偏移量减本行的偏移量并减2

计算末行的要先人为加上一行才行~~~~
一路飘过的鸟~~~

TOP

本帖最后由 hanyeguxing 于 2011-8-9 01:41 编辑

回复 3# lfoqtal

计算单个变量长度的方法
  1. @echo off
  2. :1
  3. set /p p=
  4. for /f "delims=:" %%a in ('(echo.%p%^&echo.1^) ^|findstr /o "."') do set /a a=%%a-3
  5. echo %a%个字符
  6. pause>nul
  7. goto :1
复制代码
复制代码但在这里就不明白了.
为什么要-3而不是-2??
lfoqtal 发表于 2011-8-8 21:10

1,/o 统计的是此行之前的偏移和
2,换行、回车也在统计内
3,因为 (echo.%p%&echo.1) | 命令 使得字符串后多了一个空格,所以该减3
1

评分人数

寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

回复 6# hanyeguxing


    原来如此,我都忘了|管道会在句尾加个空格这件事了
通用简洁实用就是批处理精神

TOP

返回列表