thank you for reply. it is working file except i want 948 rows and 200 columns from 200 files.
the program is giving me 200 rows and 948 columns.
thank you. | [reply] |
@ARGV = glob 'datafile*';
open my $OUTPUT, '>', 'output_file' or die "Cannot open 'output_file'
+because: $!";
my %data;
while ( <> ) {
next unless /^(.+) (\S+)$/;
push @{ $data{ $1 } }, $2;
}
for my $key ( sort keys %data ) {
print join ' ', $key, @{ $data{ $key } }, scalar @{ $data{ $key }
+}, "columns\n";
}
| [reply] [d/l] |
thank you. the code is working fine.
could you please help me understand the code. i am a beginner in perl and had hard time understanding the hi-fi code.
also could you please explain how sort is working in your code.
what changes do i have to make to code to get all the data with out any sorting.
thank you.
| [reply] |
thank you. the code is working fine. could you please explain how sort is working in your code. what changes do i have to make to code to get all the data with out any sorting. thank you
| [reply] |
@ARGV = glob 'datafile*';
open my $OUTPUT, '>', 'output_file' or die "Cannot open 'output_file'
+because: $!";
my %data;
while ( <> ) {
next unless /^(.+) (\S+)$/;
push @{ $data{ $1 } }, $2;
}
for my $key ( sort keys %data ) {
print join ' ', $key, @{ $data{ $key } }, scalar @{ $data{ $key }
+}, "columns\n";
}
========================
The program you have given works fantastic. But I have to deal with one more thing...Here it is.
I have files by name datafile1,datafile2,datafile3,datafile4.........datafile200 in a directory.
But these files are stored in a a different pattern ...datafile1,datafile10,datafile11,datafile12 and so on. The above program is reading and writing in the same order.
I would like to pick data from in the an order from datafile1, 2, 3 to data200.
I guess I need to sort.
Any suggestions and additions are appreciated.
Thank you. | [reply] [d/l] |
That's because glob returns the results of datafile* interpolated in the order a shell would return them, so datafile11 comes before datafile2, as you've seen. A quick and dirty solution, if you know you're only dealing with up to 3 digits:
@ARGV = glob 'datafile? datafile?? datafile???';
A more general solution that'll sort on any number of digits:
@ARGV = sort { my $an = substr $a, 8; my $bn = substr $b, 8; $an <=> $
+bn } glob 'datafile*';
Aaron B.
Available for small or large Perl jobs; see my home node.
| [reply] [d/l] [select] |