标题: [文本处理] [分享]批处理计算字符串长度和重复次数 [打印本页]
作者: cjiabing 时间: 2010-8-5 20:27 标题: [分享]批处理计算字符串长度和重复次数
以前写一个与智能有关的东东,需要判断字符串的长度,那时候头晕脑胀的,有想法但写不出来,借鉴人家的又无法理解透彻。今天想弄一个计算词语重复次数的代码,原以为 “find /c”或者“findstr *”能解决问题,结果发现前者有缺陷后者又难以理解。
下面贡献的代码是一段处理字符串时常用的代码,它最基本的功能就是将文本和字符串拆解成单独的字符,一个字符一行,便于你对单独的字词进行编辑。
基本代码如下:
- @echo off
- set /p inf=请输入字符串或文本路径(不包括空格):
- if %inf:~-3,3%==txt (set inf=%inf%) else (set inf="%inf%")
- setlocal enabledelayedexpansion
- for /f %%i in (!inf!) do (
- set var=%%i
- for /l %%a in (0,1,100) do (
- set str=!var:~%%a,1!
- if defined str echo !str!&&set ddr=%%a&set /a ddl=!ddr!+1
- )
- )&echo 字符串长度是:!ddl!
- pause>nul
复制代码
该代码可以实现以下功能:
1、单字、竖排、拼接字符串
2、计算字符串长度
需要注意的是:
1、不处理空格,空格后面的内容被忽略。你可以使用其它命令过滤空格,比如for,具体方法我一直模糊。
2、数字“for /l ”设置的长度是100,不懂有无其它限制。
下面对该代码进行小小的改动可以用以统计重复字符,如下:
- @echo off
- :loop
- set /p inf=请输入字符串或文本路径(不包括空格):
- if %inf:~-3,3%==txt (set inf=%inf%) else (set inf="%inf%")
- setlocal enabledelayedexpansion
- for /f %%i in (!inf!) do (
- set var=%%i
- for /l %%a in (0,1,30) do (
- set str=!var:~%%a,1!
- if defined str echo !str!>>_cfjs.txt&&set ddr=%%a&set /a ddl=!ddr!+1
- )
- )&echo 字符串长度是:!ddl!
- set /p cfc=输入需要查找的字符:
- for /f "tokens=2 delims=:" %%m in ('find /c "!cfc!" _cfjs.txt') do echo 该字符重复次数为:%%m 次
- del _cfjs.txt
- echo.
- pause
- cls
- goto loop
复制代码
由于是单字处理,不支持统计两个字以上的词语,只支持单个的汉字、字母和标点符号
作者: cjiabing 时间: 2010-8-20 21:58
该代码是基础代码,可惜没人关心。
经过修改,可以实现提取指定字符串,进一步可以提取文本中任意字符前后的内容。
以下用以提取字符串“txt”,该代码用于将多个文本文件拖曳进批处理后同时获取这几个文本文件的路径名,也可以用以提取一个文本内容中含有“txt”的路径名。
可以修改“txt”为“exe”等后缀名,用以扑捉其它文件路径名。
有一定的限制,比如部分空格问题,可以考虑去掉“.%~dp0\”。以及效率偏低,有待完善。- @echo off
- echo %*>>%~dp0\_2tyxs.txt
- echo.>%~dp0\_test2.txt
- setlocal enabledelayedexpansion
- for /f "tokens=*" %%i in (%~dp0\_2tyxs.txt) do (
- set var=%%i
- for /l %%a in (0,1,1000) do (
- set /a ddl=%%a-1
- set str2=!var:~%%a,2!
- if "!str2!"==":\" call echo %%var:~!ddl!,1%%!var:~%%a,1000!>>%~dp0\_test1.txt
- )
- )
- for /f "tokens=*" %%i in (=%~dp0\_test1.txt) do (
- set var=%%i
- for /l %%a in (0,1,1000) do (
- set /a ddf=%%a+4
- set str=!var:~%%a,4!
- if "!str!"==".txt" echo !var:~0,%%a!.txt>>%~dp0\_test2.txt
- )
- )
- del %~dp0\_test1.txt,%~dp0\_2tyxs.txt
- for /f "tokens=1,2,3,4 delims=." %%a in (%~dp0\_test2.txt) do (
- set vara=%%a
- set varb=%%b
- set varcc=!varc:~0,1!"
- if /i "!varb:~0,3!"=="txt" echo !vara!.!varb:~0,3!>>%~dp0\_test3.txt
- )
- _results.txt
- for /f "delims=" %%a in ('sort %~dp0\_test3.txt') do (
- if not %%a equ !b! echo %%a>>%~dp0\_results.txt
- set b=%%a)
- del %~dp0\_test3.txt,%~dp0\_test2.txt
- start "" %~dp0\_results.txt
- EXIT
复制代码
[ 本帖最后由 cjiabing 于 2010-8-20 22:29 编辑 ]
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |