테이블 전체에서 스크립트 찾기 및 바꾸기<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />유럽에 있는 동료가 만든 여러 개의 대규모 데이터 테이블(100,000개 이상의 레코드)이 있습니다.
테이블이 생성될 때 EU 번호 지정 형식이 사용되었습니다. 즉, ","는 소수점입니다.
","를 "."으로 바꾸려면 테이블 전체를 대체해야 합니다. 테이블이 기존 스크립트와 작동하도록 하기 위해.
get 열 이름() 문을 사용하여 열 이름을 가져올 수 있지만 대체(...) 또는 대체 into(...) 문을 사용하여 대량 교체를 수행하는 방법을 알 수 없습니다.
데이비드
Re: 스크립트에서 테이블 전체 찾기 및 바꾸기안녕 데이비드,
나는 동일하지만 반대의 문제를 겪었습니다. 포인트를 쉼표로 대체하는 것입니다. 구분 기호 일련의 프로세스 로그 파일에 있습니다.
이 문제를 해결하는 가장 쉬운 방법은 각 jmp 파일을 텍스트 파일로 저장한 다음 JMP: s "best 추측" 옵션을 사용하여 가져오는 것이었습니다.
원래 구분 기호를 시스템에서 예상하는 구분 기호로 대체하고(제 경우에는 “.”가 “,”로 대체됨) 열을 범주형에서 연속형으로 재분류했습니다. 하나를 수동으로 수행하고 나머지를 처리하는 스크립트에 소스를 사용했습니다.
Re: 스크립트에서 테이블 전체 찾기 및 바꾸기흥미로운 토론.나는 몇 가지 코드를 가지고 놀았고 49 65394개 열의 전역 열 이름 변경에 대한 초입니다.Lenovo T420 PC, Windows 7 64비트, JMP 64비트, 4GB RAM.
dt = 열려 있는 ( "$sample_data\Probe.jmp" ) ;
// 열 수를 65000으로 확장합니다.
// 경고에는 약 10분이 소요됩니다!
~을 위한 ( 나 = 1 , 나 <= 65000 , 나 ++,
dt << 새 열 ( "XYZ" || 숯 ( 나 ) , 숫자 , 마디 없는 ) ;
) ;
시작_dt = 오늘 () ;
col_name_list = dt << 열 이름 가져오기 ( 끈 ) ;
체크 안함 = ncols ( dt ) ;
을 위한 ( 나 = 1 , 나 <= 체크 안함 , 나 ++,
one_col_name = col_name_list [ 나 ] ;
// 문제의 문자열이 포함된 경우에만 열 이름을 바꿉니다.
만약에 ( 포함 ( one_col_name , "엑스" ) ,
열 ( 나 ) << 이름 설정 ( 대리자 ( one_col_name , "엑스" , "디" )) ;
) ;
) ;
end_dt = 오늘 () ;
인쇄 ( 숯 ( end_dt - 시작_dt ) || "에 대한 초 || 숯 ( 체크 안함 ) || " 열" ) ;
Re: 스크립트에서 테이블 전체 찾기 및 바꾸기아래 접근 방식을 사용하여 검색 대화 상자를 호출하려고 했지만 안정적으로 작동하지 않습니다. 스크립트로 설정을 편집하면 대화 상자가 끊어지는 것 같습니다. 하지만 누군가가 코드를 개선할 방법을 찾을 수도 있습니다.
이 비정상적으로 넓은 파일이 JMP 외부에서 가져온 경우 JSL에서 트리거될 수 있는 Perl 또는 VBA 스크립트(플랫폼에 따라 다름)를 사용하여 가져오기 전에 열 이름을 편집하는 것이 더 효율적일 수 있습니다.
dt = 현재 데이터 테이블 () ;
오래된 = "씨" ;
새로운 = "큐" ;
dt << 창을 앞으로 가져오기 ;
// 검색 대화 상자를 호출하고 설정을 편집합니다.
메인 메뉴 ( "찾다" ) ;
승 = 창문 ( "검색 대화 상자" ) ;
승 [ 텍스트 편집 상자 ( 1 )] << 텍스트 설정 ( 오래된 ) ;
승 [ 텍스트 편집 상자 ( 2 )] << 텍스트 설정 ( 새로운 ) ;
만약에 ( 승 [ 확인란 상자 ( 2 )] << 얻다 , 승 [ 확인란 상자 ( 2 )] << 세트 ( 1 )) ;
만약에 ( 승 [ 확인란 상자 ( 6 )] << 얻다 , 승 [ 확인란 상자 ( 6 )] << 세트 ( 1 )) ;
만약에 (( 승 [ 확인란 상자 ( 7 )] << 얻다 ) == 0 , 승 [ 확인란 상자 ( 7 )] << 세트 ( 1 )) ;
승 [ 버튼박스 ( 삼 )] << 딸깍 하는 소리 ;
//주 메뉴( "모두 바꾸기" );
Re: 스크립트에서 테이블 전체 찾기 및 바꾸기어쩌면 나는 "열 이름 가져오기"에 대한 그의 의견을 바탕으로 David가 요청한 내용을 혼동했을 수도 있습니다.나는 그가 열 이름(실제 행 데이터가 아님)을 변경하고 싶어한다는 인상을 받았습니다.어쨌든 그것이 내가 하려고 하는 일이다.여러 열의 이름을 변경하고 싶습니다(예: 모든 열 이름에서 "labdata" 제거).이것이 바로 위의 스크립트가 수행할 작업입니다.JSL에서는 85,000개 열에 ~19초가 걸립니다."검색 대화 상자"는 1초도 채 걸리지 않습니다.
수행 방법에 대한 아이디어 저것 For 루프(또는 매우 효율적인 루프)가 없나요?
감사해요,
제이크
Re: 스크립트에서 테이블 전체 찾기 및 바꾸기MacBook Pro에서 JMP 11을 사용하면 "5800행에 2초"가 표시됩니다. 즉, 오늘( ) 대신 HP 시간( )을 사용하면 1.753558초가 됩니다.
위에서 주장한 것과 달리 여기에서는 내장된 찾기 및 바꾸기 기능이 훨씬 느립니다. 아래 코드는 완료하는 데 16.27초가 걸립니다. 코드에서는 검색 대화 상자가 이전 수동 검색에 의해 "준비"되었다고 가정합니다.
dt = 열려 있는 ( "$Sample_Data\Probe.jmp" ) ;
시작_dt = HP 시간 () ;
메인 메뉴 ( "모두 다 바꿔" ) ;
end_dt = HP 시간 () ;
인쇄 ( 숯 (( end_dt - 시작_dt ) / 1e6 ) || "에 대한 초 || 숯 ( nr ) || "행" ) ;
Re: 스크립트에서 테이블 전체 찾기 및 바꾸기다음은 샘플 데이터 세트의 큰 테이블이 포함된 예입니다.5800개의 행만 있고 8초가 걸립니다.Lenovo T420의 JMP 11 64비트.다양한 접근 방식을 비교하는 것도 흥미로울 것입니다.
dt = 열려 있는 ( "$Sample_Data\Probe.jmp" ) ;
col_names = dt << 열 이름 가져오기 ( 숫자 , 끈 ) ;
~을 위한 ( 나 = 1 , 나 <= 항목 ( col_names ) , 나 ++,
열 ( dt , col_names [ 나 ]) << 데이터 형식 ( 성격 ) ;
) ;
시작_dt = 오늘 () ;
nr = 으르렁거리다 ( dt ) ;
col_names = dt << 열 이름 가져오기 ( 끈 ) ;
~을 위한 ( 나 = 1 , 나 <= 항목 ( col_names ) , 나 ++,
one_col = 열 ( dt , col_names [ 나 ]) ;
~을 위한 ( 케이 = 1 , 케이 <= nr , 케이 ++,
one_col [ 케이 ] = 대리자 ( one_col [ 케이 ] , "." , "," ) ; // 소수점을 쉼표로 대체
) ;
) ;
end_dt = 오늘 () ;
인쇄 ( 숯 ( end_dt - 시작_dt ) || "에 대한 초 || 숯 ( nr ) || "행" ) ;
Re: 스크립트에서 테이블 전체 찾기 및 바꾸기안녕 데이비드,
**이 모든 내용을 입력한 후에 원래 질문이 오래 전에 게시되었다는 것을 깨달았습니다.그러나 누구든지 도움을 줄 수 있다면 "더 효율적인" 질문은 여전히 남아 있습니다. **
나는 이와 같은 것을 알아 내려고 노력하고 있습니다.한 가지 해결책은 For 루프를 사용하고 각 열을 개별적으로 처리하는 것입니다. 그러나 데이터 세트에 따라 상당한 시간이 걸릴 수 있습니다.참조용으로 예제 코드가 아래에 나열되어 있습니다.
dt = 현재 데이터 테이블();
을 위한( i=1,i<=ncol(dt),i++,
콜네임 = Column(i) << 이름 가져오기;
뉴콜이름 = munger(colname,1,"replacestring",""); // "대체" 명령을 사용하여 비슷한 작업을 수행할 수 있습니다.
컬럼(i) << Set Name(newcolname);
);
For 루프보다 이 문제를 처리하는 더 효율적인 방법을 아는 사람이 있나요?예를 들어, 표준 "찾기 및 바꾸기" 대화 상자를 사용하는 경우 이는 매우 빠르게 실행됩니다.그러나 ~65,000개의 열에서 For 루프 접근 방식은 상당한 시간이 걸립니다.
감사해요,
제이크