.adi ADIF parser 하고자 합니다. 정규식으로 어떻게 해야 할까요?
본문
안녕하세요.
.adi ADIF 형식의 파일을 읽어들여서 parser 하고자 합니다.
api 오픈소스 찾아 봤지만 잘 안되어서 올려봅니다.
test.adi 파일이 있다면 내용이 아래처럼 나옵니다.
<QSO_DATE:8>20220109<STATION_CALLSIGN:6>TEST11<OPERATOR:6>TEST11<TIME_ON:4>2228<CALL:6>TEST22<MODE:3>INT<FREQ:5>45029<COMMENT:9>테스트<EOR>
<QSO_DATE:8>20220109<STATION_CALLSIGN:6>TEST11<OPERATOR:6>TEST11<TIME_ON:4>2305<CALL:6>TEST22<MODE:3>INT<FREQ:5>45030<EOR>
... (계속된 데이터)
위와 같이 파일 내용이 쭉 들어가 있으면
<QSO_DATE:8> 시작 <EOR> 끝이고 이게 1줄 row 입니다.
<QSO_DATE:8>20220109 을 보면 QSO_DATE 변수에 :8 8자리 20220109 데이터가 됩니다.
이걸 정규식 등을 이용 parser 해서 DB에 데이터만 저장하고자 합니다.
즉 파일읽어들임
파일 내용 전체 변수 예로 $adidata 에 저장하고
1줄 1줄 읽어들여서 전체를 다 DB로 저장하고자 합니다.
즉 한줄 정규식 등으로 파싱해서 DB저장 반복 하고자 합니다.
위 데이터 전체를 돌면서, 정규식 파싱하는 방법 어떻게 하면 좋을까요?
정규식이나 sscanf 등으로도 가능할까요?
$adifdata=$datafile;
while (전체 row 만큼) {
내용 parser
db저장
}
귀한 답변 부탁드립니다.
답변 4
<QSO_DATE:8>20220109<STATION_CALLSIGN:6>
여기서 그냥 날짜만 뽑는 거라면
그냥 substring() 하시는 것이 편할 듯합니다.
<QSO_DATE:8>12345678
:8
이것이 데이터(값)길이군요.
substr()로 자르고, 숫자 추출해서 다음(값)부분 자르고 하면 금방되겠네요.
https://github.com/magicbug/phpadifparser
여기 class에서 다음을 수정하세요.
while($len > 0)
{
$value = $value.$record[$a];
$len--;
$a++;
}$a--; /* $a--; 이것을 추가하세요. */