[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理怎样按条件插入行填补行?

本帖最后由 娜美 于 2023-8-20 14:04 编辑

补充一些a文本
  1. a.txt  ANSI编码
  2. 19:37:30 August 16 2023>   企业 名称:优 美 利 A
  3. 19:37:31 August 16 2023>   ++++
  4. 19:37:32 August 16 2023>   企业 名称:利海 B
  5. 19:37:33 August 16 2023>    +
  6. 19:37:34 August 16 2023>   企业 名称:利海 01:C (A)
  7. 19:37:35 August 16 2023>   +
  8. 19:37:36 August 16 2023>   企业 名称:海
  9. 19:37:39 August 16 2023>   退出
  10. 20:37:30 August 16 2023>   企业 名称:利海 B
  11. 20:39:30 August 16 2023>   企业 名称:利海 B
  12. 20:38:31 August 16 2023>   退出
  13. 20:37:30 August 16 2023>   企业 名称:利
  14. 20:39:30 August 16 2023>   +
  15. 20:39:30 August 16 2023>   +
  16. 20:39:30 August 16 2023>   +
  17. 20:39:30 August 16 2023>   退出
  18. 20:39:30 August 16 2023>   企业 名称:利海 B
  19. 20:38:31 August 16 2023>   退出
  20. 企业"字段 至 "企业"字段 之间 或许会有很多行,  示例中只是尽量缩短没影响的行
  21. if 如果遇到有"企业"字段 与 "企业"字段 之间的名称不相同,  且它们中间没有 "退出"字段, 则需要添加插入 "退出"字段行,  如果他们字段之间有了 "退出"字段, 则跳过忽略,  日期时间填补请使用有"企业"字段的上一行日期时间
  22. if 如果有"企业"字段的行  一直至有 "退出"字段行中, 它们名称仍然都是相同的,  ,  则不做任何动作
  23. 名称有可能会使用某些字符号,    希望可尽量支持多些名称字符
  24. PowerShell  awk bat
  25. 或许 可以将 ">"  看成分隔符处理吧
  26. >b.txt
  27. 19:37:30 August 16 2023>   企业 名称:优 美 利 A
  28. 19:37:31 August 16 2023>   ++++
  29. 19:37:31 August 16 2023>   退出
  30. 19:37:32 August 16 2023>   企业 名称:利海 B
  31. 19:37:33 August 16 2023>    +
  32. 19:37:33 August 16 2023>    退出
  33. 19:37:34 August 16 2023>   企业 名称:利海 01:C (A)
  34. 19:37:35 August 16 2023>   +
  35. 19:37:35 August 16 2023>   退出
  36. 19:37:36 August 16 2023>   企业 名称:海
  37. 19:37:39 August 16 2023>   退出
  38. 20:37:30 August 16 2023>   企业 名称:利海 B
  39. 20:39:30 August 16 2023>   企业 名称:利海 B
  40. 20:38:31 August 16 2023>   退出
  41. 20:37:30 August 16 2023>   企业 名称:利
  42. 20:39:30 August 16 2023>   +
  43. 20:39:30 August 16 2023>   +
  44. 20:39:30 August 16 2023>   +
  45. 20:39:30 August 16 2023>   退出
  46. 20:39:30 August 16 2023>   企业 名称:利海 B
  47. 20:38:31 August 16 2023>   退出
复制代码

本帖最后由 娜美 于 2023-8-19 23:42 编辑

回复 2# 77七

字段与字段之间行数不固定哦,  字段与字段之间 没有"退出" 补一行就行,  似乎补多了
  1. 如果中间行数多几行情况
  2. a.txt
  3. 19:37:30 August 16 2023>   企业 名称:优 美 利 A
  4. 19:37:31 August 16 2023>   ++++
  5. 19:37:31 August 16 2023> ++++
  6. 19:37:31 August 16 2023> ++++
  7. 19:37:32 August 16 2023>   企业 名称:利海 B
  8. 19:37:33 August 16 2023>    +
  9. 如果"企业" 与 "企业"字段之间没有"退出" 字段,  在有"企业"字段上一行添加一行就行,   似乎在企业下面也添加了,   重复添加了
  10. >b.txt
  11. 19:37:30 August 16 2023> 企业 名称:优 美 利 A
  12. 19:37:30 August 16 2023>   退出
  13. 19:37:31 August 16 2023> ++++
  14. 19:37:31 August 16 2023> ++++
  15. 19:37:31 August 16 2023> ++++
  16. 19:37:31 August 16 2023>   退出
  17. 19:37:32 August 16 2023> 企业 名称:利海 B
  18. 19:37:32 August 16 2023>   退出
  19. 19:37:33 August 16 2023> +
复制代码

TOP

本帖最后由 娜美 于 2023-8-20 00:00 编辑

回复 4# 77七

好的
   例如这样的样例
  1. a.txt
  2. 19:37:30 August 16 2023>   企业 名称:优 美 利 A
  3. 19:37:31 August 16 2023>   ++++
  4. 19:37:31 August 16 2023>   ++++
  5. 19:37:31 August 16 2023>   ++++
  6. 19:37:31 August 16 2023>   ++++
  7. 19:37:31 August 16 2023>   ++++
  8. 19:37:32 August 16 2023>   企业 名称:利海 B
  9. 19:37:33 August 16 2023>    +
  10. 19:37:33 August 16 2023>    +
  11. 19:37:33 August 16 2023>    +
  12. 19:37:33 August 16 2023>    +
  13. 19:37:33 August 16 2023>    +
  14. 19:37:34 August 16 2023>   企业 名称:利海 01:C (A)
  15. 19:37:35 August 16 2023>   +
  16. 19:37:35 August 16 2023>   +
  17. 19:37:35 August 16 2023>   +
  18. 19:37:35 August 16 2023>   +
  19. 19:37:35 August 16 2023>   +
  20. 19:37:36 August 16 2023>   企业 名称:利海 B
  21. 20:37:30 August 16 2023>   +
  22. 20:37:30 August 16 2023>   +
  23. 20:37:30 August 16 2023>   企业 名称:利海 B
  24. 20:39:30 August 16 2023>   +
  25. 20:39:30 August 16 2023>   +
  26. 20:39:30 August 16 2023>   +
  27. 20:39:30 August 16 2023>   企业 名称:利海 B
  28. 20:38:31 August 16 2023>   退出
  29. >b.txt
  30. 19:37:30 August 16 2023>   企业 名称:优 美 利 A
  31. 19:37:31 August 16 2023>   ++++
  32. 19:37:31 August 16 2023>   ++++
  33. 19:37:31 August 16 2023>   ++++
  34. 19:37:31 August 16 2023>   ++++
  35. 19:37:31 August 16 2023>   ++++
  36. 19:37:31 August 16 2023>   退出
  37. 19:37:32 August 16 2023>   企业 名称:利海 B
  38. 19:37:33 August 16 2023>    +
  39. 19:37:33 August 16 2023>    +
  40. 19:37:33 August 16 2023>    +
  41. 19:37:33 August 16 2023>    +
  42. 19:37:33 August 16 2023>    +
  43. 19:37:33 August 16 2023>    退出
  44. 19:37:34 August 16 2023>   企业 名称:利海 01:C (A)
  45. 19:37:35 August 16 2023>   +
  46. 19:37:35 August 16 2023>   +
  47. 19:37:35 August 16 2023>   +
  48. 19:37:35 August 16 2023>   +
  49. 19:37:35 August 16 2023>   +
  50. 19:37:35 August 16 2023>   退出
  51. 19:37:36 August 16 2023>   企业 名称:利海 B
  52. 20:37:30 August 16 2023>   +
  53. 20:37:30 August 16 2023>   +
  54. 20:37:30 August 16 2023>   企业 名称:利海 B
  55. 20:39:30 August 16 2023>   +
  56. 20:39:30 August 16 2023>   +
  57. 20:39:30 August 16 2023>   +
  58. 20:39:30 August 16 2023>   企业 名称:利海 B
  59. 20:38:31 August 16 2023>   退出
复制代码

TOP

本帖最后由 娜美 于 2023-8-20 00:24 编辑

回复 6# 77七


   这次基本对了,   不过补的时间不是上一行时间,  只是时间补错了  会寻致下一步不能正确计算时间        请帮忙再看下

TOP

回复 8# 77七


   多谢哥哥基本正确了,   晚安       我明天再细试一下     
    哥哥晚安

TOP

本帖最后由 娜美 于 2023-8-20 09:06 编辑

回复 10# Nsqs


   PS 较为理想,  但是在实际文本中会在第一行产生多余的一行 "   退出 "   其他的还产生重复插入字段情况
例如, 以下这种情况在样式例子中不会,  但在实际文本中会发生如下情况,  多了一行
  1. a.txt
  2. 19:37:30 August 16 2023>   企业 名称:优 美 利 A
  3. 19:37:31 August 16 2023>   ++++
  4. 19:37:31 August 16 2023>   ++++
  5. 19:37:31 August 16 2023>   ++++
  6. 19:37:31 August 16 2023>   ++++
  7. 19:37:31 August 16 2023>   ++++
  8. 19:37:31 August 16 2023>   退出
  9. 19:37:32 August 16 2023>   企业 名称:海
  10. 像这种已存在条件情况,  也会重复插入了
  11. >b.txt
  12. 19:37:30 August 16 2023>   企业 名称:优 美 利 A
  13. 19:37:31 August 16 2023>   ++++
  14. 19:37:31 August 16 2023>   ++++
  15. 19:37:31 August 16 2023>   ++++
  16. 19:37:31 August 16 2023>   ++++
  17. 19:37:31 August 16 2023>   ++++
  18. 19:37:31 August 16 2023>   退出
  19. 19:37:31 August 16 2023>   退出
  20. 19:37:32 August 16 2023>   企业 名称:海
复制代码
最好能在完成后记录可以显示在那些行号插入字段变动
例如: 10,115,119,212行

TOP

本帖最后由 娜美 于 2023-8-20 09:18 编辑

回复 8# 77七


    试了100mb文件,  似乎好慢,  不知道还能加快不
最好能在完成后记录可以显示在那些行号插入字段变动
例如: 10,115,119,212行

TOP

本帖最后由 娜美 于 2023-8-20 10:30 编辑

回复 13# qixiaobin0715

实际数据就是5楼加上11楼数据,,, 只不过1楼举例没有足够的多, 在5楼,   11楼添加另外情况,  事实上都差不多

主要这2个条件判断呗,    耍检查有"企业"字段 与 "企业"字段 之间的名称是否相同, 其中是否存在有 "退出"字段的行
   
  • if 如果遇到有"企业"字段 与 "企业"字段 之间的名称不相同,  且它们中间没有 "退出"字段, 则需要添加插入 "退出"字段行,  日期时间填补请使用有"企业"字段的上一行日期时间
  • if 如果有"企业"字段的行  一直至有 "退出"字段行中, 它们名称仍然都是相同的,  ,  则不做任何动作
  1. a.txt  ANSI编码
  2. 19:37:30 August 16 2023>   企业 名称:优 美 利 A
  3. 19:37:31 August 16 2023>   ++++
  4. 19:37:32 August 16 2023>   企业 名称:利海 B
  5. 19:37:33 August 16 2023>    +
  6. 19:37:34 August 16 2023>   企业 名称:利海 01:C (A)
  7. 19:37:35 August 16 2023>   +
  8. 19:37:36 August 16 2023>   企业 名称:利海 B
  9. 19:37:39 August 16 2023>   退出
  10. 20:37:30 August 16 2023>   企业 名称:利海 B
  11. 20:39:30 August 16 2023>   企业 名称:利海 B
  12. 20:38:31 August 16 2023>   退出
  13. 19:37:30 August 16 2023>   企业 名称:优 美 利 A
  14. 19:37:31 August 16 2023>   ++++
  15. 19:37:31 August 16 2023>   ++++
  16. 19:37:31 August 16 2023>   ++++
  17. 19:37:31 August 16 2023>   ++++
  18. 19:37:31 August 16 2023>   ++++
  19. 19:37:32 August 16 2023>   企业 名称:利海 B
  20. 19:37:33 August 16 2023>    +
  21. 19:37:33 August 16 2023>    +
  22. 19:37:33 August 16 2023>    +
  23. 19:37:33 August 16 2023>    +
  24. 19:37:33 August 16 2023>    +
  25. 19:37:34 August 16 2023>   企业 名称:利海 01:C (A)
  26. 19:37:35 August 16 2023>   +
  27. 19:37:35 August 16 2023>   +
  28. 19:37:35 August 16 2023>   +
  29. 19:37:35 August 16 2023>   +
  30. 19:37:35 August 16 2023>   +
  31. 19:37:36 August 16 2023>   企业 名称:利海 B
  32. 20:37:30 August 16 2023>   +
  33. 20:37:30 August 16 2023>   +
  34. 20:37:30 August 16 2023>   企业 名称:利海 B
  35. 20:39:30 August 16 2023>   +
  36. 20:39:30 August 16 2023>   +
  37. 20:39:30 August 16 2023>   +
  38. 20:39:30 August 16 2023>   企业 名称:利海 B
  39. 20:38:31 August 16 2023>   退出
  40. 19:37:30 August 16 2023>   企业 名称:优 美 利 A
  41. 19:37:31 August 16 2023>   ++++
  42. 19:37:31 August 16 2023>   ++++
  43. 19:37:31 August 16 2023>   ++++
  44. 19:37:31 August 16 2023>   ++++
  45. 19:37:31 August 16 2023>   ++++
  46. 19:37:31 August 16 2023>   退出
  47. 19:37:32 August 16 2023>   企业 名称:海
复制代码

TOP

回复 15# 77七


   10楼PowerShell码 基本符合, 但就是会重复多添加一行 "退出"字段

TOP

回复 10# Nsqs


    找到 10楼PowerShell码 问题所在了
    如果"企业" 上下 字段名称不相同  其中间也含有退出字段情况,   他仍然会重复多添加一行 "退出" 字段,,  

他们之间已有了"退出" 字段行,  这种情况下应该跳过不做任何动作

TOP

回复 18# Five66


   完全正确, 谢谢哥哥

TOP

回复 29# qixiaobin0715


   嗯嗯, 哥哥批处理很快哦,,  条件都齐了,, 只是还欠了一种条件,  下面, 这种 上一个 "企业"  与 下一个 "企业" 之间已存在存 "退出" 字段行, 就不用再补了.   
  1. 20:39:30 August 16 2023>   企业 名称:利海 B
  2. 20:38:31 August 16 2023>   退出
  3. 20:38:31 August 16 2023>   +
  4. 20:37:30 August 16 2023>   企业 名称:海
复制代码





  18楼哥哥代码完全遵循所有条件,  所以无论文本内容如何都能正确完成

TOP

回复 31# qixiaobin0715


对对对, 和18楼哥哥一样,  完全正确了, 哥哥你这思路就很好嘛,    给代码赋予了智慧, 就像Ai一样灵活地工作,,批处理还能很快不到5分钟

TOP

本帖最后由 娜美 于 2023-8-23 23:32 编辑

回复 31# qixiaobin0715


     检测发现会改变原本某些行内容, 特别是有 "!" 号行   问题是似乎不支持在 ">" 之后某些字符, 但无论如何, 与之没有关系的这些行不应该会受到影响或强制改变他原样

用符号测验原来会吃掉一大半字符
20:39:30 August 16 2023> ! ++
20:39:30 August 16 2023>   ` ~!@#$%^&*()_+=-{}|[]\:;'<>?,./ " 用符号测验出原因了, 原来是会吃掉在 ">" 之后的一大半字符,

TOP

回复 36# qixiaobin0715


  确实可以解决原样输出的问题哦 但如果 名称 部分特殊字符发现一律会当不相同处理, 会插入一行,   特别是含有 "!" 字符,    似乎是识别字符不够多

为了测验,  我偿试举了一些含有 "!" 字符 例试试
20:37:30 August 16 2023> 企业 名称:美!
20:37:30 August 16 2023> 企业 名称:美!


20:37:30 August 16 2023> 企业 名称:美
20:37:30 August 16 2023> 企业 名称:美


多特殊字符, 批处理不知道能够支持多少
  1. 20:37:30 August 16 2023>   企业 名称:美` ~!@#$%^&*()_+=-{}|[]\:;'<>?,./ "0123456789zxcvbnmasdfghjklqwertyuiopZXCVBNMASDFGHJKLQWERTYUIOP
  2. 20:39:30 August 16 2023> ! ` ~!@#$%^&*()_+=-{}|[]\:;'<>?,./ "0123456789zxcvbnmasdfghjklqwertyuiopZXCVBNMASDFGHJKLQWERTYUIOP
  3. 20:37:30 August 16 2023>   企业 名称:美` ~!@#$%^&*()_+=-{}|[]\:;'<>?,./ "0123456789zxcvbnmasdfghjklqwertyuiopZXCVBNMASDFGHJKLQWERTYUIOP
  4. 20:39:30 August 16 2023> ! ` ~!@#$%^&*()_+=-{}|[]\:;'<>?,./ "0123456789zxcvbnmasdfghjklqwertyuiopZXCVBNMASDFGHJKLQWERTYUIOP
  5. 20:37:30 August 16 2023>   企业 名称:美` ~!@#$%^&*()_+=-{}|[]\:;'<>?,./ "0123456789zxcvbnmasdfghjklqwertyuiopZXCVBNMASDFGHJKLQWERTYUIOP
  6. 20:39:30 August 16 2023> * ` ~!@#$%^&*()_+=-{}|[]\:;'<>?,./ "0123456789zxcvbnmasdfghjklqwertyuiopZXCVBNMASDFGHJKLQWERTYUIOP
  7. 20:39:30 August 16 2023> ? ` ~!@#$%^&*()_+=-{}|[]\:;'<>?,./ "0123456789zxcvbnmasdfghjklqwertyuiopZXCVBNMASDFGHJKLQWERTYUIOP
  8. 20:37:30 August 16 2023>   企业 名称:美` ~!@#$%^&*()_+=-{}|[]\:;'<>?,./ "0123456789zxcvbnmasdfghjklqwertyuiopZXCVBNMASDFGHJKLQWERTYUIOP
  9. 20:39:30 August 16 2023>   +
  10. 20:39:30 August 16 2023>   企业 名称:利海 B
复制代码

TOP

返回列表