Board logo

标题: [文本处理] 求助文档组合再切割的批处理 [打印本页]

作者: lmq123    时间: 2023-4-17 19:42     标题: 求助文档组合再切割的批处理

本帖最后由 lmq123 于 2023-4-19 15:36 编辑

长文档先分类_再切割批处理》
先分类:
先用批处理把srt长文档自动化分类成为示例中的样子,分类成两个文档,一个是时间文档一个是内容文档

假设内容文本是6千字则分为1和2两个文档,
如果内容文本是1万2千字则分为123三个文档
以此类推,
内容文本以很多单元组成,一段数字+一段长短不一的文字内容组成为一个单元,内容文本分割时只能以单元为基础进行分割,不能把一个单元的字符分别放在前后两个文本中,要么把这个单元放前一个文本中,要么把这个单元放在后一个文本中,假如这个单元放在前一个文本中,这个文本字符超过5000字符了,那就按四舍五入的类似原则,那就把这个单元划入下一个文本算了,
从头到尾,按这个规律分割到底就算完成了

把内容文档按小于等

段内容打开「百度网盘」APP即可获取
举例说明:


这个难度有点大,只有超级批处理大神才能解决好,求求大家帮我一下
作者: czjt1234    时间: 2023-4-17 20:48

这个。。。个人觉得付费比较合适
作者: jyswjjgdwtdtj    时间: 2023-4-17 21:01

……我觉得换成vbs就不用超级大神了
东西长,大最好换个编译的语言
比如整个c++?
作者: newswan    时间: 2023-4-17 22:10

powershell 第一步
  1. chcp 65001
  2. function filesplit() {
  3.     param([string]$filename)
  4.     $a = Get-Content -Encoding UTF8 ($filename + ".srt")
  5.     $as = $a -join "`n"
  6.     $as -replace "(?m)(^\d+[.]$)`n(^.+$)`n(^.+$)","`$1`n`$2" | Out-File -Encoding utf8 ($filename + "t.srt")
  7.     $as -replace "(?m)(^\d+[.]$)`n(^.+$)`n(^.+$)","`$1`n`$3" | Out-File -Encoding utf8 ($filename + "s.srt")
  8. }
  9. filesplit "文档111"
复制代码

作者: 77七    时间: 2023-4-17 23:05

  1. @echo off
  2. rem 文件和批处理保存为ansi编码格式
  3. rem part1
  4. setlocal enabledelayedexpansion
  5. for /f "delims=" %%i in ('dir /b /a-d *.srt') do (
  6. set n=
  7. for /f "delims=" %%a in ('type "%%i"') do (
  8. set /a n+=1,m=n%%3
  9. if !m! equ 1 (
  10. set "str1=%%a"
  11. ) else if !m! equ 2 (
  12. >>"%%~ni时间.srt" (
  13. echo !str1!
  14. echo %%a
  15. echo;
  16. )
  17. ) else if !m! equ 0 (
  18. >>"%%~ni内容.srt" (
  19. echo !str1!
  20. echo %%a
  21. echo;
  22. )
  23. )
  24. )
  25. )
  26. endlocal
  27. rem part2
  28. setlocal enabledelayedexpansion
  29. for /f "delims=" %%i in ('dir /b /a-d *内容.srt') do (
  30. set /a n=0,fc=1,lengthAll=0
  31. for /f "delims=" %%a in ('type "%%i"') do (
  32. set /a n+=1,m=n%%2
  33. set "str=!str!%%a"
  34. set "str!m!=%%a"
  35. if !m! equ 0 (
  36. rem 内容.srt每单元不超100字符
  37. for /l %%l in (1,1,100) do (
  38. if defined str (
  39. set "str=!str:~1!"
  40. set lengthStr=%%l
  41. )
  42. )
  43. set /a lengthAll+=lengthStr
  44. if !lengthAll! gtr 5000 (
  45. set /a fc+=1,lengthAll=0
  46. )
  47. (for %%c in (1 0 #) do (
  48. echo,!str%%c!
  49. ))>>"%%~ni!fc!.srt"
  50. )
  51. )
  52. )
  53. endlocal
  54. pause
复制代码

试试行吗?
作者: lmq123    时间: 2023-4-17 23:38

本帖最后由 lmq123 于 2023-4-19 10:36 编辑

回复 5# 77七
试验用的文档


谢谢啦
作者: lmq123    时间: 2023-4-17 23:53

回复 5# 77七

能处理utf-8的srt文档格式吗,不是anis格式
作者: 77七    时间: 2023-4-18 00:04

本帖最后由 77七 于 2023-4-18 01:50 编辑

