The following code uses a regex to extract the various fields to an array:
use strict; use warnings; while (<DATA>) { chomp; next unless length; my @items = / SS\s+ (\S+)\s+ # SS field PL\s+ (.*?) # PL field - may have trailing white space PV (.*?) # PV field - includes white space C[LT] (.*?) # CL field - includes white space RL (.*?) # RL field - includes white space SA\s+ (\S+)\s+ # SA field DS\s+ (\S+) # DS field /xi; # Allow comments and white space in regex. Ign +ore case if (@items != 7) { # Warn then skip badly formed lines warn "Unrecognised line format: $_\n"; next; } # Do stuff with the extracted fields print '>', join ('<, >', @items), "<\n"; } __DATA__ SS 21 PL 2#3 PV 51.3 CL #110 +0 RL 126' SA 106 DS 93 SS 21 PL 2#3 PVa51.3 CT^ 110 +0 RL126, SA 106 DS 93 SS 21 PL 2#3 PV 51.3 CL #110 +0 RL 126' SA 106 DS 93
Prints:
>21<, >2#3 <, > 51.3 <, > #110 +0 <, > 126' <, >106<, >93< >21<, >2#3 <, >a51.3 <, >^ 110 +0 <, >126, <, >106<, >93< >21<, >2#3 <, > 51.3 <, > #110 +0 <, > 126' <, >106<, >93<
In reply to Re: Parsing a Variable Format String
by GrandFather
in thread Parsing a Variable Format String
by ozboomer
For: | Use: | ||
& | & | ||
< | < | ||
> | > | ||
[ | [ | ||
] | ] |