in reply to Re: Substitute script for a newbie
in thread Substitute script for a newbie

Thank you. One thing I should have mentioned is that I need to replace several different stock option symbols. That is why I have the elsif statement. There will be more.

I also think that I am making this a lot more complex than it needs to be so I looked at an old script from a Perl lesson and I am going to use that. I will keep you posted.

Replies are listed 'Best First'.
Re^3: Substitute script for a newbie
by Laurent_R (Canon) on Jul 14, 2015 at 17:52 UTC
    I would suppose that you have somewhere a file with a correspondence between old names and new names. If so, please provide a sample of that file so that we can figure out how to use it.

    The idea would be then to read this file and to load the information into a hash (old name = key, new name = value). Then you read your other file (the one you want to process), read the input, lookup into the hash and write the new name (to a new file).

    I can't give you much more details at this point. We would need to see a sample of the file with the translation (old to new name) as well as a sample of your input file.

      The file I have is only the old symbols and it is a list of 590; like below (minus the spaces)

      A.TL5E001100.TAV

      A.TL5F001560.TAV

      A.TL5T001240.TAV

      A.TL5E001230.TAV

      A.TL5E001270.TAV

      So A.TL5E001100.TAV needs to change to +TL\E5C1100.TAV, A.TL5F001560.TAV needs to change to +TL\F5C1560.TAV, etc

      I rewrote the code to be a lot simpler and only did one substitution just so I could see what the output is. Now it runs, but I get no output so I need to read up on matching and substitution string syntax.

      use strict; use warnings; my $input = 'TAV.stock.opt.oldsym.txt'; { unless(open(INPUT,$input)) { die "\nCannot open $input\n"; } <INPUT>; my @lines; while(my $line = <INPUT>) { chomp $line; if ($line =~ m/^A.TL5E00/) { $line =~ s/A.TL5E00/'+TL\E5C'/g; } } close INPUT; foreach my $line(@lines) { print $line,"\n"; } }
        Thank you for your answer. So, if I understand correctly, you don't need a list of old and new names, you can figure out the new name by just looking at the old name. Would you mind explaining the rule for renaming in plain English?

        If my understanding above is correct, this thing should be fairly easy.