in reply to Parsing a Variable Format String

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<

Perl is environmentally friendly - it saves trees