看来从心动到行动
还有很长的距离啊- :: GetMaxCharText.cmd - 找出字符最多的文本行
- :: qzwqzw - 2010-01-05
- ::
- :: 基本构思:
- :: 将原文本每行尾部加足够的一定数量的空格,在文本右侧形成一个不等齐空格区域
- :: 原文本行越长,其后的空格区域就越长,然后用sort /+n 仅对空格区域进行排序
- :: 因为区域内都是空格,则排序的依据就是空格的长度,也就是原行文本的长度
- ::
- @echo off & setlocal EnableDelayedExpansion
- set maxLineLen=80
- set infile=%~sf0
- for /l %%i in (1,1,%maxLineLen%) do set zone= !zone!
- :: findstr 会忽略空行和仅含空格的行,但显示行号会跨过这些行,这是我们需要的特性
- :: 将行号与行文本分别处理,是因为不对齐行号会影响行文本长度的判断
- (for /f "tokens=1* delims=:" %%l in ('findstr /n /r /c:"[^ ]" %infile%') do (
- set LineNo= %%l
- set LineNo=!LineNo:~-10!
- set Line=%%m
- set Line=!Line: =!
- echo.!LineNo!:!Line!!zone!
- ))>%temp%\%~sn0~1.t~1
- sort /r /+%maxLineLen% %temp%\%~sn0.t~1 > %temp%\%~sn0.t~2
- set/p maxLine=< %temp%\%~sn0.t~2 >nul
- :: 已找到最多字符的行,以下是提取行号和原行文本,行长度因未要求而忽略
- for /f "delims=: " %%i in ("%maxline%") do set maxLineIdx=%%i
- :: 使用find而不是findstr,是因为find够用够简单
- set seekLine=find /v /n "" ^^^<%infile%^^^|find "[%maxLineIdx%]"
- echo.字符最多的行第 %maxLineIdx% 行,内容为:
- for /f "tokens=1* delims=[]" %%l in ('%seekLine%') do echo.%%m
- for %%f in (%temp%\%~sn0.t*) do del %%f
复制代码
[ 本帖最后由 qzwqzw 于 2010-1-5 10:46 编辑 ] |