in reply to How to replace multiple items with corresponding items from a database

Off the top of my head:
# names.txt 1000:John Smith 2000:Jane Doe 3000:John Doe 4000:George Bush 5000:Saddam Hussein # ids.txt blah blah blah blah -- this line contributed by 1000 foo bar baz etc etc contributed by 4000, my old friend once upon a time thanks to 3000 for his help it was a dark and stormy night, wrote 1000 this line written by both 5000 and 2000 Script: use strict; my ($id,$name,$number,%database); open(NAMES,'names.txt') || die "$!"; while(<NAMES>){ chomp($_); ($id,$name) = split(':',$_); $database{$id} = $name; } close(NAMES); open(IDS,'ids.txt') || die "$!"; open(IDSREPLACED,'>ids-replaced.txt') || die "$!"; while(<IDS>){ foreach $number (keys(%database)){ $_ =~ s/$number/$database{$number}/g; } print IDSREPLACED $_; } # produces blah blah blah blah -- this line contributed by John Smith foo bar baz etc etc contributed by George Bush, my old friend once upon a time thanks to John Doe for his help it was a dark and stormy night, wrote John Smith this line written by both Saddam Hussein and Jane Doe
I'm sure there's a much quicker way to do it, but that works...
--
“Every bit of code is either naturally related to the problem at hand, or else it's an accidental side effect of the fact that you happened to solve the problem using a digital computer.”
M-J D
  • Comment on Re: How to replace multiple items with corresponding items from a database
  • Download Code

Replies are listed 'Best First'.
Re: Re: How to replace multiple items with corresponding items from a database
by gordons (Initiate) on Feb 21, 2003 at 02:53 UTC
    Cody, Thanks for your prompt and helpful response. After a bit of fumbling, I got perl to work from the command line and it all works. If somebody else has some handy additions, such as letting the script let me know what the input file is, then I'd be even better off. But, this does the job. --cheers, Gordon
      Glad I could help.

      What do you mean by "letting the script let me know what the input file is"?

      Do you want to be able to specify the input file like:

      [computer:~] codypendant% perl replaceids.pl names.txt

      Or do you just want the program to tell you what it's doing, like:

      [computer:~] codypendant% perl replaceids.pl names.txt opening names.txt doing the replacements finished! take a look at names-replaced.txt

      --
      “Every bit of code is either naturally related to the problem at hand, or else it's an accidental side effect of the fact that you happened to solve the problem using a digital computer.”
      M-J D
        Cody, I have this workflow that will create multiple files over time as I get new pictures of the science fair. Thus, I'll have different files to process each time, so the first syntax you have would be what I would need. That is, I'll want to do this for names.txt, names2.txt, etc. Another feature that would help, since this starts as canned html with links (from iPhoto on the mac) would be to save the original names.txt file as a backup names.bak and have the modified file take the original name, names.txt. Then, no links would be broken in the html. With these changes, I'd have all I need. Thanks for your help. --cheers, Gordon