in reply to Concatenating lines found between two words

  1. In a string? s/(word1)\n(word2)/$1 $2/g;
  2. In an array? Search for lines starting/ending with the combination you want and splice them up. Or just re-use the above:
    @array=<FH>; $_=join('', @array); s/(word1)\n(word2)/$1 $2/g; @array=split(/\n/, $_);
  3. In a file? See #2

Replies are listed 'Best First'.
Re: Re: Concatenating lines found between two words
by ploaiza (Initiate) on Feb 22, 2001 at 03:22 UTC
    I have a text file which I am parsing and it looks like this:
    Subject: Lab Test Log #1946 Date: Thu, 1 Jun 2000 10:56:15 -0500 (CDT) From: JUDY F <judyf@elgiloy.com> To: HAMPSHIRE - KUR <hampsc@combmet.com> FAILED HV HRD. I'LL CONT. TEST @ SHERRY'S CLAY, UNLESS I HEAR FFM. YOU. THANKS JUDY ELP - HAMPSHIRE(21) 06-01-00 + 10:54:34 JUDY F TERM # 171 LAB TEST LOG - LAB #1946 P +AGE # 1 ---------------------------------------------------------------------- +---------- Date In 05-30-00 1:00pm In Initials JF Lab Test Type Final Tag # 116014 Customer In Comments RTR 10342 COIL B ---------------------------------------------------------------------- +---------- Status Non-Conforming Date Out 06-01-00 10:52am Out Initials JF Lot Code H88231C Out Comments @.0075 T 102538 Y 39121 E 70% HRD.83 HRB (*159HV1KG)7RA B 3.48 DL .25 @ S.L.PER SUS. IGA /DOES NOT MEET WARD HV HRD. ---------------------------------------------------------------------- +---------- ** ORDERS ** ---------------------------------------------------------------------- +---------- 21 12136-1 COMBINED METALS OF CHICAGO
    I have been able to parse all the information that I want, but I need to get the lines that are between: Out Comments and ---- and I need to concatenate them into a string. In my code I have this...
    #!/bin/perl $delimiter = ","; $i=0; while(<>) { chomp; ....(parsing of other info) ... if ($_ =~ /^Lot Code/){ @lotCode[$i] = $_; @lotCode[$i]=~ s/^Lot Code(\s+)(\w+)/$2/e; $i++; } open OUTPUT, ">>data.txt"; } for ($j=0; $j < $i; $j++) { print OUTPUT "@subject[$j];@failed[$j];@monthi[$j]/@dayi[$j]/@yeari[ +$j];@routerval[$j];" . "@tag[$j];@montho[$j]/@dayo[$j]/@yearo[$j];@lotCode[$j];@comme +ntso[$j]\n"; print "@subject[$j];@failed[$j];@monthi[$j]/@dayi[$j]/@yeari[$j];@ro +uterval[$j];" . "@tag[$j];@montho[$j]/@dayo[$j]/@yearo[$j];@lotCode[$j];@comme +ntso[$j]\n"; }
    I hope these is clear enough to help me
A reply falls below the community's threshold of quality. You may see it by logging in.