回复 6# lmq123


  
  1. @echo off
  2. rem 批处理保存为ansi,文本为utf-8时不含中文
  3. setlocal enabledelayedexpansion
  4. for /f "delims=" %%i in ('dir /b /a-d *.srt') do (
  5. set /a n=0,fc=1,lengthAll=0
  6. for /f "delims=" %%a in ('type "%%i"') do (
  7. set /a n+=1,m=n%%3
  8. if !m! equ 1 (
  9. set "str1=%%a"
  10. ) else if !m! equ 2 (
  11. >>"%%~ni时间.srt" (
  12. echo !str1!
  13. echo %%a
  14. echo;
  15. )
  16. ) else if !m! equ 0 (
  17. >>"%%~ni内容.srt" (
  18. echo !str1!
  19. echo %%a
  20. echo;
  21. )
  22. set "str3=%%a!str1!"
  23. for /l %%l in (1,1,100) do (
  24. if defined str3 (
  25. set "str3=!str3:~1!"
  26. set lengthStr3=%%l
  27. )
  28. )
  29. set /a lengthAll+=lengthStr3
  30. if !lengthAll! gtr 5000 (
  31. set /a fc+=1,lengthAll=0
  32. )
  33. >>"%%~ni内容!fc!.srt" (
  34. echo !str1!
  35. echo %%a
  36. echo,
  37. )
  38. )
  39. )
  40. )
  41. endlocal
  42. pause
复制代码

作者: lmq123    时间: 2023-4-18 01:07

本帖最后由 lmq123 于 2023-4-18 01:12 编辑

回复 8# 77七

还没试,电脑不在身边,好像我用的是没有中文汉字,只有符号数字或英文,那用第一个好点,还是用第二个好点?

另一个奇怪的问题是批处理中没有时间与内容这汉字,你怎么保证分类后生成的文档名称中含有时间与汉字这几个字
作者: lmq123    时间: 2023-4-18 09:07

本帖最后由 lmq123 于 2023-4-19 10:36 编辑

77七你好,你的bat测试结果是失败的,它可以分类成功

另一个奇怪的地方是我想把bat批处理本身保存为anis格式,不知道为什么,批处理用记事本打开可以选anis,但是保存不了,重新打开,发现批处理还是utf-8格式,这是怎么回事
作者: czjt1234    时间: 2023-4-18 09:52

回复 10# lmq123


    这个不影响运行,不要紧

简体中文Windows的ANSI编码是GB2312

GB2312和UTF-8对英文字符的编码方式是相同的

所以一个没有中文字符、只有英文字符的ANSI编码的文件,也可视为是UTF-8编码

这并不表示bat支持UTF-8编码,因为它实际上是按ANSI编码来识别的
作者: 77七    时间: 2023-4-18 11:46

回复 10# lmq123


   这个字符数到底是什么意思?为什么“4月10日.srt” 这个文件的字符数 比 去掉一部分生成的 “4月10日内容.srt” 字符数还要少?请提供一个4月10日.srt 这个文件 的预期结果,我看看是什么样子的。
作者: lmq123    时间: 2023-4-18 14:29

本帖最后由 lmq123 于 2023-4-19 10:35 编辑

回复 12# 77七

不好意思,我弄错了
作者: lmq123    时间: 2023-4-18 16:41

本帖最后由 lmq123 于 2023-4-19 10:51 编辑

回复 8# 77七


    77七您好,我现在还有一个问题要解决就是再把时间文档与内容文档合并成一个整体,每个单元之间相隔一行,每个单元由一段数字+一段时间+一段长短不确定的中文英文数字等字符组成
时间文档是固定的每个小单元之间间隔一个空行,
但是内容文档是含有中文也含有英文数字的,而且它有2种情况,一种是每个小单元之间绝对是间隔一行的,另一种则是杂乱无章的数字与中英文字符之间是没有规律的,有可能之间隔一行,也可能是23456,,等任意空行,但是它们之间的间隔的空行数最大不会超过20行.
要把内容demo1与内容demo2分别与时间文档进行合并,当双击批处理后,能让内容1或内容2之中的任何一个与时间文档合并成合并后的样本那样子,批处理就算是成功了,不知道77七你有什么好办法可以完成


举例样本
链接:https://pan.baidu.com/s/1w-4IoXPpRg1F5e8cNJz5DA 
提取码:hyu6
作者: 77七    时间: 2023-4-18 19:37

