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

[文本处理] [已解决] 批处理如何从多个文本逐行读取内容组合合并

本帖最后由 pcl_test 于 2017-6-6 19:43 编辑

因为工作需要,做公司做论坛活动,一个关于文本的批量替换生成处理,恳请得到大家的帮助!

问题是这样的:

同一文件夹下有3个文本文件:

一个文本文件内是全国大小城市名称,(由自己整理一行一个依次排列,文本命名为:A.txt)!
一个文本文件内是N多歇后语,也是,(由自己整理一行一个依次排列,文本命名为:B.txt)!
一个文本文件内是举例文本文件文本命名为C.txt  , 文本打开里面的范文内容形如下面这个例子:

上海聊天论坛开通,欢迎上海的朋友前来捧场
告诉大家一个好消息,期待已久的上海聊天论坛备案成功已经开通了,欢迎上海的朋友前来捧场,我们特地在上海市中心设定一个团购接待点,届时期待上海论坛通告!


为了能使得大家很好的理解,我举一个例子说明一下,最后的运行下来一个其中一个结果差不多应该是这样的,大家注意我加粗的字:

八仙过海,各显神通北京聊天论坛开通,欢迎北京的朋友前来捧场
告诉大家一个好消息,期待已久的北京聊天论坛备案成功已经开通了,欢迎北京的朋友前来捧场,我们特地在北京市中心设定一个团购接待点,届时期待北京论坛通告!

其中,八仙过海,各显神通 来自第2个文本文件里面的随机一行歇后语然后“上海”替换成了“北京”这个是由第一个文本文档里面的城市名决定的!

最后生成多少结果,视第一个文本文件里面有多少行,在这里意思就是第一个文本文档里面有多少个城市最后就生成多少个txt,方便管理,生成的新的txt可以生成在该文件夹的新建文件夹里面,我们把它命名为newtxt

如下我做了个截图:






二楼你好,那个只是我举个例子而已,不是你想象中那么恶劣哦 .不过还是谢谢你,不是你,还真被很多人误解呢?  致二楼 :

一个帖子,可能给你带来非常好的思路,
一个帖子,可能给你带来非常好的合作机会。
一个帖子,可以让你更快速的了解互联网的最新信息。并参与其中 ,有收获有乐趣。




[]

[ 本帖最后由 fanfande 于 2010-8-9 01:17 编辑 ]
有创新,多创新;无创新,多模仿;无模仿,多坚持

3ks 随风,你是最棒的!
晚安!
有创新,多创新;无创新,多模仿;无模仿,多坚持

TOP

  1. @echo off&SETLOCAL ENABLEDELAYEDEXPANSION
  2. if not exist newtxt\ md newtxt
  3. set var=指定替换
  4. set /p str=<c.txt
  5. for /f "delims=" %%a in (b.txt) do set /a n+=1&set ".!n!=%%a"
  6. for /f "delims=" %%a in (a.txt) do (
  7.    set /a w=!random!%%n+1
  8.    for %%i in (!w!) do echo !.%%i!,!str:%var%=%%a!>"newtxt\%%a.txt"
  9.    for /f "skip=1 delims=" %%b in (c.txt) do (
  10.       set num=%%b
  11.       set num=!num:%var%=%%a!
  12.       echo !Num!>>"newtxt\%%a.txt"
  13.     )
  14. )
  15. start newtxt
复制代码
技术问题请到论坛发帖求助!

TOP

哎,还是你们思维比较缜密,我到现在才明白为啥让我把c.txt写的更加完善点的用途了!

随风版主,上面的测试完全没有问题,但是,确实因为我的疏忽,所以我明白你为啥要指定一个 "聊" 为特定字符了!
我现在反过来给你指定 即将被替换的文本为  "指定替换"  ! 也就是说c.txt里面无论标题或者正文只要碰到 "指定替换"  他就按a.txt里面的逐一替换!


这样c.txt形如如下范文:
111111111111指定替换22222222222 →这里是标题
3333333333333指定替换44444444指定替换555555555指定替换66666666指定替换77777777指定替换99999 →这里是正文

这样就不要指定标题具体到哪个字前面需要替换了,是吗?

谢谢随风大哥的帮忙


相信你明白我意思了,再麻烦你一下!有问题我在线到继续跟帖。。。
有创新,多创新;无创新,多模仿;无模仿,多坚持

TOP

唉~~~
既然楼主只能交代这么多已知条件,就试着写写吧
代码条件
1、a、b、c、文本中不能含半角感叹号
2、c.txt 第一行为标题,即:在这一行前面随机加入b.txt的行,c.txt从第二行起开始替换城市名,需注意的是,比如替换的是“北京”那么c.txt中的所有“北京”词组都会替换掉,不管在正文中它是不是城市名都会被替换
3、c.txt中的空行会被忽略
4、c.txt中的第一行“聊天”前面的字符为需替换的城市名
代码未测试,有问题跟帖。。。
  1. @echo off&SETLOCAL ENABLEDELAYEDEXPANSION
  2. if not exist newtxt\ md newtxt
  3. for /f "delims=" %%a in (b.txt) do (
  4.    set /a n+=1&set ".!n!=%%a"
  5. )
  6. for /f "delims=" %%a in (a.txt) do (
  7.    set /a w=!random!%%n+1,m=1
  8.    for /f "delims=" %%b in (c.txt) do (
  9.   set num=%%b
  10.       if !m! equ 1 (
  11.      for /f "delims=聊" %%I in ("%%b") do set "m=%%I"
  12. for /f "delims=" %%D in ("!m!") do set num=!num:%%D=%%a!
  13.          for %%i in (!w!) do echo !.%%i!,!NUM!>"newtxt\%%a.txt"
  14.          ) else (
  15.    for /f "delims=" %%D in ("!m!") do set num=!num:%%D=%%a!
  16.    echo !Num!>>"newtxt\%%a.txt"
  17.    )
  18. )
  19. )
  20. start newtxt
