Hey Monks
I have the following file

--,--,--,--,1.280000e+2,9.930000e+0 --,--,--,--,1.920000e+2,9.950000e+0 --,--,--,--,2.560000e+2,1.013000e+1 --,--,--,--,2.000000e+0,4.370000e+0 --,--,--,--,4.000000e+0,5.300000e+0 --,--,--,--,8.000000e+0,6.590000e+0 --,--,--,--,1.600000e+1,7.830000e+0 --,--,--,--,2.400000e+1,8.710000e+0 --,--,--,--,3.200000e+1,9.160000e+0 --,--,--,--,6.400000e+1,9.510000e+0 --,2.000000e+0,6.500000e+0,--,--,-- --,2.000000e+0,6.450000e+0,--,--,-- --,4.000000e+0,6.650000e+0,--,--,-- --,4.000000e+0,6.570000e+0,--,--,-- --,8.000000e+0,6.550000e+0,--,--,-- --,8.000000e+0,6.600000e+0,--,--,-- --,1.600000e+1,6.570000e+0,--,--,-- --,1.600000e+1,6.570000e+0,--,--,-- --,2.400000e+1,6.650000e+0,--,--,-- --,2.400000e+1,6.680000e+0,--,--,-- --,2.400000e+1,6.640000e+0,--,--,-- --,3.200000e+1,6.720000e+0,--,--,--

What I am trying to do is match up anything from the first half whose fifth value is equal to anything in the second halfs second value. Confused?
Imagine that the rows begining with --, --, --, -- are the first half and the rest the second. So now we have two seperate sets. Now ignore all "--". This leaves you with two sets of two columns. What I want to do is match the first in each of these sets. i.e. above the fourth row in the first half matched the first row in the second half. But then I don't want it to match the second. No value should be repeated.
I also need to maintain the order in the first half. And all unmatched values need to be printed at the end.

The desired order from above would be

2.000000e+0,4.370000e+0,2.000000e+0,6.500000e+0 4.000000e+0,5.300000e+0,4.000000e+0,6.650000e+0 8.000000e+0,6.590000e+0,8.000000e+0,6.550000e+0 1.600000e+1,7.830000e+0,1.600000e+1,6.570000e+0 2.400000e+1,8.710000e+0,2.400000e+1,6.650000e+0 3.200000e+1,9.160000e+0,3.200000e+1,6.720000e+0 1.280000e+2,9.930000e+0,--,-- 1.920000e+2,9.950000e+0,--,-- 2.560000e+2,1.013000e+1,--,-- 6.400000e+1,9.510000e+0,--,-- --,--,2.000000e+0,6.450000e+0 --,--,4.000000e+0,6.570000e+0 --,--,8.000000e+0,6.600000e+0 --,--,1.600000e+1,6.570000e+0 --,--,2.400000e+1,6.680000e+0 --,--,3.200000e+1,6.720000e+0

The code I have at the moment is the following but I am having dificulty making it work. If you would rether create your own code than work on mine please fell free. A solution is solution.

#!/usr/bin/perl -w use strict; my $file = "< SqlResults_full"; my @leftarray; my @rightarray; my @temp; my @left; my @right; my $j = 0; my $k = 0; open(DATA, $file) or die "Can\'t open " . $file . " for output : $!"; while(<DATA>){ if (/^--,.*,--,--,--$/){ chomp; my $leftline = $_; my @lefttemp = (split/,/, $leftline); my $leftcut = $lefttemp[0] . ", " . $lefttemp[1] . ", + " . $lefttemp[2]; push(@leftarray, $leftcut); } elsif (/^--,--,--,--,.*$/){ chomp; my $rightline = $_; my @righttemp = (split/,/, $rightline); my $rightcut = $righttemp[3] . ", " . $righttemp[4] . + ", " . $righttemp[5]; push(@rightarray, $rightcut); } } my $leftsize = @leftarray; print "Left side is " . $leftsize . "\n"; print "Right side is ". $rightsize . "\n"; for (my $rightcount=0;$rightcount < $rightsize;$rightcount++){ my @right = split (/,/, $rightarray[$rightcount]); for (my $leftcount=0;$leftcount < $leftsize;$leftcount++){ my @left = split (/,/, $leftarray[$leftcount]); if ($left[1] eq $right[1]){ print $leftarray[$leftcount] . ", " . $rightarray[$rightcount] +. "\n"; splice(@rightarray, $rightcount, 1); $rightcount--; $rightsize--; splice(@leftarray, $leftcount, 1); $leftcount--; $leftsize--; }#if }#while print "\n"; }#while

j o h n i r l .

Sum day soon I'Il lern how 2 spelI (nad tYpe)


In reply to Text Manipulation by johnirl

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.