gordons has asked for the wisdom of the Perl Monks concerning the following question:

This is a real newbie question. I've got Perl on my Mac OS X box. I want to search through a text file for ID numbers and then look in a database of replacements for the text. The database can be a text file with any delimiters for records. At the end, I just want the text file with ID numbers replaced by the corresponding text. I don't want to have to keep the database around to read the resulting file.

(The application is to take a web page with IDs for pictures of 400 kids (randomly sorted) in a science fair and replace the IDs with their name and city they come from. Then, I'll serve the new web page.)

Any help would be appreciated. Particularly if there is an existing tool or some keywords I can use to find such a tool.

  • Comment on How to replace multiple items with corresponding items from a database

Replies are listed 'Best First'.
Re: How to replace multiple items with corresponding items from a database
by Cody Pendant (Prior) on Feb 21, 2003 at 00:01 UTC
    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
      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