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...
> Any way, My script doesn't work, it returns an error message (Use of
> uninitialized value at formater.pl line 22, <INDATA> chunk 4.)
>
> -----------------------------------------------------
> #!/usr/local/bin/perl -w
I'd always include
use strict;
as first statement in your script. This saves you a lot of time.
>
> $i=1;
> $k=1;
>
> open (INDATA, "<in_file.txt") || die("Can't open in file");
>
> open (OUTDATA, ">out_file.txt") || die("Can't open out file");
>
>
>
> while( $line = <INDATA> ) {
You're reading each line into a variable called $line...
>
> chomp;
>
> @fields = split(",", $_);
but here you're working on $_.
You should either do
while ( $_ = <INDATA> ) {
chomp;
my @fields = split(",");
..
}
or
while ( my $line = <INDATA> ) {
chomp $line;
my @fields = split(",", $line);
}
This in one source for the "uninitialized value" messages.
>
> 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 ($#<array_name>
holds the last index of an array).
> 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;
Another warning message tells you that you've got a typo here ;-)
HTH,
Philipp
PS.: Please bottom-post.
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>