复制代码
技术问题请到论坛发帖求助!

TOP

随风版主你好,其实我的范文在 6楼已经大致给出来了!
C.txt就是一个里面包括了即一个"即将被替换的文本" , 核心就是这个 "即将被替换的文本" ,我说让c.txt调用而不是把内容放在bat里面就是想让c.txt更加可编辑性!

比如c.txt 是如下内容

111111111111111111"即将被替换的文本"22222222222222222"即将被替换的文本"33333333333333333


就是让bat处理用a.txt里面的文本去依次替换并生成新的txt

我也将a.txt和b.txt再把举例的写出来吧:

①A.TXT  里面大体这样的,一行一个,每行没数字限制,下面是若干举例:

上海
北京
深圳
天津
广州
香港
南京
苏州
杭州
......等等城市名称!

②B.txt 里面是一些常用短语.也是一行一个,每行也没有数字限制,下面是若干举例:

金玉其外败絮其中
八仙过海各显神通
经验比理论来得实在
有则改之无则加勉
......等等类似的常用语!


Ps:我测试下来,9楼的caruko大哥的是成功的! 不足之处就是把c.txt内容放置在bat里面,没有单独调用让c.txt更加具有可编辑性!

谢谢大家
有创新,多创新;无创新,多模仿;无模仿,多坚持

TOP

不是人家不帮你,是人家不好帮你。
原因是你太罗嗦还没有把问题讲清楚。
你把A 、B 、C 的范例给出..........

TOP

如果方便的话,最好给出c.txt的全部内容
技术问题请到论坛发帖求助!

TOP

caruko你好,麻烦帮我出个完整的,从c.txt调用的那种  
我看了你的回复,那么晚还在,真谢谢你!

直接将c的内容写在bat里面有弊端,那就是可编辑性比较小,忽略效率的问题的话,可以帮我出个完整的bat吗.?我还是将范文放在c.txt里面!

谢谢了!周末愉快
有创新,多创新;无创新,多模仿;无模仿,多坚持

TOP

3ks大家的帮忙,而且我发现大家和我一样都非常晚睡觉,哈哈
caruko 我给你发了个论坛短消息,收到了吗??
有创新,多创新;无创新,多模仿;无模仿,多坚持

TOP

把echo;%_!r!% 改成call echo;%%_!r!%%就可以了。

如果另写一个C.txt,循环读取会影响效率。
而且是多行文本,就算设成变量,也要多N个循环。N=城市数*C.txt行数

所以不如直接写在bat里,或者这样。另外a.txt 最好不要有空行。
  1. @echo off&SETLOCAL ENABLEDELAYEDEXPANSION
  2. set /a x=0
  3. for /f "delims=*" %%a in (b.txt) do set "_!x!=%%a" & set  /a x+=1
  4. for /f "delims=*" %%a in (a.txt) do (
  5.        set /a r=!random!%%x
  6.        call :msg %%_!r!%% %%a >>newtxt\%%a.txt
  7. )
  8. :msg
  9. echo;%1,%2聊天论坛开通,欢迎%2的朋友前来捧场!
  10. echo;告诉大家一个好消息,期待已久的%2聊天论坛备案成功已经开通了,欢迎%2的朋友前来捧场,我们特地在%2市中心设定一个团
  11. 购接待点,届时期待%2论坛通告!
复制代码

TOP

请问,假使要让批处理 得到的结果

正文标题前面随机的常用短语都不重复的话

是不是要b.txt的行数,大于a.txt的行数
有创新,多创新;无创新,多模仿;无模仿,多坚持

TOP

caruko你好

最好让bat读取c.txt 因为那样可编辑余地更大!

这里存在一个问题,我广告测试了一下

好像不能够将b.txt里面的常用语加到正文标题的前面

诸如:


八仙过海,各显神通,北京聊天论坛开通,欢迎北京的朋友前来捧场
有创新,多创新;无创新,多模仿;无模仿,多坚持

TOP

  1. @echo off&SETLOCAL ENABLEDELAYEDEXPANSION
  2. set /a x=0
  3. for /f "delims=*" %%a in (b.txt) do set "_!x!=%%a" & set  /a x+=1
  4. for /f "delims=*" %%a in (a.txt) do (
  5.        set /a r=!random!%%!x!
  6.         echo;%_!r!%,%%a聊天论坛开通,欢迎%%a的朋友前来捧场!>>newtxt\%%a.txt
  7.     echo;告诉大家一个好消息,期待已久的%%a聊天论坛备案成功已经开通了,欢迎%%a的朋友前来捧场,我们特地在%%a市中心设定一个团购接待点,届时期待%%a论坛通告!>>newtxt\%%a.txt
  8. )
复制代码

TOP

是的,大家都这么晚啊,还看到好多人在线,大家辛苦啊!

新生成的txt和范文的区别就是城市名发生变化
同时,正文标题最前面被添加了随机不重复的常用语!

新生成的txt放置在newtxt文件夹里面,生成的个数由A.txt里面的城市名个数决定,也就是多少行就生成多少个
生成的txt命名方式就用各自的城市名命名吧!
有创新,多创新;无创新,多模仿;无模仿,多坚持

TOP

返回列表