Hena has asked for the wisdom of the Perl Monks concerning the following question:
*FIELD* RF 1. Grier, R. E.; Farrington, F. H.; Kendig, R.; Mamunes, P.: Autosomal dominant inheritance of the Aarskog syndrome. Am. J. Med. Genet. 15: 39-46, 1983. 2. Teebi, A. S.; Rucquoi, J. K.; Meyn, M. S.: Aarskog syndrome: report of a family with review and discussion of nosology. Am. J. Med. Genet. 46: 501-509, 1993. 3. Welch, J. P.: Elucidation of a 'new' pleiotropic connective tissue disorder. Birth Defects Orig. Art. Ser. X(10): 138-146, 1974. *FIELD* CSFrom that I'm trying to convert to this
My script isAm. J. Med. Genet.[JO] AND 1983[DP] AND 15[VI] AND 39[PG] Birth Defects Orig Artic Ser.[JO] AND 1974[DP] AND 10[VI] 138[PG] Am. J. Med. Genet.[JO] AND 1993[DP] AND 46[VI] AND 501[PG]
#!/usr/bin/perl # # parse the pubmed links to searchable format # use warnings; use strict; use File::Basename; sub parse_pub ($) { my $string = shift @_; local $_; if ($string =~ m/^.+?:.+?\. (.+)+$/) { $_ = $1; if (m/(.+?) (\d+): (\d+)-\d+, (\d+)./) { return "${1}[JO] AND ${4}[DP] AND ${2}[VI] AND ${3}[PG]"; } else { return undef; } } return; } my $omimf = shift @ARGV || "-"; open (INF,"$omimf") or die "Unable to open '$omimf': $!"; my $within = 0; # within field area my $key = ""; # current type my $i = 1; # line number my $space = 0; # was last line space my $extra = ""; # entries are in multiple lines while (<INF>) { chomp; s/\r$//; !m/\*FIELD\* RF/ && !$within && next; if (m/\*FIELD\*/ && $within) { $within = 0; exit; } elsif (m/\*FIELD\* RF/) { $within = 1; } else { if (!$_) { $space = 1; } else { $space = 0; } if ($space) { chop ($extra); if ($extra =~ m/^.+?:.+?\. (.+)+$/) { $extra = $1; # print "$string,$1\n"; if ($extra =~ m/(.+?) (\d+): (\d+)-\d+, (\d+)./) { print "${1}[JO] AND ${4}[DP] AND ${2}[VI] AND ${3}[PG]\n"; } else { # return undef; } } # if ($key = parse_pub($extra)) { # # print "$key\n"; # } else { # print "$extra\n"; # } } else { $extra .= "$_ "; } } # main else } exit;
should beif (m/\*FIELD\*/ && $within) { $within = 0; }
if (m/\*FIELD\*/ && $within) { $within = 0; $extra = ""; }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Regex, loops and subs
by tirwhan (Abbot) on Nov 15, 2005 at 10:28 UTC | |
by Hena (Friar) on Nov 15, 2005 at 11:15 UTC | |
by tirwhan (Abbot) on Nov 15, 2005 at 11:33 UTC | |
|
Re: Regex, loops and subs
by GrandFather (Saint) on Nov 15, 2005 at 10:28 UTC | |
by Hena (Friar) on Nov 15, 2005 at 11:13 UTC | |
|
Re: Regex, loops and subs
by GrandFather (Saint) on Nov 15, 2005 at 11:51 UTC | |
|
Re: Regex, loops and subs
by Tanktalus (Canon) on Nov 15, 2005 at 16:33 UTC |