Dear Uri,

First thanks for your kindly help and a read-friendly instruction, I will not 
use $a and $b for variables. According to your explanation, I finish the code 
as below:
#!/usr/bin/perl -w
  2 use strict;
  3 open(FH,'<',"file1");
  4 my @first_file = <FH>;
  5 close (FH);
  6
  7 open(FH,'<',"file2");
  8 my @second_file = <FH>;
  9 close (FH);
10
 11 open(FH,'<',"file3");
12 my @third_file = <FH>;
13 close (FH);
14
 15 chomp @first_file;
16 chomp @second_file;
17 chomp @third_file;
18
 19 my ($out_line,$number);
20 $number = @first_file;
21 $out_line='';
22 for(0..$number){
23         $out_line.= shift @first_file;
24         $out_line.= "\t".shift @second_file;
25         $out_line.="\t".shift @third_file;
26         $out_line.="\n";}
27
 28 print $out_line;

I realize my target, however, there are some warnings in the prompt, how can I 
eliminate them? Why?
perl format.pl
Use of uninitialized value in concatenation (.) or string at format.pl line 23.
Use of uninitialized value within @second_file in concatenation (.) or string 
at format.pl line 24.
Use of uninitialized value within @third_file in concatenation (.) or string at 
format.pl line 25.
a b c       x y z       1 2 3
d e f       q w e n 3 4 5
j p k        a s d       8 9 2 1

Thank you very much again.


From: Uri Guttman [mailto:u...@stemsystems.com]
Sent: Friday, February 06, 2015 9:25 AM
To: beginners@perl.org
Subject: Re: use perl format data

On 02/05/2015 08:07 PM, Wang, Zeng-Sheng (TS-GSD-China-ZZ) wrote:

Dear Shawn,

Please forgive me for my poor English explanations of my question, there are 
three files, file 1, file 2  and file3.

File 1:

a b c
d e f
j p k

file 2:
x y z
q w e n
a s d

file 3:
1 2 3
3 4 5
8 9 2 1

I read file 1 to $a, file 2 to $b and file 3 to $c, I want to product file 4, 
it contain file 1 , file 2 and  file 3.

as several people have said, don't use $a and $b for variables. even in simple 
examples like this. seriously don't use them.




File 4:
a b c       x y z     1 2 3
d e f       q w e n   3 4 5
j p k       a s d     8 9 2 1

it seems you want the first line of each file, then the 2nd and then the third. 
this is easy. i won't code it for you but i will give you some direction.

first, just read each file into an array of lines. you can do this in several 
ways but you can work it out yourself first. we will help with any problems but 
that is easy enough.

then remove the newlines of each line with chomp. it can do a whole array for 
you in one call.

then get the first line of each array with shift and build up the first line of 
the output. you can use the . op to append each line onto the variable like 
this:

    $out_line .= $line_from_file ;

then append a newline to that line. you don't need to output it to a file to 
read it back in to $z.

do that for the other 3 lines. there are ways to do this with loops but in your 
case stick with 3 copies of similar code. looping will likely confuse you as 
you will need to know about arrays of arrays and such. you seem to be a early 
beginner and aren't ready for perl data structures.

so code this up, test it out, debug it. when you are stuck next, post the 
complete program and we can help more.

uri

Reply via email to