in reply to Re^3: Combining matching lines in a TAB seperated textfile
in thread Combining matching lines in a TAB seperated textfile

Wow!
I think I can see through the mist (sorry, my English is very bad).
I recognize most of the code, but there is some syntaxis I have to investigate (sprintf "%.1f").
It's no problem to use 23 # column indices and 10.000 lines?
I have a "comparable" Perl snippet, that reads a text logfile and generates a html/css page.
I think the hill is not to steep.
Thanks for the usefull advice!
And if it works...
What kind of construction would a Perl expert use? I'll never be a pro, but I'm eager to learn a little bit more every day! (Wobbel, buy a Navigator...)
  • Comment on Re^4: Combining matching lines in a TAB seperated textfile

Replies are listed 'Best First'.
Re^5: Combining matching lines in a TAB seperated textfile
by Eliya (Vicar) on Apr 27, 2011 at 19:59 UTC
    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).

Re^5: Combining matching lines in a TAB seperated textfile
by Wobbel (Acolyte) on May 11, 2011 at 11:10 UTC
    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!