On 24 May 2017 at 15:20, ToddAndMargo <[email protected]> wrote:
>
>
> This is what I came up with. I found that `next` did not serve me
> well, so i just used a tag.
>
> Thank you all for the help. I had a bit of a time wrapping
> my head around `next` there for a while.
>
> -T
>
> <code>
> #!/usr/bin/env perl6
>
> use strict;
>
> my @Data = '<TASK type="D">Mission D',
> ' <NAME type="P">Sol Wheat</NAME>',
> ' <NAME type="P">Ted Moon</NAME>',
> '</TASK>';
> # for @Data -> $Line { say "$Line"; }
>
> my $TaskTag = 0;
> for @Data -> $Line {
> if $Line.contains( "TASK type" ) { $TaskTag = 1; }
>
> if $Line.contains( "NAME type" ) {
> ( my $Name = $Line) ~~ s/.*?\>//;
> $Name ~~ s/\<.*//;
> say $Name;
> } else { $TaskTag = 0; }
>
> }
> </code>
>
I'm a rank beginner p6 programmer so I'm sure my code can be improved.
However, your code does not look like it will do what you want if you have
multiple TASKs
What about something like:
my @Data =
'<TASK type="D">Mission D',
' <NAME type="P">Sol Wheat</NAME>',
' <NAME type="P">Ted Moon</NAME>',
'</TASK>',
'<TASK type="C">Mission C',
' <NAME type="P">Jim Kirk</NAME>',
' <NAME type="P">Mr Spock</NAME>',
'</TASK>',
;
my $in-TASK = "";
for @Data -> $Line {
if $Line.contains( "TASK type" ) {
$Line ~~ m/ 'TASK' .*? '>' $<Task>=( .* ) /;
$in-TASK = $<Task>;
next;
}
if $Line.contains( "/TASK" ) {
$in-TASK = "";
next;
}
if $in-TASK ne "" && $Line.contains( "NAME type" ) {
$Line ~~ m/ 'NAME' .*? '>' $<Name>=( .*? ) '<' /;
say $in-TASK, $<Name>;
}
}
--
Norman Gaywood, Computer Systems Officer
School of Science and Technology
University of New England
Armidale NSW 2351, Australia
[email protected] http://turing.une.edu.au/~ngaywood
Phone: +61 (0)2 6773 2412 Mobile: +61 (0)4 7862 0062
Please avoid sending me Word or Power Point attachments.
See http://www.gnu.org/philosophy/no-word-attachments.html