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

[文本处理] 【练习】批处理显示文本中8字节的行

在百度贴吧看到一题,出给大家练练手。
那儿有一仙说他们老大不加思索就作出来了,(本人足足想了10分钟才有完整思路)实在对这位老大佩服的很,可惜未见到代码 (^_^)
题:
要求显示a.txt中8字节的行,注意有特殊字符 ^%&<!>等。
增加要求为:不创建临时文件,不使用第三方工具。
注意:说的是字节而不是字符,需考虑到多种情况,比如冒号、分号开头的行。。。




.
技术问题请到论坛发帖求助!

回复 13、14楼 的帖子

(more "%~f0"&echo.)|findstr /o .*
这样会多出额外的空格。

要再加一行,其实多加一个more就行了:
more "%~f0"|more|findstr /o .*
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

findstr /x strings filename,等同于 findstr "^strings$" filename,也等同于 findstr /be "strings" filename
这样的写法有最后行问题(最后行没有回车的情况)。

type filename | findstr /x strings
这样写没有上面的问题。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

回复 27楼 的帖子

确实牛,但是有疑惑了
.        通配符: 任何字符(findstr的帮助)
我在百度上搜索,字符时有别于字节的:
字符指一个字母或一个字或一个标点或一个符号,不一定几个字节
显然这里的点号是匹配字节了,我用上面的代码测试了,一个汉字要两点才能匹配
有点糊涂了。。。

TOP

后面的“echo.”是不必要的,more也是不必要的,直接用type也行,此时不存在最后行问题。

findstr 的正则还真是古怪。下面是javascript的正则:
  1. mshta "javascript:alert( '12345678\r\n一二三四'.match(/^........$/gim) ); alert( '12345678\r\n一二三四'.match(/^....$/gim) );close();"
复制代码
看来 findstr 问题不少。除了以前cn-dos的willsort总结的,前不久又有人发现了一个:http://bbs.verybat.org/thread-18013-1-2.html
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

狂汗,居然如此简单。。。
:
  1. @echo off
  2. (more a.txt&echo.)|findstr /x ........
  3. pause
复制代码
2

评分人数

    • netbenton: 如此。。。真的汉啊!PB + 10
    • keen: 这都可以,牛叉!PB + 5
技术问题请到论坛发帖求助!

TOP

  1. @echo off
  2. for /f "eol= delims=" %%i in ('type a.txt') do (set "str=%%i"
  3.     for /f "skip=1 delims=:" %%a in ('^(echo "%%i"^&echo;^)^|findstr /o .*') do (
  4.         set /a num=%%a-5
  5.         setlocal enabledelayedexpansion
  6.         if !num! equ 8 echo;!str!
  7.         endlocal
  8. )
  9. )
  10. pause
复制代码
(*^_^*)

TOP

回复 23楼 的帖子

看22楼的意思应该是自己编写的exe文件,这不应该说算,应该说很牛啊。
技术问题请到论坛发帖求助!

TOP

楼上骗子点击呀~~~
用EXE文件这也算吗???

TOP

对文本大的速度不行~~现在还在想另的方法~~在群里还谈~~你又不上群里聊~~~

TOP

测试一吓我的笨方法吧~~


@echo off
for /f "tokens=* delims=國" %%a in (总和数.txt) do (
set "q=%%a"
echo %%a>t.txt<nul
echo.>>t.txt
for /f "skip=1 tokens=1* delims=:" %%b in ('findstr /o .* t.txt') do (
if %%b==10 call set/p"=%%q%%">>总和数2.txt<nul&echo.>>总和数2.txt
)
)
del t.txt
pause

TOP

1234567半

不能完全8字节分吧...汉字难道要...

TOP

回复 17楼 的帖子

这样会忽略冒号开头的行吧。
技术问题请到论坛发帖求助!

TOP

还真没想到 more 会自己加行  最后行一直困人哦  少个FOR 可行吗
  1. @echo off
  2. for /f "tokens=1* delims=:" %%i in ('"(more 1.txt&echo aa)|findstr /o ".*""') do (
  3.    set/a n=%%i-m-2
  4.    setlocal enabledelayedexpansion
  5.    if !n! equ 8 echo !var!
  6.    endlocal&set var=%%j&set/a m=%%i
  7. )
  8. pause
复制代码

TOP

z 区分不了双字节与单字节字符。

全角字符占 2 个字节,而全角的 a会小于半角的 b

TOP

返回列表