It's no problem to use 23 # column indices and 10.000 lines?
No problem at all. As there are no more than two lines of data kept in memory at any point in time, the number of lines is essentially irrelevant. And 23 columns isn't really a lot either... (BTW, note that you only have to give names (constants) to column indices that you actually need to access or modify, like 3,7,8,9 and 10,11,12).
| [reply] |
I'm very close to the solution!
(But it takes a lot of time...)
It is about the last three lines.
With line one and two I'll get the right values.
Adding or averaging (/2) results in "0.0".
sprintf tricks doesn't seem to work.
Summary:
How can I add or average two indexed values?
(I'm new to hashes/arrays etc.)
my @col1; # '1st-line-of-pair' buffer
foreach (@unpaired) { # comment
open(DATA, $_) or die "Couldn't open $_ for reading: $!\n"; # Open file
chomp($_ = <DATA>); # input regel 1 and remove newline, skip headers
while (<DATA>) { # read line
chomp;
my @col2 = split /\t/; # split line on tabs
if (@col1) { # two lines read, i.e. pair available?
if ( $col1[$h{'A'}[0]] eq $col2[$h{'A'}[0]] # match on ID_1
&& $col1[$h{'O'}[0]] eq $col2[$h{'O'}[0]] # match on plan ID && $col1[$h{'Q'}[0]] eq $col2[$h{'Q'}[0]] # match on session date
&& $col1[$h{'R'}[0]] eq $col2[$h{'R'}[0]] # match on session time
) {
$col1[$h{'B'}[0]] .= "-".$col2[$h{'B'}[0]]; # Concatenate B for both lines: <val1>-<val2>
$col1[$h{'D'}[0]] = "Paired_Perl"; # This set is modified by Perl
$col1[$h{'Y'}[0]] = ($col1[$h{'Y'}[0]]); # correct value
$col2[$h{'Y'}[0]] = ($col2[$h{'Y'}[0]]); # correct value
$col1[$h{'Y'}[0]] = ($col1[$h{'Y'}[0]] + $col2[$h{'Y'}[0]]); # adding goes wrong "0.0" ....
Thanks again! | [reply] |