Board logo

标题: [文本处理] 【已解决】求一段txt中每段内容随机位置插入指定字符的BAT代码 [打印本页]

作者: zq437400    时间: 2013-9-27 18:20     标题: 【已解决】求一段txt中每段内容随机位置插入指定字符的BAT代码

本帖最后由 zq437400 于 2013-9-29 12:15 编辑

找了很久都没找到,哪位高手能帮忙写一个?(不好意思啊,我可能是实例弄错了,不是标点符号后面的,是随机在一段文字里面插入,实在不好意思啊)
比如有个txt中有几段文字

清高?抵得上一份工作吗?能让你吃好、喝好、住好吗?不要以为端盘子洗碗、站超市、打扫卫生天生就不是你干的事,不要以为你天生就是拯救世界的料儿,日子是过出来的,不是想出来的。

  20岁上下,该现实点了,放下清高的架子,折断幻想的翅膀,才会走的更精彩!

  20岁上下,一个充满理想却过于富于幻想的年龄。成功是经历了比别人更多的努力、付出、毅力、痛苦与艰辛后得到的,不是能幻想出来的。即使天上有掉陷饼的事也不会砸到整天幻想的人。

  20岁上下,一个涉世不深却自谓看透一切的年龄。我们常常讽刺社会的肮脏、丑陋、**,自以为很纯洁,就浅薄的说出活在这样的世界很无奈的话。热爱生命,不要只是处在大学的象塔中才说出这样的话,在当我们经历了社会的各种不纯洁时也要能说出这样的话。

  20岁上下,在大学中你看到的连社会中的一个角都抵不上。要想真正的看透人生,等你闭眼的那一刻才是看透了,好好活着才有看破红尘的一天。

插入后

清高?抵得上一份工作吗?能让你{title}吃好、喝好、住好吗?不要以为端盘子洗碗、站超市、打扫卫生天生就不是你干的事,不要以为你天{title}生就是拯救世界的料儿,{title}日子是过出来的,不是想出来的。

  20岁上下,该现实点了,放下清{title}高的架子,{title}折断幻想的翅膀,才会走的更精彩!

  20岁上下,一个充满理想却过于富于幻想{title}的年龄。成功是经历了比别人更多的努力、{title}付出、毅力、痛苦与艰辛后得到的,{title}不是能幻想出来的。即使天上有掉陷饼的事也不会砸到整天幻想的人{title}。

  20岁上下,一个涉世不深却{title}自谓看透一切的年龄。{title}我们常常讽刺社会的肮脏、丑陋、**,自以为很纯洁,{title}就浅薄的说出活在这样的世界很无奈的话。热爱生命,不要只是处在大学的象塔中才说出这样的话,{title}在当我们经历了社会的各种不纯洁时也要能说出这样的话。

  20岁上下,在大学中你看到的连社会中的一个角都抵不上。要想真正{title}的看透人生,等你闭眼的那一刻才是看透了,好好活着才有看破红尘的一天。
是每段不是每行
随机插入2个3个或者4个就行!!在线等
作者: PowerShell    时间: 2013-9-27 18:26

我写过一个,不知道你用的上么?
文本文件内容混淆器
程序作用:把一段文本插入乱字符。
乱字符内容由变量 $zifuku 控制,$zifuku = "è","e","í" 表示随机插入这三个字符之一。
插入间隔由变量 $jiange 控制,$jiange = 3..9 表示间隔是3---9个字符之间。
通过自定义这两个变量来适合你的需求。
程序使用了定时器控件,好处是单线程UI不会无响应,坏处是处理大文本较慢,
处理大文本想要速度,建议用多线程重写程序。
作者: batman    时间: 2013-9-27 19:24

看了下楼主的描述,好像并不是很随机的插入啊,应该是随机把指定字符插入到标点符号后面吧?如果是这样批处理除了逐字符检测没有更好的办法了,效率是大问题啊。。。
作者: batman    时间: 2013-9-27 20:34

