모호한 .dat 파일 구문 분석에 대한 도움이 필요하십니까? 단위 변환, 라벨 추가?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />그래서 이전 엔지니어는 왼쪽 & 나는 그의 .dat 파일로 우리를 돕기 위해 작성한 그의 스크립트를보고 있습니다. 그는 데이터를 파싱하고 데이터 테이블로 포맷팅하는 사람이 있지만 좀 더 사용자 친화적 인 작업이 필요하다고 생각합니다.
.dat 파일은 모호한 양의 측정 값이있는 탭으로 구분 된 데이터 세트입니다. .dat의 각 측정에 대한 양과 레이블이 제품마다 다릅니다. 한 세트의 파일처럼 S1에서 S5까지, 다른 파일에서는 S11에서 S26까지 등이 있습니다. 기본적으로 라벨과 라벨의 양은 각 데이터 세트마다 변경됩니다. 이전 스크립트가이 모든 것을 설명하는 것처럼 보입니다.
마지막으로 단위를 조정하고 단위를 변환하고 열 레이블에 "label (mm)"을 추가하는 방법은 무엇입니까? 전류 측정 값은 모두 mils (1/1000 인치)입니다.
권하다? 나는 .jsl에 익숙하지 않고이 모든 것을 파악하려고 노력하고 있습니다.
도움이된다면 흰 씻어 진 사본을 첨부했습니다.

