이러한 위시리스트 요청을 하게 된 계기는 무엇이었나요?
항상 데이터 테이블을 "정리"하기 위해 다소 복잡한 스크립트를 작성합니다(테이블 스크립트, 테이블 변수, 열 속성 제거 등).
어떤 개선을 원하시나요?
데이터 테이블을 정리하기 위한 간편한 플랫폼을 제공합니다. 이를 통해 테이블 스크립트, 테이블 변수, 열 속성, 행 상태 및 모든 다른 수정 사항을 제거할 수 있는 옵션이 제공됩니다. 최상의 경우 사용자가 제거할 항목을 결정할 수 있습니다. 이 중 일부는 Subset에 구현할 수 있지만 이것도 별도의 플랫폼이어야 한다고 생각합니다.
왜 이 아이디어가 중요한가요?
관련 없는 정보를 이어받지 않고 기존 데이터 표를 이용해 새 데이터 표를 쉽게 만들 수 있습니다.
흥미로운 아이디어네요 @jthi . 오늘은 어떻게 하시나요?
경우에 따라 나는 다음 중 하나를 합니다.
- 이것들을 수동으로 수행하세요
- 스크립트 작성(자동화인 경우)
- 가끔 정리를 건너뛰어서 좀 지저분한 데이터 테이블이 생기기도 하지만 테이블을 공유할 때까지는 문제가 되지 않습니다.
저는 정기적으로 이러한 특정 "메타데이터" 정리 작업을 수행하기 위해 추가 기능을 작성할 가능성이 높습니다(이미 시작했지만 온갖 불필요한 기능이 포함된 "작은" 기능 크립을 발견했습니다).
소원이 충분한 쿠도스를 얻을 때까지 이 대본이 도움이 될 수도 있습니다.
현재 데이터 테이블에 대한 스크립트를 생성하고, 설정에 따라 스크립트, 열 속성 및 add rows() 표현식을 제거합니다.
Names Default To Here( 1 );
removeScripts = 1;
removeColumnProperties = 1;
remove rows = 1;
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << copy table script( "no data" );
tableScript = Eval( Eval Expr( Parse( Expr( Get Clipboard() ) ) ) );
tableScriptList = Substitute( Name Expr( tableScript ), Expr( New Table() ), Expr( List() ) );
If( removeScripts,
tableScriptList = Filter Each( {part}, tableScriptList, Not( Head( Part ) == Expr( New Script() ) ) )
);
tableScriptList = Transform Each( {part}, tableScriptList,
If(
Head( part ) == Expr( New Column() ) & removeColumnProperties,
Substitute( Name Expr( part ), Extract Expr( part, Set Property( Wild List() ) ), . ),
Head( part ) == Expr( Add Rows() ) & remove rows, .,
Name Expr( part )
)
);
newtableScript = Substitute( Name Expr( tableScriptList ), Expr( List() ), Expr( New Table() ) );
newtableScript;
이상과는 거리가 멉니다.
대체는 매우 위험합니다. 사용자가 바꾸려고 하는 표현만을 바꾸는 것이 아니라, 일치하는 모든 표현을 바꾸기 때문입니다!
예를 들어 스크립트 끝에 남아 있는 모든 목록은 New Table()로 대체됩니다!!!
Table Script에 있는 모든 새로운 table() 은 List() 로 대체되고 마지막에는 New table() 로 대체됩니다.
JMP에서 이런 일이 일어나는 것을 방지하는 방법을 아십니까?
대체 교장 ?
이 문제를 염두에 두고 저는 다음과 같은 소원을 적었습니다.
:folded_hands: 표현식 인덱싱: 읽기 및 쓰기 액세스
해당 기능이 사용 가능해지면 스크립트를 업데이트하여 더욱 강력하게 만들겠습니다.