Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

Does problem is in the for loop???

by sumathigokul (Acolyte)
on May 11, 2015 at 06:18 UTC ( #1126274=perlquestion: print w/replies, xml ) Need Help??

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

Hi Monks,

Good day to all...

I have four input files as follows.

XOR_portmap file is as follows m : XOR2 port map (A=> in1, B=> enable_c, Y => output);
uut_names file is as follows M1 M2 M3
nets file is as follows a_c b_c c_c
enabled_nets file is as follows a_e b_e c_e

My perl script has to read XOR_portmap file and write to XOR_portmap_nets with substitution in for loop. i.e it should substitute m in XOR_portmap file by 1st, 2nd, 3rd element of uut_names and in1 by 1st, 2nd, 3rd element of nets_names and output by 1st, 2nd, 3rd element of enabled_nets...

Here is the code i wrote and the output file it generates....i attached my expected output file also... Correct the mistake in the code monks... Thank you all...

use strict; use warnings; open (IN1, "<XOR_portmap.txt") or die; open (IN2, "<uut_names.txt") or die; open (IN3, "<nets.txt") or die; open (IN4, "<enabled_nets.txt") or die; open (OUT, ">>XOR_portmap_nets.txt") or die; my @uut_names = <IN2>; my @nets = <IN3>; my @enabled_nets = <IN4>; chomp @uut_names; chomp @nets; chomp @enabled_nets; while (<IN1>) { foreach my $i ( 0..$#nets ) { print OUT if ((s/m/$uut_names[$i]/) && (s/in1/$nets[$i]/) && ( +s/output/$enabled_nets[$i]/)); } } close (IN1); close (IN2); close (IN3); close (IN4); close (OUT);

XOR_portmap_nets file generated for this code is as follows..

M1 : XOR2 port map (A=> a_c , B=> enable_c, Y => a_e );

One more question is, why is it doing each substitution at newline only, instead of writing it as M1: XOR2 port map (A=> a_c, B=> enable_c, Y => a_e); (in single line)

But, i want XOR_portmap_nets file (my expected output file) as follows..

M1 : XOR2 port map (A=> a_c, B=> enable_c, Y => a_e); M2 : XOR2 port map (A=> b_c, B=> enable_c, Y => b_e); M3 : XOR2 port map (A=> c_c, B=> enable_c, Y => c_e);

Replies are listed 'Best First'.
Re: Does problem is in the for loop???
by marto (Cardinal) on May 11, 2015 at 09:30 UTC

    Please copy and paste the code you're actually running, this does not run:

    Global symbol "@uut_name" requires explicit package name at derp.pl li +ne 15. Global symbol "@enable_nets" requires explicit package name at derp.pl + line 16. Execution of derp.pl aborted due to compilation errors.

    Update: You say you're successfully writing something to a file, the code you've posted doesn't do this the way you expect. For clarity, show us what you expect the output to be. Also use the three argument open, and report the reason for failures as documented in open. How do I post a question effectively? has tips on asking for help.

      Here is the code....

      use strict; use warnings; open (IN1, "<XOR_portmap.txt") or die; open (IN2, "<uut_names.txt") or die; open (IN3, "<nets.txt") or die; open (IN4, "<enabled_nets.txt") or die; open (OUT, ">>XOR_portmap_nets.txt") or die; my @uut_names = <IN2>; my @nets = <IN3>; my @enabled_nets = <IN4>; chomp @uut_names; chomp @nets; chomp @enabled_nets; while (<IN1>) { foreach my $i ( 0..$#nets ) { print OUT if ((s/m/$uut_names[$i]/) && (s/in1/$nets[$i]/) && ( +s/output/$enabled_nets[$i]/)); } } close (IN1); close (IN2); close (IN3); close (IN4); close (OUT);

        Update: Ignore this post, see Re^4: Does problem is in the for loop???.

        Are you sure this is your code?

        print OUT if ((s/m/$uut_names[$i]/) && (s/in1/$nets[$i]/) && (s/output +/$enabled_nets[$i]/));

        You say that "it is writing first element alone in XOR_portmap_nets file" but there is no output being written to file here. There are a few issues here, the tutorial Basic debugging checklist mentions three questions which you need to understand:

        • Are you sure your data is what you think it is?
        • Are you sure your code is what you think it is?
        • Are you inadvertently ignoring error and warning messages?
Re: Does problem is in the for loop???
by pme (Prior) on May 11, 2015 at 06:47 UTC
    chomp the arrays.
    chomp @uut_names; chomp @nets; chomp @enabled_nets;

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://1126274]
Approved by hdb
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (5)
As of 2020-11-30 20:00 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?