Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW

Re: handling files using regular expression

by marto (Bishop)
on Jun 28, 2013 at 13:36 UTC ( #1041253=note: print w/ replies, xml ) Need Help??

in reply to handling files using regular expression

Earlier today various people pointed out that you should use strict and warnings, check that you're opening files without error and you accepted this was the solution to the problem in question. Is there a reason why you've either ignored or fogotten this advice after only a few short hours?

Comment on Re: handling files using regular expression
Re^2: handling files using regular expression
by rocketperl (Sexton) on Jun 28, 2013 at 13:42 UTC
    yes, sorry.. i did forget to include that. but inspite of including the use strict and warnings, i did not get any warning and neither did my output file get updated. kindly help me.
    #!/usr/bin/perl use strict; use warnings; my $input; my $start; open (FILE, 'name.tsv'); open (OFILE, '>probe_dist.tsv'); while (<FILE>){ ($input)= split ("\t"); $start= $input; } while (<FILE>) { $start =~ m/:(\d+)/; print OFILE "$start\n"; } close (FILE); exit;
      while (<FILE>){ ... something ... } while (<FILE>) { ... something else ... }

      That second loop will never execute. Can you tell why?

      Just a few comments:

      • Your first while loop already runs through the whole file while not doing anything useful. Therefore the second while loop has nothing to do. Remove the first while loop altogether.
      • The statement while (<FILE>) of your second loop (now the only one...) will read a line at a time and assign it to $_. So you need to work with $_ within the loop block.
      • Your line $start =~ m/:(\d+)/; is applying the regex to the variable $start but you need to apply it to $_. Sou you might say $_ =~  m/:(\d+)/; which would work. It would be more Perlish to just say /:(\d+)/; as this would be applied to $_ by default.
      • The result of this match is that what was found in (...) is assigned to $1 so you need to write that to your file: print OFILE "$1\n";.
      This is probably not all but if you re-read the earlier thread you should find more best practices.

        Thank you so much. The code worked like a charm.

      Firstly, when posting asking for help please post the actual code you're running. This code differs significantly from the code you have initially provided. Also, the advice in the post I linked to wasn't restricted to adding use strict; use warnings;, we also told you to use open properly, and to check for errors.

      Here you have two while loops for some reason, I've no idea why. Also you're splitting on tab but to one variable, and the input data you provide doesn't have any tabs at all.

      I'd suggest (again) that you take the time to learn the basics, and if you're going to ask for advice which you claim resolves your poroblem please either try and remember it or keep notes so that you use apply the same knowledge in future works.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1041253]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others meditating upon the Monastery: (13)
As of 2015-03-02 16:31 GMT
Find Nodes?
    Voting Booth?

    When putting a smiley right before a closing parenthesis, do you:

    Results (51 votes), past polls