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

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.

Replies are listed 'Best First'.
Re^4: Substitute script for a newbie
by jspanos (Initiate) on Jul 14, 2015 at 18:44 UTC

    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.

        There isn't a hard rule, just individual cases like

        A.TL5E00* becomes +TL\E5C*, A.TL5F00* becomes +TL\F5C*, and A.TL5G00* becomes +TL\G5C*.

        I've actually made great progress on my own. I think my only obstacle is still how to format the substitution string so it will read things like '\F' as a string and not a function

        Here is my latest version. The output is ugly since it has the $VAR tags (this is something I should be able to fix), but I am feeling a lot better about where I am at

        use strict; use warnings; use Data::Dumper; my $input = 'TAV.stock.opt.oldsym.txt'; my @NewSym; { 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; push @NewSym,$line; } } close INPUT; print Dumper(@NewSym); }