Thank you, Due to your remarques, my script works properly now : Here is the new version after modifications (I'll be glad, if you have any seggestion to make it better, actually the script uses big files, more than 200MB ) :
#/usr/local/bin/perl -w $i=0; $k=0; open (INDATA, "<in_file.txt") || die("Can't open in file"); open (OUTDATA, ">out_file.txt") || die("Can't open out file"); while( my $line = <INDATA> ) { chomp $line; my @fields = split(",", $line); for (my $i = 0; $i <= $#fields; $i++) { if( $fields[$i]=~ /subject/ ) { $k=$i} } $line = join(":", $fields[0], $fields[2], $fields[$k], $fields[$k+1]); print OUTDATA "$line\n"; } close INDATA; close OUDATA; Sorry to bother you with my problems, CHAFIK. ----- Original Message ----- From: "Wiggins d Anconia" Date: Tue, 29 Jun 2004 11:26:27 -0600 To: Philipp Traeder , [EMAIL PROTECTED] Subject: Re: Extracting fields from a data file > > On Tuesday 29 June 2004 18:44, mohammed chafik wrote: > > > That's what i've tried (may be it is not the best approch); > > > > If you ask me, the general approach is quite ok... > > > > > > > > > > > > > for ($i = 0; $i < 400; $i++) { > > > > The other source for the messages is that you're trying to access > values in > > the array @fields that do not exist. > > In your data file, @fields holds something like 15 records, certainly > not 400. > > I'd do something like > > > > for (my $i = 0; $i <= $#fields, $i++) { > > > > which loops until $i has reached the last field of @fields > ($# > > holds the last index of an array). > > > > > if( $fields[$i]=~ /subject/ ) { $k=$i} > > > } > > > > > Good suggestions, if we are going to stick with the loop, and we only > care that we advance as long as we haven't found the subject then > throwing a 'last' in after the assignment, would provide at least some > speed up. If there are a significant # of lines to parse and the subject > may appear early enough on the line then this could be a noticeable > improvement. It would also make sense to adjust $i initial point forward > if we can be guaranteed that subject occurs after a minimum number of > fields on a line, which does seem indicated since we are using 0,2 > indexes later not relative to the subject, so $i could be set at 3 > initially. Turn my nitpicking back off now ;-)... > > http://danconia.org > > -- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > > -- ___________________________________________________________ Sign-up for Ads Free at Mail.com http://promo.mail.com/adsfreejump.htm -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>