找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 34429|回复: 12

[文本处理] 批处理怎样截取txt文本随机行中以标点符号分割的字符数少于指定数值的随机字段?

[复制链接]
发表于 2011-3-24 11:12:10 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-7-21 22:42 编辑

随机截取标点符号(空格,逗号,句号)之间的小断句。。。。限制13个字以内的断句
比如  我的一个txt文件文本内容: 如豆的煤油灯盏中,我度过了几年的学习时光,如水的童年也悄然逝去。哥哥到外地读书去了,我和妹妹也在镇里的一所中学读书。

处理后文件名为“如豆的煤油灯盏中” “如水的童年也悄然逝去”都可以
“我和妹妹也在镇里的一所中学读书”这个就超字数了。
大概就是这个情况。。
另外:
1.txt文件都是多行
2.随机行中截取随机断句。(13个字以内的断句)
3.是批处理N个txt文件.
高手帮忙写下,谢谢!
发表于 2011-3-24 11:38:20 | 显示全部楼层
空格也是标点符号?我真的第一次听到。。。

楼主可以将意思再描述清楚点不,如:txt文件是不是只有一行还是有多行?是随机截取第一行中的断句还是在随

机行中随机截取断句?还有是不是要批量处理N个txt文件?
发表于 2011-3-24 11:46:31 | 显示全部楼层
  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
复制代码
 楼主| 发表于 2011-3-24 11:53:11 | 显示全部楼层
空格不算 就是段落前面不空两格嘛!然后就随手加进去了。
1.txt文件都是多行
2.随机行中截取随机断句。(13个字以内的断句)
3.是批处理N个txt文件.

额,就是这样了。
发表于 2011-3-24 11:55:04 | 显示全部楼层

  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
复制代码
发表于 2011-3-24 12:08:24 | 显示全部楼层
本帖最后由 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
复制代码
发表于 2011-3-24 12:18:20 | 显示全部楼层
@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语句,这样会影响递归算法吧?
 楼主| 发表于 2011-3-24 12:22:11 | 显示全部楼层
本帖最后由 bsxwzy 于 2011-3-24 12:34 编辑

6# tmplinshi
貌似运行不了诶!!运行窗口一闪而过。
发表于 2011-3-24 12:24:06 | 显示全部楼层
8# bsxwzy
是在说所有人的么?能否指明
 楼主| 发表于 2011-3-24 12:33:45 | 显示全部楼层
5# TX_kakashi
不是太会用!!!
发表于 2011-3-24 12:57:09 | 显示全部楼层
本帖最后由 tmplinshi 于 2011-3-24 13:02 编辑
6# tmplinshi
貌似运行不了诶!!运行窗口一闪而过。
bsxwzy 发表于 2011-3-24 12:22

我测试是可以运行的。
代码重新修改了下,你再试试。
如果有错误的话,在批处理所在目录打开一个 cmd,输入批处理的文件名来运行,看错误提示是什么。
发表于 2011-3-24 12:57:57 | 显示全部楼层
8# bsxwzy


3楼、5楼、6楼,这么多代码,哪个一闪而过?
 楼主| 发表于 2011-3-24 13:09:25 | 显示全部楼层
现在可以了,非常感谢!!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-21 16:15 , Processed in 0.016684 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表