다시 : 모호한 .dat 파일 구문 분석 승 / 도와 주시겠습니까? 단위 변환, 라벨 추가?먼저 코드를 반복해서는 안됩니다. 여러 번 여러 번 해보려한다면 이것은 함수를 만드는 좋은 신호입니다. 나는 Max와 함께 당신을 도울 이안의 코드 조각을 포함시켰다.
나는 게시하기 전에 이것을 디버깅하지는 않았지만 이것은 잘 작동 할 것이다.
// 열 변환 함수 만들기
convertColumns = 기능 ({ PEMdata_all , 편지 , 단위 , 변환 } ,
// "X"열 찾기
S_columns = {} ;
V = {} ;
...에 대한 ( 나는 = 1 , 나는 <= ncols ( PEMdata_all ) , 나는 ++,
colname = 기둥 ( PEMdata_all , 나는 ) << 이름 가져 오기 ;
만약 ( ! 누락 ( 정규식 ( colname , 편지 || ". *" )) ,
에 집어 넣다 ( S_columns , colname ) ;
V = V || colname << 가치를 얻으십시오 ;
) ) ;
// VMax 열 추가
vMax = 바꾸어 놓다 ( VMax ( 바꾸어 놓다 ( V )))) ;
PEMdata_all << 새 열 ( 편지 || "맥스" , 숫자 , 마디 없는 , 가치 ( vMax )) ;
에 집어 넣다 ( S_columns , 편지 || "맥스" ) ; // 최대 열을 추가하여 변환도합니다.
// 전환 당 새로운 열 만들기
...에 대한 ( 나는 = 1 , 나는 <= 니 넴스 ( S_columns ) , 나는 ++,
뉴 콜 = PEMdata_all << 새 열 ( S_columns [ 나는 ] || "(" || 단위 || ")" , 숫자 , 마디 없는 ,
공식 ( 기둥 ( PEMdata_all , S_columns [ 나는 ]) [] * 변환 )) ;
// 이전 mils 열을 선택적으로 삭제합니다.
뉴 콜 << 수식 삭제 ;
PEMdata_all << 열 삭제 ( 기둥 ( PEMdata_all , S_columns [ 나는 ]) ) ;
) ;
) ;
// 관심있는 열을 통해 실행
편지 = { "에스" , "CY" } ;
단위 = "인치" ;
변환 = 1000 ;
에 대한 ( 나는 = 1 , 나는 <= 니 넴스 ( 편지 ) , 나는 ++,
convertColumns ( PEMdata_all , 편지 [ 나는 ] , 단위 , 변환 ) ;
) ;
다시 : 모호한 .dat 파일 구문 분석 승 / 도와 주시겠습니까? 단위 변환, 라벨 추가?다음은 몇 가지 아이디어를 제공하는 예입니다.
NamesDefaultToHere ( 1 ) ;
// 10 개의 열이있는 테이블 만들기
V = 일본 ( 100 , 10 , 임의의 정규화 ()) ;
dt = AsTable ( V ) ;
// 단지 4, 5, 6 열의 최대 값을 포함하는 dt에 새로운 열을 만든다.
V = : Col4 << getValues ;
V = V || ( : Col5 << getValues ) ;
V = V || ( : Col6 << getValues ) ;
vMax = 바꾸어 놓다 ( VMax ( 바꾸어 놓다 ( V )))) ;
dt << NewColumn ( "최대 3, 4 및 5" , 숫자 , 마디 없는 , 가치 ( vMax )) ;
다시 : 모호한 .dat 파일 구문 분석 승 / 도와 주시겠습니까? 단위 변환, 라벨 추가?감사합니다 msharp,
그렇습니다, 모든 S가 함께가요, CY 's, T 's, CFW 's 등등. 방금 각 유형에 대한 구조가 반복되었습니다. 아마도 가장 우아하지는 않지만 작동합니다.
각 그룹의 최대 값을 계산하는 열을 추가하는 방법에 대한 팁은 무엇입니까? 각 행에 대한 CY의 최대 값에 대한 새 열과 마찬가지로?
거기에서 열 1 (CY, T, S, CFW)에 측정 값을 표시 한 다음 요약, USL 및 CPK를 표시하는 새 요약 창을 표시하도록 프로그래밍 할 수 있습니다.
어떤 팁?
다시 : 모호한 .dat 파일 구문 분석 승 / 도와 주시겠습니까? 단위 변환, 라벨 추가?위의 빨간색 텍스트에서 S 열만 원했습니다. 그건 내 부분에 대한 오해 였어.
옵션 : 동일한 전환을 원할 경우 첫 번째 네 개의 라벨 열 뒤의 모든 열을 간단하게 실행할 수 있습니다.
conv_columns = {} ;
...에 대한 ( 나는 = 5 , 나는 <= ncols ( PEMdata_all ) , 나는 ++,
colname = column (PEMdata_all, i) << 이름 가져 오기;
에 집어 넣다 (전환 수 _columns , colname )
) ;
또는 정규식을 변경할 수 있습니다.
"CY. *"모든 C 열의 관심 대상이 실제로 CY로 시작한다고 가정하는 것처럼 보입니다.
"\ w + \ d \ d"적어도 하나 이상의 단어 문자 뒤에 적어도 두 개의 숫자 문자가 뒤따라야합니다. 이것은 예를 들어 'CY22'와 'S12'와 일치하지만 'Carrier'가 아닙니다.
너무 자세히 설명하지는 않지만 문자열을 파싱하는 방법은 다양합니다. 정규 표현식은 많은 책을 채울 수있는 주제입니다. 즉, 기본 사항을 빨리 익히고 YouTube 비디오를 보거나 JSL 스크립팅 가이드의 Regex 섹션을 읽는 데 1 시간 정도 걸리면 코딩의 양을 계획 할 때 시간이 걸릴 것이라고합니다. 정규 표현식은 많은 프로그래밍 언어에서 사용되므로 지식은 전송 가능합니다.
다시 : 모호한 .dat 파일 구문 분석 승 / 도와 주시겠습니까? 단위 변환, 라벨 추가?굉장해! 이것은 내가 찾고있는 것과 정확히 일치합니다. 나는 "C"컬럼을 변환하기 위해 반복 된 섹션을 추가했다. 건배!!
그러나 남은 유일한 문제는 다른 '이름'열 (Carrier #) 중 하나를 선택하는 것입니다. 스크립트 라인은 "C. *"를 검색하지만 "이동 통신사 #"는 제외 할 수 있습니까?
다시 : 모호한 .dat 파일 구문 분석 승 / 도와 주시겠습니까? 단위 변환, 라벨 추가?이전 직장 동료의 코드가 좋았지 만 댓글이 잘 못되었습니다. 그것을 알아 내려고 노력하는 시간을 낭비하는 대신, 방금 찾은 기능을 추가했습니다. 끝 부분에 아래 코드를 붙이십시오.
기능 프로그래밍을 별도로 유지하는 것이 항상 최선이므로 더 나은 프로그래밍 방법입니다. 구문 분석 할 코드 하나, 변환 할 코드 하나. 코드를 깨끗하고, 디버그하고, 리팩터링하고, 읽기 쉽도록합니다.
이 코드 (1)는 "S"로 시작하는 모든 열을 찾습니다.
(2) 이전 열을 인치로 변환하고 "(인치)"레이블을 붙이는 새 열을 추가합니다 (쉽게 (mm)로 변환 할 수 있음).
(3) mils 열을 삭제합니다. 유지하려는 경우 마지막 두 줄만 제거하면됩니다.
// 추가 된 부분
// S 열 찾기
S_columns = {} ;
...에 대한 ( 나는 = 1 , 나는 <= ncols ( PEMdata_all ) , 나는 ++,
colname = 기둥 ( PEMdata_all , 나는 ) << 이름 가져 오기 ;
만약 ( ! 누락 ( 정규식 ( colname , "에스.*" )) ,
에 집어 넣다 ( S_columns , colname )
)
) ;
// 전환 당 새로운 열 만들기
...에 대한 ( 나는 = 1 , 나는 <= 니 넴스 ( S_columns ) , 나는 ++,
뉴 콜 = PEMdata_all << 새 열 ( S_columns [ 나는 ] || "(인치)" , 숫자 , 마디 없는 ,
공식 ( 기둥 ( PEMdata_all , S_columns [ 나는 ]) [] * 1000 ));
// 이전 mils 열을 선택적으로 삭제합니다.
뉴 콜 << 수식 삭제 ;
PEMdata_all << 열 삭제 ( 기둥 ( PEMdata_all , S_columns [ 나는 ]) ) ;
) ;