Board logo

标题: [文本处理] 批处理怎样截取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

  1. @echo off
  2. set "str=如豆的煤油灯盏中,我度过了几年的学习时光,如水的童年也悄然逝去。哥哥到外地读书去了,我和妹妹也在镇里的一所中学读书。"
  3. set str=%str:,=,%
  4. set str=%str:。=,%
  5. setlocal enabledelayedexpansion
  6. for %%i in (%str%) do (
  7.     set str=%%i
  8.     if "!str:~13,1!" equ "" (
  9.        set/a n+=1
  10.        set _!n!=%%i
  11.     )
  12. )
  13. set/a n=%random%%%n+1
  14. echo !_%n%!
  15. pause
复制代码

作者: bsxwzy    时间: 2011-3-24 11:53

空格不算 就是段落前面不空两格嘛!然后就随手加进去了。
1.txt文件都是多行
2.随机行中截取随机断句。(13个字以内的断句)
3.是批处理N个txt文件.

额,就是这样了。
作者: TX_kakashi    时间: 2011-3-24 11:55

  1. @echo off&setlocal enabledelayedexpansion
  2. set/p "file_path=[请拖入要改标题的文件]"
  3. for /f "usebackq tokens=1 delims=,。; " %%a  in (%file_path%) do (
  4.   set "string=%%a"
  5. )
  6. if "%string:~14,1%"=="" (echo 标题:[%string%]) else (echo 标题不符合规定)
  7. pause
复制代码

作者: tmplinshi    时间: 2011-3-24 12:08

本帖最后由 tmplinshi 于 2011-3-24 13:02 编辑
  1. @echo off
  2. SetLocal EnableDelayedExpansion
  3. for %%f in (*.txt) do call :sub "%%f"
  4. echo 完成。按任意键退出...
  5. pause >nul
  6. exit /b
  7. :sub
  8. rem 计算文件行数
  9. set n=
  10. for /f "usebackq" %%a in ("%~1") do set /a n += 1
  11. :retry
  12. rem 随机提取一行
  13. set /a skip_num = %random% %% n
  14. if "%skip_num%" neq "0" (set skip=skip=%skip_num%) else set skip=
  15. for /f "usebackq %skip% tokens=*" %%a in ("%~1") do (
  16.     set str=%%a
  17.     goto next
  18. )
  19. :next
  20. rem 从一行中随机选一段
  21. set "str=%str:"=%"
  22. for %%a in ("\" "/" ":" "<" ">" "|") do set str=!str:%%~a=!
  23. set "str=%str:?=%"
  24. set "str=%str:,=" "%"
  25. set "str=%str:。=" "%"
  26. set .n=
  27. for %%a in ("%str%") do (
  28.     if "%%~a" neq "" (
  29.         set NewName=%%~a
  30.         if "!NewName:~13!"=="" (
  31.             set /a .n += 1
  32.             set !.n!=%%~a
  33.         )
  34.     )
  35. )
  36. if not defined .n goto retry
  37. set /a ran = %random% %% .n + 1
  38. ren "%~1" "!%ran%!.*" 2>nul || goto retry
  39. 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://www.bathome.net/) Powered by Discuz! 7.2