本帖最后由 batman 于 2013-9-27 21:13 编辑

请先在运行代码前将文本中的*字符手工替换为××,不然有*字符的这一段会出现乱插入的情况 ,至于标点分隔符自己可以在代码中添加:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%a in (10000,1,11000) do set "a=%%a"&set "code=!a:~1!!code!"
  3. (for /f "tokens=1* delims=:" %%a in ('findstr /n .* a.txt') do (
  4.   if "%%b" neq "" (
  5.     set "str=%%b"&set "var=%%b"&set /a total=0,m=0
  6.     for %%c in ("," ";" " " " ")  do set "str=!str:%%~c=@!"
  7.     for %%c in (, 。 ? !) do set "str=!str:%%c= !"
  8.     for %%c in (!str!) do (
  9.       set "zf=%%c%%c%%c%%c!code!"
  10.       set /a zf=1!zf:~4000,4!-9999,total+=zf
  11.       set "bd=!bd! !total!"
  12.     )
  13.     for %%c in (!bd!) do (
  14.       set /a a=!random! %% 2
  15.       if !a! equ 0 if %%c neq !total! (
  16.         set /a b=%%c+m
  17.         for %%d in (!b!) do (
  18.           set "var=!var:~,%%d!{title}!var:~%%d!"
  19.           set /a m+=7
  20.         )
  21.       )
  22.     )
  23.     echo,!var!&set "bd="
  24.     ) else (
  25.     echo,
  26.   )
  27. ))>new.txt
  28. start new.txt
复制代码

作者: zq437400    时间: 2013-9-28 13:50

本帖最后由 zq437400 于 2013-9-28 14:04 编辑

回复 4# batman


    真是不好意思,我可能是实例写错了,我找到一段代码
echo off

setlocal enabledelayedexpansion

set /a x=%random%%%(5-0)+(0+1)

set a=0

for /f %%i in (6.txt) do (

set b=%%i

echo !b:~0,-%x%!{title}!b:~-%x%!>>2.txt

)

start 2.txt

发现在每段结束的地方会被插入,而我不想插入太明显有规律性,我想没规律,麻烦版主了
作者: batman    时间: 2013-9-28 20:48

没想到随机位置插入代码更加复杂了,幸好效率还行。。。。
  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%a in (10000,1,11000) do set "a=%%a"&set "code=!a:~1!!code!"
  3. (for /f "tokens=1* delims=:" %%a in ('findstr /n .* a.txt') do (
  4.   if "%%b" neq "" (
  5.     setlocal
  6.     set "zf=%%b%%b%%b%%b%code%"&set "str=%%b"
  7.     set /a zf=1!zf:~4000,4!-10000
  8.     set /a a=!random! %% 4+1
  9.     for /l %%c in (1,1,!a!) do (
  10.       set /a b=!random! %% zf+1
  11.       for %%d in (!b!) do (
  12.         if defined cr (
  13.           if "!cr: %%d =!" equ "!cr!" (
  14.             set "cr= %%d !cr!"
  15.             for %%e in (!cr!) do (
  16.               if %%e lss %%d (
  17.                 set "cr=!cr: %%d =!"
  18.                 set "cr=!cr: %%e = %%e  %%d !"
  19.               )
  20.             )
  21.           )
  22.           ) else (
  23.           set "cr= %%d "
  24.         )
  25.       )
  26.     )
  27.     for %%c in (!cr!) do (
  28.       set /a a=%%c+m
  29.       for %%d in (!a!) do (
  30.         set "str=!str:~,%%d!{title}!str:~%%d!"
  31.         set /a m+=7
  32.       )
  33.     )
  34.     echo,!str!&endlocal
  35.     ) else (
  36.     echo,
  37.   )
  38. ))>new.txt
  39. start new.txt
复制代码

作者: zq437400    时间: 2013-9-29 12:13

厉害总算解决了啊




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