in reply to Read strings from a file, search and replace same string in another file.

premal:

You're trying to write the results to the same file you're reading from. Instead, read from one file and write your results to a new file, like so:

my $file1 = "C:\\temp\\file1.txt"; my $file2 = "C:\\temp\\file2.bat"; my $file3 = "C:\\temp\\file3.txt"; open (FILE1,"$file1"); open (FILE2,"$file2"); open (FILE3,">$file3"); my @file1 = <FILE1>; my @file2 = <FILE2>; close (FILE1); close (FILE2); chomp @file1; foreach (@file2) { foreach my $search_string (@file1) { s/$search_string/"******"/g; } print FILE3; } close (FILE3);

That should solve immediate problem. Note: I haven't tested or run the updated version.

Update: Tweaked per jethro's comments. (I really ought to not code until I finish my coffee... ;^D)

Update 2: To avoid further embarrassment, I tested it and updated again. It passes my tests now.

...roboticus

When your only tool is a hammer, all problems look like your thumb.

  • Comment on Re: Read strings from a file, search and replace same string in another file.
  • Download Code

Replies are listed 'Best First'.
Re^2: Read strings from a file, search and replace same string in another file.
by jethro (Monsignor) on Dec 08, 2011 at 12:17 UTC
    Not a good idea. In your version FILE2 is reread many times from disk even though file2 is already available in @file2. But worse, FILE3 will be written as many times as file1 has lines and only the last version will survive.

Re^2: Read strings from a file, search and replace same string in another file.
by Anonymous Monk on Dec 09, 2011 at 05:15 UTC

    Thanks a lot friend for helping me out. I did try various changes including this but the mistake I made was not using new file for writing the data. You guided me the correct way. Thanks again for helping me out. :)