回复 14# lmq123


  
  1. @echo off
  2. for /f "delims=" %%i in ('dir /b /a-d *时间*.srt') do set "filet=%%i"
  3. set "filedate=%filet:~0,-6%"
  4. for /f "delims=" %%i in ('dir /b /a-d *内容*.srt') do set "filec=%%i"
  5. copy "%filet%" "xxxt.srt"
  6. copy "%filec%" "xxxc.srt"
  7. chcp 437 1>nul
  8. setlocal enabledelayedexpansion
  9. for /f "delims=" %%a in ('type "xxxt.srt"') do (
  10. set /a n+=1,m=n%%2
  11. if !m! equ 0 set "#!n!=%%a"
  12. )
  13. set /a n=m=0
  14. for /f "delims=" %%a in ('type "xxxc.srt"') do (
  15. set /a n+=1,m=n%%2
  16. if !m! equ 0 set "##!n!=%%a"
  17. )
  18. for /l %%l in (1,1,5000) do (
  19. if defined #%%l (
  20. >>"xxxtc.srt" (
  21. set /a k+=1
  22. echo !k!
  23. echo !#%%l!
  24. echo !##%%l!
  25. echo;
  26. )
  27. )
  28. )
  29. chcp 936 1>nul
  30. del "xxxt.srt";"xxxc.srt"
  31. ren "xxxtc.srt" "%filedate%-时间+内容.srt"
  32. pause
复制代码

作者: lmq123    时间: 2023-4-18 21:55

本帖最后由 lmq123 于 2023-4-19 11:15 编辑

回复 15# 77七[?
作者: lmq123    时间: 2023-4-18 21:59

本帖最后由 lmq123 于 2023-4-19 11:16 编辑

回复 15# 77七
作者: lmq123    时间: 2023-4-18 22:00

本帖最后由 lmq123 于 2023-4-19 11:17 编辑

回复 15# 77七
作者: lmq123    时间: 2023-4-19 00:33

回复 15# 77七


    77七您好,问题是我的内容文档与时间文档的名称是任意的,没有固定的名称,批处理也可以自动认识它俩,并把它俩合并到一块吗?

时间文档内容文档与批处理三个文件是放同一个文件夹里面,双击批处理就可以了吗?
作者: lmq123    时间: 2023-4-19 00:33

本帖最后由 lmq123 于 2023-4-19 11:14 编辑

回复 5# 77七
作者: 77七    时间: 2023-4-19 01:20

回复 20# lmq123


   请先试一下再提问,不要连续发相同内容!
作者: lmq123    时间: 2023-4-19 10:53

回复 15# 77七

您好,77七,合并时双击批处理,提示系统找不到指定的文件xxxt.srt
    ,怎么办
作者: lmq123    时间: 2023-4-19 10:55

本帖最后由 lmq123 于 2023-4-19 11:15 编辑

回复 15# 77七
作者: lmq123    时间: 2023-4-19 11:00

回复 21# 77七

试用了一下,系统提示找不到指定的xxxt.srt文件,xxxc.srt

我的时间文档与内容文档名称是任意组合的名字,但是可以确定的是时间文档名称包含了时间2个中文字,内容文档包合了内容2个汉字
作者: terse    时间: 2023-4-19 13:38

多个时间文档与内容文档在同一目录,怎么区分文档是同一个文件呢?
又不是仅两个文件合并,
作者: 77七    时间: 2023-4-19 15:24

在此,我们强烈要求大家在问题解决后,不要随意修改自己的提问帖内容,无论它们是多么的简单。如果有人执意要大肆修改提问帖,论坛管理层将会给予楼主警告处罚,修改两次以上或修改两篇以上(含两次/篇)者,将全站封杀楼主ID。

http://www.bathome.net/thread-1870-1-1.html
http://www.bathome.net/viewthread.php?tid=65851
http://www.bathome.net/viewthread.php?tid=65859
作者: lmq123    时间: 2023-4-19 15:30

回复 26# 77七

哦,我不清楚论坛规定,还请谅解,谢谢了
作者: lmq123    时间: 2023-4-19 15:48

回复 15# 77七

77七,您好,把时间与内容文档与批处理、三个放同一个文件夹里面,双击批处理提示找不到指定的xxxt.srt文件,是不是限制了不超过五千字符还是时间与内容文档不能任意命名,,,

可是事实是时间与内容文档是任意名的,只是时间文档名称当中一定含有时间两字,内容文档名称中含有内容2字,而且它们两个的字符数量全部大于了五千字符数,,要怎么修改一下这个批处理,麻烦您帮我修改一下,谢谢您了
作者: 77七    时间: 2023-4-19 16:17

本帖最后由 77七 于 2023-4-19 19:44 编辑

批处理保存为ansi编码格式,文件名分别包含 “内容”和“时间”就行。5000是对应2500个时间行 和内容行。可根据实际修改。大于实际行数就行。
19:43
把5000改为 !n!  好了




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2