标题: [文本处理] 批处理怎样截取txt文本随机行中以标点符号分割的字符数少于指定数值的随机字段? [打印本页]
作者: bsxwzy 时间: 2011-3-24 11:12 标题: 批处理怎样截取txt文本随机行中以标点符号分割的字符数少于指定数值的随机字段?
本帖最后由 pcl_test 于 2016-7-21 22:42 编辑
随机截取标点符号(空格,逗号,句号)之间的小断句。。。。限制13个字以内的断句
比如 我的一个txt文件文本内容: 如豆的煤油灯盏中,我度过了几年的学习时光,如水的童年也悄然逝去。哥哥到外地读书去了,我和妹妹也在镇里的一所中学读书。
处理后文件名为“如豆的煤油灯盏中” “如水的童年也悄然逝去”都可以
“我和妹妹也在镇里的一所中学读书”这个就超字数了。
大概就是这个情况。。
另外:
1.txt文件都是多行
2.随机行中截取随机断句。(13个字以内的断句)
3.是批处理N个txt文件.
高手帮忙写下,谢谢!
作者: batman 时间: 2011-3-24 11:38
空格也是标点符号?我真的第一次听到。。。
楼主可以将意思再描述清楚点不,如:txt文件是不是只有一行还是有多行?是随机截取第一行中的断句还是在随
机行中随机截取断句?还有是不是要批量处理N个txt文件?
作者: terse 时间: 2011-3-24 11:46
- @echo off
- set "str=如豆的煤油灯盏中,我度过了几年的学习时光,如水的童年也悄然逝去。哥哥到外地读书去了,我和妹妹也在镇里的一所中学读书。"
- set str=%str:,=,%
- set str=%str:。=,%
- setlocal enabledelayedexpansion
- for %%i in (%str%) do (
- set str=%%i
- if "!str:~13,1!" equ "" (
- set/a n+=1
- set _!n!=%%i
- )
- )
- set/a n=%random%%%n+1
- echo !_%n%!
- pause
复制代码
作者: bsxwzy 时间: 2011-3-24 11:53
空格不算 就是段落前面不空两格嘛!然后就随手加进去了。
1.txt文件都是多行
2.随机行中截取随机断句。(13个字以内的断句)
3.是批处理N个txt文件.
额,就是这样了。
作者: TX_kakashi 时间: 2011-3-24 11:55
- @echo off&setlocal enabledelayedexpansion
- set/p "file_path=[请拖入要改标题的文件]"
- for /f "usebackq tokens=1 delims=,。; " %%a in (%file_path%) do (
- set "string=%%a"
- )
- if "%string:~14,1%"=="" (echo 标题:[%string%]) else (echo 标题不符合规定)
- pause
复制代码
作者: tmplinshi 时间: 2011-3-24 12:08
本帖最后由 tmplinshi 于 2011-3-24 13:02 编辑
- @echo off
- SetLocal EnableDelayedExpansion
-
- for %%f in (*.txt) do call :sub "%%f"
- echo 完成。按任意键退出...
- pause >nul
- exit /b
-
- :sub
- rem 计算文件行数
- set n=
- for /f "usebackq" %%a in ("%~1") do set /a n += 1
-
- :retry
- rem 随机提取一行
- set /a skip_num = %random% %% n
- if "%skip_num%" neq "0" (set skip=skip=%skip_num%) else set skip=
- for /f "usebackq %skip% tokens=*" %%a in ("%~1") do (
- set str=%%a
- goto next
- )
-
- :next
- rem 从一行中随机选一段
- set "str=%str:"=%"
- for %%a in ("\" "/" ":" "<" ">" "|") do set str=!str:%%~a=!
- set "str=%str:?=%"
- set "str=%str:,=" "%"
- set "str=%str:。=" "%"
- set .n=
- for %%a in ("%str%") do (
- if "%%~a" neq "" (
- set NewName=%%~a
- if "!NewName:~13!"=="" (
- set /a .n += 1
- set !.n!=%%~a
- )
- )
- )
- if not defined .n goto retry
-
- set /a ran = %random% %% .n + 1
- ren "%~1" "!%ran%!.*" 2>nul || goto retry
- goto :eof
复制代码
作者: TX_kakashi 时间: 2011-3-24 12:18
@echo off
SetLocal EnableDelayedExpansion
for %%f in (*.txt) do call :sub "%%f"
exit /b
:sub
rem 计算文件行数
set n=
for /f "usebackq" %%a in ("%~1") do set /a n += 1
:retry
rem 随机提取 ...
tmplinshi 发表于 2011-3-24 12:08
用了不少goto语句,这样会影响递归算法吧?
作者: bsxwzy 时间: 2011-3-24 12:22
本帖最后由 bsxwzy 于 2011-3-24 12:34 编辑
6# tmplinshi
貌似运行不了诶!!运行窗口一闪而过。
作者: wc726842270 时间: 2011-3-24 12:24
8# bsxwzy
是在说所有人的么?能否指明
作者: bsxwzy 时间: 2011-3-24 12:33
5# TX_kakashi
不是太会用!!!
作者: tmplinshi 时间: 2011-3-24 12:57
本帖最后由 tmplinshi 于 2011-3-24 13:02 编辑
6# tmplinshi
貌似运行不了诶!!运行窗口一闪而过。
bsxwzy 发表于 2011-3-24 12:22
我测试是可以运行的。
代码重新修改了下,你再试试。
如果有错误的话,在批处理所在目录打开一个 cmd,输入批处理的文件名来运行,看错误提示是什么。
作者: Batcher 时间: 2011-3-24 12:57
8# bsxwzy
3楼、5楼、6楼,这么多代码,哪个一闪而过?
作者: bsxwzy 时间: 2011-3-24 13:09
现在可以了,非常感谢!!!!
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |