간단한 작업을 수행하기 위해 CSV 파일을 구문 분석하려고합니다. 성, ID 및 생일을 추출하고 생일 형식을 m/d/yyyy yyyymmdd.perl6 문법 작업 클래스 메서드가 상속되지 않은 것으로 보입니다. 캡처 된 것으로 보입니다.
(1) 생일에 이름이 지정된 캡처를 사용했지만 이름이 지정된 캡처 방법이 내가 원하는 것을 만들기 위해 호출되지 않은 것으로 보입니다.
(2) 상속 된 문법 조치 메소드가 명명 된 캡처에 작동하지 않는 것 같습니다.
내가 뭘 잘못 했니?
my $x = "1,,100,S113*L0,35439*01,John,JOE,,,03-10-1984,47 ELL ST #6,SAN FRANCISCO,CA,94112,415-000-0000,,5720,Foo Bar,06-01-2016,06-01-2016,Blue Cross,L,0,0";
# comma separated lines
grammar insurCommon {
regex aField { <-[,]>*? }
regex theRest { .* }
}
grammar insurFile is insurCommon {
regex TOP { <aField> \,\, # item number
<aField> \, # line of business
<aField> \, # group number
<ptID=aField> \, # insurance ID,
<ptLastName=aField> \, # last name,
<aField> \,\,\, # first name
<ptDOB=aField> \, # birthday
<theRest> }
}
# change birthday format from 1/2/3456 to 34560102
sub frontPad($withWhat, $supposedStrLength, $strToPad) {
my $theStrLength = $strToPad.chars;
if $theStrLength >= $supposedStrLength { $strToPad; }
else { $withWhat x ($supposedStrLength - $theStrLength) ~ $strToPad; }
}
class dateAct {
method reformatDOB($aDOB) {
$aDOB.Str.split(/\D/).map(frontPad("0", 2, $_)).rotate(-1).join;
}
}
class insurFileAct is dateAct {
method TOP($anInsurLine) {
my $insurID = $anInsurLine<ptID>.Str;
my $lastName = $anInsurLine<ptLastName>.Str;
my $theDOB = $anInsurLine<ptDOB>.made; # this is not made;
$anInsurLine.make("not yet made"); # not yet getting $theDOB to work
}
method ptDOB($DOB) { # ?ptDOB method is not called by named capture?
my $newDOB = reformatDOB($DOB); # why is method not inherited
$DOB.make($newDOB);
}
}
my $insurAct = insurFileAct.new;
my $m = insurFile.parse($x, actions => $insurAct);
say $m.made;
그리고 출력은 다음과 같습니다
===SORRY!=== Error while compiling /home/test.pl
Undeclared routine:
reformatDOB used at line 41
는 당신의 도움을 주셔서 감사합니다!
고맙습니다, 크리스토프. 나는 그것이 단순해야만한다는 것을 안다. 흔히 발견하기 어려운 아주 작은 것들입니다! 감사. – lisprogtor