이 추가 기능은 Data Interchange Format 또는 DIF 파일에서 JMP 데이터 테이블을 생성합니다. 그만큼 파일 형식 스프레드시트 프로그램 간에 데이터를 전송하는 메커니즘으로 1980년 Visicalc에서 시작되었습니다.
예제 코드에서는 한 번에 하나만 활성화된 필수 헤더를 확인하는 4가지 메커니즘을 제공합니다.
에 대한 추가 정보는 정규식 보다 @Craige_Hales ' 블로그 게시물 및 Pat Match 옵션에 대한 통찰력은 다음을 참조하십시오. JSL 요리책 .
기본적으로 오류 검사를 위해 옵션 2: Pat Match를 구현했습니다.
필수 헤더 항목:
- 제목
- 벡터
- 튜플
- 데이터
헤더 형식, 즉 헤더 속성의 구조
<< 속성 이름 >>
<< 벡터 번호 >> , << 숫자 값 >>
<< "문자열 값" >>
어디에, |
<< Attribute_Name >>은 (보통) 32자 이하의 기호/토큰입니다.
<< 벡터 번호 >> 전체 파일인 경우 0
<< 숫자 값 >>은 달리 지정하지 않는 한 0입니다.
<< "문자열 값" >>은 \!"\!"입니다. (공백 없이 큰따옴표) 사용하지 않는 경우
선택적 헤더 항목: 추가 기능을 개발하는 동안 이러한 선택적 헤더는 테스트되지 않았습니다.
- 논평
- 상표
- 크기
- Truelength
- 단위
- 표시 단위
데이터:
<< 데이터 유형 표시기 >>, << 숫자 값 >>
<< "문자열 값" >>
어디에,
<< Data Type Indicator >>는 -1, 0, 1의 세 가지 값 중 하나입니다.
-1 --특수 데이터 값입니다.
<< "문자열 값" >> = BOT 또는 EOD
0 --숫자 부호 있는 10진수
<< 숫자 값 >> = 숫자 데이터입니다.
<< "문자열 값" >> = 값 표시기 중 하나입니다(V, NA, ERROR, TRUE, FALSE).
1 --문자열 데이터 값
<< 숫자값 >> = 0
<< "문자열 값" >> = 문자열 데이터 값
errorhdrchkExpr = Expr(
regex_hdrs = "(TABLE|VECTORS|TUPLES|DATA)";
matrix_hdrs = { "TABLE", "VECTORS", "TUPLES", "DATA" };
rqd_hdrs = { TABLE, VECTORS, TUPLES, DATA };
// Option 1: Find match using Regex with check for required headers
thematch = Regex( lines, regex_hdrs );
If( IsMissing(thematch),
errnum_desc = "Error: A required header is missing";
errhdrnum = 0;
Break();
,
errhdrnum = 1
);
// Option 2: Find specific match using Pat Match with check for required headers
err_List = {};
For( e = 1, e <= Nitems( matrix_hdrs ), e++,
thematch = patMatch( txtfile, matrix_hdrs[e] );
If( thematch == 0,
errnum_desc = Concat("Error ", char( e ), ": ", "A required header ", matrix_hdrs[e], " is missing.");
Insert Into( err_List, errnum_desc);
errhdrnum = 0;
Break();
,
errhdrnum = 1
)
);
// Option 3: Find specific match using LOC with check for required headers
err_List = {};
For ( e = 1, e <= Nitems( rqd_hdrs ), e++,
If( Loc( {lines}, rqd_hdrs[e] ) != [1],
errnum_desc = Concat("Error ", char( e ), ": ", "A required header ", rqd_hdrs[e], " is missing");
Insert Into( err_List, errnum_desc);
errhdrnum = 0;
Break();
,
errhdrnum = 1
)
);
// Option 4: Find specific match using Contains with check for required headers
err_List = {};
For ( e = 1, e <= Nitems( rqd_hdrs ), e++,
If( Contains( txtfile, rqd_hdrs[e] ) == 0,
errnum_desc = Concat("Error ", char( e ), ": ", "A required header ", rqd_hdrs[e], " is missing");
Insert Into( err_List, errnum_desc);
errhdrnum = 0;
Break();
,
errhdrnum = 1
)
);
);
샘플.DIF 파일은 추가 기능의 개발 및 테스트에 사용되었습니다.
sample.dif 파일의 내용은 포함된 필수 헤더와 함께 첨부된 이미지에 표시됩니다.
File Contents of sample.difFile Contents of sample.difsample.dif의 파일 내용
추가 기능은 커뮤니티 게시물에서 영감을 받았습니다. @JensRiege 그가 방법을 물었을 때 JMP Script에서 .dif 파일 형식 가져오기 .
질문이나 의견을 환영합니다.
건배,
스탠
별 6개! (5개 중)
일부 레거시 소프트웨어 시스템이 있기 때문에 이 오래된 파일 형식을 매일 사용합니다.
매우 잘 작동했습니다!
고맙습니다 !!!
-젠스