in reply to Clean data - where field contains a CRLF
The following works for the sample data you have given. Note the hard wired field count and that the code will die if something bad happens.
use strict; use warnings; use constant FIELDS => 26; my $line = ''; while (<DATA>) { s/\r//g; chomp; $line .= $_; my $fields = $line=~ tr/|//; next if FIELDS > $fields; die "Field count too great in line $." if FIELDS < $fields; my @fields = split /\|/, $line; $line = ''; print join ' ', @fields, "\n\n"; } __DATA__ EN|486822|||KKJSKA|L|L00219796|STR, JASON A|JASON|A|STR|||||3710 |NORT +H CANTON|OH|44720|||000|0003053964|I||| EN|486823|||YYYYYY|L|L00738657|OCID, SEAN M|SEAN|M|OCID|||||3846 Foxta +il Lane |CINCINNATI|OH|45248|||000|0009544289|I||| EN|486824|||KXXXXP|L||DSBS, ANDREW J|ANDREW|J|DSBS|||||28835 STILXXXXX +X|FARXXXXX HILLS|MI|48334|||000||I|||
Prints:
EN 486822 KKJSKA L L00219796 STR, JASON A JASON A STR 3710 NORT +H CANTON OH 44720 000 0003053964 I EN 486823 YYYYYY L L00738657 OCID, SEAN M SEAN M OCID 3846 Foxta +il Lane CINCINNATI OH 45248 000 0009544289 I EN 486824 KXXXXP L DSBS, ANDREW J ANDREW J DSBS 28835 STILXXXXX +X FARXXXXX HILLS MI 48334 000 I
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Clean data - where field contains a CRLF
by graff (Chancellor) on Aug 21, 2006 at 01:08 UTC | |
by GrandFather (Saint) on Aug 21, 2006 at 02:37 UTC |