+ -
当前位置:首页 → 问答吧 → 请教一个用正则提取参数后,在另外一个文件进行替换的问题.

请教一个用正则提取参数后,在另外一个文件进行替换的问题.

时间:2010-10-20

来源:互联网

本帖最后由 xixizhihua 于 2010-10-20 10:53 编辑

大家好,我在写perl的时候,遇到这样一个问题.请大家帮忙指点一下.
总体上说,就是要把一张表的内容,分别替换到其它各个文件中,在把替换过的文件存起来。

举个例子:
我有一个文件:datafile.t
内容是一个类似表格的文件:

time      work        complete    number      name
9:00      write           1               6               zgq
10:00    copy            0              30              yzl
8:00      email           1               8              wxy
12:00    meeting       0              12              wyz
……

另外一个文件为文本范例:example.v
大部分文字都是固定的
里面有一部分内容为
please call zgq
at the time 9:00
the work is write
he has completed the work
(注:如果complete=0就写 he is doing the work)
the total number is 6

我要做的:是把表格各行内容替换进去。然后用最后的task_name作为文件名存起来。
比如:把第一行内容读出,替换掉example的那部分内容,保存为task_zgq.v
然后,把第二行内容读出,替换掉example的那部分内容,保存为task_yzl.v
         该文件替换后的那部分内容为:
please call yzl
at the time 10:00
the work is write
he is doing the work
the total number is 30

然后,把第三行内容读出,替换掉example的那部分内容,保存为task_wxy.v
        该文件替换后的那部分内容为:
please call wxy
at the time 8:00
the work is email
he has completed the work
the total number is 8

以此类推……
最后生成一堆格式和example一样,内容按表替换,文件名是例如task_wxy.v    task_yzl.v  ……的文件集。

目前:
我用s:\s*(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s:get$1and$2and$3and$4and$5:
进行试验。
可以把参数提出来,经过检查,5个参数,都能提对。
但是,怎么把它们替换到别的文件,以及替换后,怎么按规定的文件名保存,一直都弄不成功。
希望朋友们能帮我指点下。非常非常感谢。

作者: xixizhihua   发布时间: 2010-10-20

回复 xixizhihua

不要陷入文件替换了,用文件新建。
  1. my @text;
  2. push @text,"please call $5\n";
  3. push @text,"at the time $1\n";
  4. push @text,"the work is $2\n";
  5. if($3 == 1){
  6.     push @text,"he has completed the work\n";
  7. }else{
  8.     push @text,"he is doing the work\n";
  9. }
  10. push @text,"the total number is $4\n";
复制代码
然后把@text的内容写入文件task_$5.v

作者: 珞水的大叔   发布时间: 2010-10-20

谢谢大叔,我试了一下,使用数组存进去,再放的方法确实可以把我要换的那块,生成新文件。

但是,有个问题。
就是我的那个example.v
实际上是一个非常复杂的脚本文本。
而我要替换的参数,也要在多个地方进行替换使用。

如果全部生成的话,
是不是,我需要先把不要替换的内容全部拷贝下来,push到数组里。
然后和生成的内容一起存呢?

另外生成的脚本文件,有格式要求,我直接写的话,一是容易漏,第二个格式我不大会调。
能不能再请教下大叔,针对比较复的文件替换,是不是有更好的方法呢?

作者: xixizhihua   发布时间: 2010-10-20

本帖最后由 珞水的大叔 于 2010-10-20 12:51 编辑

回复 xixizhihua


QUOTE:
如果全部生成的话,
是不是,我需要先把不要替换的内容全部拷贝下来,push到数组里。
然后和生成的内容一起存呢?


    可以这样,也可以处理一句就往文件里写一句




QUOTE:
另外生成的脚本文件,有格式要求,我直接写的话,一是容易漏,第二个格式我不大会调。
能不能再请教下大叔,针对比较复的文件替换,是不是有更好的方法呢?


    那就这样,还是用你举的例子来说(即需替换五个地方),思路大致是这样的:
   1.先把datafile.t中的信息提取出来,存放入数组
   2.读入文本范例example.v,对每行都进行五个替换的处理,把处理结果存入结果数组
     至于如何替换,需要看你的具体替换要求,是替换某个位置的字符串?还是把某个特定的字符串替换掉?都要具体分析
   3.把结果数组写入新文件

作者: 珞水的大叔   发布时间: 2010-10-20