请问两个文件内容匹配问题

请问两个文件内容匹配问题

有两个文件,第一个文件中如果含有第二个文件中的字符串,就改成这字符串后加z,
比如 a文件
aaa
bb
cc dd ee
ff
b 文件
aa
bb
dd
ee
生成的文件是
aaa
bbz
cc ddz eez
ff
第一行的aaa 由于不是一个独立的字,所以没改变。
哪位大虾帮忙如何实现
open FD1, 'file1' ;
open FD2, 'file2' ;
my $line2 ;
$line2 .= $_ while <FD2> ;
my @array2 = split /\s+/ , $line2 ;
my $line1 ;
$line1 .= $_ while <FD1> ;
$line1 =~ s/(\s+)($_)(\s+)/\1\2z\3/g foreach @array2 ;
close FD1 ;
open FD1, '>file1' ;
print FD1 $line1 ;
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;

namespace ConsoleApplication1
{
    /*
    * 有两个文件,第一个文件中如果含有第二个文件中的字符串,就改成字符串后加Z
    比如a文件
    aaa
    bb
    cc dd ee
    ff
    b 文件
    aa
    bb
    dd
    ee
    生成的文件是
    aaa
    bbz
    cc ddz eez
    ff
    第一行的aaa 由于不是一个独立的字,所以没改变。
    哪位大虾帮忙如何实现

             */
    class Program
    {
        static void Main(string[] args)
        {
            Replace();
        }

        // 替换函数
        static private string ReplaceCC(Match m)
        {
            return m.Value + "z"; // 替换成aaz模式
        }


        static private void Replace()
        {
            
            string line = string.Empty;
            string sPattern = string.Empty;
            // 把b文件中的数据读成一个正则表达式
            using (StreamReader sr = new StreamReader("b"))
            {
                while ((line = sr.ReadLine()) != null)
                {
                    line.Trim();
                    sPattern += line + "|";
                }
                sPattern = sPattern.TrimEnd('|');
            }

            // 自定义的一个正则表达式匹配替换对象
            MatchEvaluator myEvaluator = new MatchEvaluator(ReplaceCC);

            using(StreamWriter swrite = new StreamWriter("c", false))
            {
                using (StreamReader sr = new StreamReader("a"))
                {
                    // 读入A文件中一行,对该行替换
                    while ((line = sr.ReadLine()) != null)
                    {
                        // 写入到C文件中
                        swrite.WriteLine(Regex.Replace(line, sPattern, myEvaluator));
                    }
                }
            }
        }
    }
}


QUOTE:
原帖由 perlliker 于 2007-6-27 00:26 发表
有两个文件,第一个文件中如果含有第二个文件中的字符串,就改成这字符串后加z,
比如 a文件
aaa
bb
cc dd ee
ff
b 文件
aa
bb
dd
ee
生成的文件是
aaa
bbz
cc ddz eez
ff
第一行的aaa 由于不是 ...

轻松
你先把第二个文件里面的word hash一遍

[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/perl
use strict;
use warnings;
my %hash;
open my $second,"<","b" or die "Fail to open file b $!";
while(<$second>){
     chomp;
     $hash{$_}++ foreach (split/\s+/);
     }

@ARGV= qw (a);
$^I = ".bak";
while(<>){
     chomp;
     foreach(split/\s+/){
          $_ .= "z" if $hash{$_};
          print "$_ ";
          }
     print "\n";
     }

结果

QUOTE:
<lig@other-server:~/chinaunix>$ cat a
aaa
bb
cc dd ee
ff
<lig@other-server:~/chinaunix>$ cat b
aa
bb
dd
ee
<lig@other-server:~/chinaunix>$ ./change
<lig@other-server:~/chinaunix>$ cat a
aaa
bbz
cc ddz eez
ff
<lig@other-server:~/chinaunix>$ cat a.bak
aaa
bb
cc dd ee
ff

a.bak是a文件的备份