in reply to incrementing already existing file
As for the code you posted, here are some general comments, but they won't fix the problem(s) you tried to describe in your post.
Firstly, I reformatted your code (nicer indentation, eliminate lots of extra white space) to make it more readable. Here it is (see below for some specific comments):
Comments:#!/usr/bin/perl -w use strict; #crappy open (MYFILE, "2hgs_d00_internal_nrg_e.dat"); my $nrgval = " "; my $chn = " "; my $count; #my $chn[$count]; my $count2; #my $chn2[$count2] my @nrg; open (NEWF, "2HGS_bio_conv-min_p.pdb"); my $toprint = " "; my $chn2 = " "; while (<MYFILE>) { chomp; # avoid \n at the end of each line if ($_ =~/ENERGY/) { for ($count=1;$count<=1;$count++) { $chn = substr $_, 20, 3; $nrgval = substr $_, 35, 8; while (<NEWF>) { chomp; # avoid \n at the end of each line my $j = 0; my $i = 0; if ($_ =~/ATOM/) { for ($count2=1;$count2<=1;$count2++) { $chn2 = substr $_, 23, 3; $toprint = substr $_, 0, 65; for ($chn=1;$chn<=$chn2;$chn++) { if ($chn==$chn2) { print " $toprint $nrgval \n"; } } } } } } } } close (MYFILE); close (NEWF);
I changed all of your uses of 'our' to 'my'. They are not interchangeable, and the details of when you really want 'our' are probably more than you need to worry about right now. Until you get more experience, stick to 'my'. Other than those changes and reformatting, the code is yours, but here are some things you should do:
- Re-read the documentation for open. You need to specify whether files are for reading, writing, or appending. You got the behavior you wanted, but you should get in the habit of saying explicitly what you want.
-
Get in the habit of checking whether open succeeded:
open( .... ) or die "could not open file: $!";
- You will want to learn to use Perl's for / foreach rather than the C-style for loops that you have here. Once it's clear what you're trying to do, it will also be clear how to make things more Perl-ish. (I'm sure you are aware that two of your loops make only one pass, but I suspect you did that intentionally for debugging purposes.)
-
You have these two lines (commented out):
If you really need arrays, they would be declared like so:#my $chn[$count]; #my $chn2[$count2]
We'll know if you need them when we see some data and a description of what should happen.my( @chn, @chn2 );
Those are comments about good programming practice. None of them are likely to solve your problem. Post some sample data for the two files. Include a description of what you want your code to do (both in terms of program steps and what you want the output to look like). If, in the process of doing that you get it working on your own, so much the better. If you're still having problems, at least then we have some data to test help us help you solve your remaining problems.
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^2: incrementing already existing file
by wanttoprogram (Novice) on Feb 28, 2011 at 00:51 UTC | |
by broomduster (Priest) on Feb 28, 2011 at 01:06 UTC | |
by umasuresh (Hermit) on Feb 28, 2011 at 13:55 UTC | |
by wanttoprogram (Novice) on Feb 28, 2011 at 22:58 UTC |