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

split function

by herny (Initiate)
on Jul 12, 2010 at 16:09 UTC ( #849033=perlquestion: print w/ replies, xml ) Need Help??
herny has asked for the wisdom of the Perl Monks concerning the following question:

I guess it is working now, but I might have another problem in my script, as I am not getting the expected result. My whole code is:
#!/usr/bin/perl + #network_coco.plx + use warnings; use strict; + open(DATAIN, "<$ARGV[0]")||die"cannot open \"ARGV[0]\":$!"; open(DATAOUT2, ">>cococount.txt")||die"$!\n"; + for(my $count=0.9; $count<=0.95; $count=$count+0.01) { open(DATAOUT, ">variable")||die"$!\n"; while(<DATAIN>) { my @line=split (/\t/); if($line[2] >= $count) { print DATAOUT; } } close(DATAOUT); system ("clm close -abc variable --is-undirected --write-count -cc +-bound 5 > var2"); #clm close reads file variable, and gives back an integer + open(VAR2, "<var2")||die"$!\n"; while (<VAR2>) { chomp; print DATAOUT2 "$count\t$_\n"; } close(VAR2); } + close(DATAOUT2); +
What I want is a the file cococount.txt containing:
0.9 (tab) 13 0.91 (tab) 9 0.92 (tab) 7 0.93 (tab) 8 0.94 (tab) 5 0.95 (tab) 4 And what I get is: 0.9 (tab) 13 0.91 (tab) 0 0.92 (tab) 0 0.93 (tab) 0 0.94 (tab) 0
I guess the problem should be overwritting file "variable". Also, I do not get the final line : 0.95 ... Any ideas? Many thanks, Hernando

Comment on split function
Select or Download Code
Re: split function
by kennethk (Monsignor) on Jul 12, 2010 at 16:15 UTC
    Your line while(my @line = <DATAIN>) slurps in the whole file. I think what you mean to write is:

    open(DATAOUT, ">variable")||die"$!\n"; for(my $count=0.9; $count<=1; $count=$count+0.01) { open(DATAIN, "<$ARGV[0]")||die"cannot open \"ARGV[0]\":$!"; while(<DATAIN>) { my @line = split (/\t/); if($line[2] >= $count) { print DATAOUT; } } close DATAIN; }

    The while(<DATAIN>) structure reads the next line into the special variable $_, which is then split on tabs and stored in my @line = split (/\t/);. See I/O Operators and split.

    If this does not meet spec, post your input file (wrapped in code tags) and expected output, so we can see what you see what you see. Read How do I post a question effectively?.

    Update: Please do not change the content of posts - it makes it less likely people will notice your updates and makes it much more difficult to follow threads later. It looks like jwkrahn's post below answers your concerns.

Re: split function
by jwkrahn (Monsignor) on Jul 12, 2010 at 18:39 UTC

    Perhaps your code will run better like this:

    #!/usr/bin/perl #network_coco.plx use warnings; use strict; open DATAOUT2, '>>', 'cococount.txt' or die "$!\n"; for my $count ( 90 .. 95 ) { open DATAIN, '<', $ARGV[ 0 ] or die "cannot open \"ARGV[0]\":$!"; open DATAOUT, '>', 'variable' or die "$!\n"; while ( <DATAIN> ) { my $field = ( split /\t/ )[ 2 ]; if ( $field >= "0.$count" ) { print DATAOUT; } } close DATAOUT; close DATAIN; #clm close reads file variable, and gives back an integer open VAR2, '-|, 'clm', 'close', '-abc', 'variable', '--is-undirect +ed', '--write-count', '-cc-bound', '5' or die "$!\n"; while ( <VAR2> ) { chomp; print DATAOUT2 "0.$count\t$_\n"; } close VAR2 or warn $! ? "Error closing pipe: $!" : "Exit status $? from clm"; } close DATAOUT2;

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (6)
As of 2014-12-28 17:47 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (182 votes), past polls