열 번호를 찾고 계십니까?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />안녕하세요 여러분,
열 번호가 필요합니다.열의 이름을 알고 있지만 항상 같은 공간에 있지는 않을 수도 있습니다.
먼저 열이 발견되면 반복을 중지하는 While 루프를 사용하기로 결정했습니다."n"은 열 번호이지만 작동하지 않습니다.
colFound = 0 ;
N = 0 ;
하는 동안 ( colFound == 0 ,
N ++;
열이름 = 열 이름 ( N ) ;
만약에 ( 열이름 == Vd , colFound = 1 , ) ;
) ;
이 오류가 발생합니다: 'Column Name' , Column Name/*###*/(n) 액세스 또는 평가 시 잘못된 인수가 있습니다.
그러나 이것을 사용하면(실제 숫자를 알고 있는 경우) 내가 찾고 있는 열 이름이 반환됩니다.
col = 컬럼명(38);
표시(열);
게시물에서 ( 열 번호 ), msharp의 제안을 사용했지만 여전히 열 번호를 얻는 데 운이 없으며 열 이름만 반환합니까?
Re: 열 번호를 찾고 계시나요?msharp에게 감사드립니다. 이 점을 명심하겠습니다.훨씬 깔끔해졌네요!
Re: 열 번호를 찾고 계시나요?경험 법칙과 같습니다.코드나 테이블이 열 순서에 의존하는 방식으로 설정되어 있다면 아마도 뭔가 좋지 않은 일을 하고 있는 것입니다.작동할 수도 있지만 더 우아하고 빠른 방법이 있을 수 있습니다.
데이터 순서는 실제로 데이터를 표시하도록 선택한 경우 스크립트 끝에서만 고려해야 합니다(대부분의 경우 데이터를 테이블이 아닌 그래프로 표시하는 것이 더 낫기 때문에 필요하지도 않습니다).
즉, 작동하는 추악한 코드는 여전히 좋은 코드입니다.귀하의 경우 데이터 테이블이 스크립트에 공급되는 방식을 제어할 수 없다고 가정하면 이것이 가장 간단한 솔루션일 수 있습니다.그러나 다음과 같이 코드를 압축할 수 있습니다. (열 번호를 알 필요가 전혀 없다는 점에 유의하세요.)
colFound = 0 ;
ncols = ncol ( dt요약 ) ;
~을 위한 ( 나 = 1 , 나 <= ncols , 나 ++,
만약에 ( colFound ,
만약에 ( 장치패스 ,
장치패스 --;
에 집어 넣다 ( y_cols , 나 , 나 ) ;
,
부서지다 ()
)
) ;
열이름 = ( 열 이름 ( 나 ) << 이름을 얻다 ) ;
만약에 ( 열이름 == "Vd" , colFound = 1 ) ;
) ;
Re: 열 번호를 찾고 계시나요?내 데이터에 항상 "Vd"라는 열이 있지만 매번 다른 위치에 있을 수 있다는 것을 알고 있다면 왜 열 번호를 사용하고 싶지 않습니까?Vd 열 다음에는 목록에 삽입해야 하는 "x"개의 열이 있습니다.스크립트를 실행할 때까지 열 수를 알 수 없으며 이러한 열의 이름은 내 데이터 결과에 따라 결정되므로 열 번호를 사용하는 것이 왜 끔찍한지 알 수 없습니다.해당 열이 생성되면 목록에 삽입할 수 있을 것 같은데, 열 번호를 얻는 것이 왜 끔찍한지 설명해 주세요.
colFound = 0 ;
N = 0 ;
ncols = ncol ( dt요약 ) ;
~을 위한 ( 나 = 1 , 나 <= ncols , 나 ++,
열이름 = ( 열 이름 ( 나 ) << 이름을 얻다 ) ;
만약에 ( 열이름 == "Vd" , colFound = 1 ; 부서지다 () , ) ;
) ;
아이콜 = 1 ;
//iCol = Contains(dtSummary << 열 이름 가져오기, Column("Vd"));
만약에 ( colFound == 1 ,
y_cols = {} ;
~을 위한 ( N = 아이콜 + 1 , N <= ( 아이콜 + 장치패스 ) , N ++,
y_cols = 끼워 넣다 ( y_cols , N , N ) ;
) ,);
Re: 열 번호를 찾고 계시나요?내 제안을 이해하지 못한 것 같아요.내 제안은 열 번호를 찾아서는 안된다는 것입니다.열악한 코딩 관행이고 실제로는 끔찍합니다.
Re: 열 번호를 찾고 계시나요?감사합니다. 게시해주셔서 기뻐요!나는 그것을 작동시켰다.이제 두 게시물 모두에서 조금 더 이해가 되었습니다.
Re: 열 번호를 찾고 계시나요?Peter가 저보다 응답하기 쉬운 것 같지만 여기에 루프가 없는 또 다른 방법이 있으므로 많은 수의 열에 대해 더 빨라야 합니다.
dt = 열려 있는 ( "$sample_data\진통제.jmp" );
열_번호 = 포함 (dt << 열 이름 가져오기 , 열 ( "의약품" )));
연관된 열 번호를 얻으려면 "drug"를 검색하려는 열 이름으로 바꾸십시오.
줄리안
Re: 열 번호를 찾고 계시나요?아 잡아주셔서 감사합니다!
내 코드가 잘 작동하고 있습니다. 다시 한 번 감사드립니다.
Re: 열 번호를 찾고 계시나요?어떤 이유로 열 이름을 찾을 수 없으면 while 루프가 제대로 작동하지 않았습니다.이것은 조금 더 깨끗합니다.
dt = 열려 있는 ( "$sample_data\빅 클래스.jmp" ) ;
현재 데이터 테이블 ( dt ) ;
vd = "키" ;
colFound = 0 ;
N = 0 ;
ncols = ncol ( dt ) ;
~을 위한 ( 나 = 1 , 나 <= ncols , 나 ++,
열이름 = ( 열 이름 ( 나 ) << 이름을 얻다 ) ;
만약에 ( 열이름 == Vd ,
colFound = 1 ;
부서지다 () ;
) ;
) ;
Re: 열 번호를 찾고 계시나요?열 이름이 오해의 소지가 있습니다. 예를 들어 "높이"가 아닌 :높이를 반환합니다.또한 n이 테이블의 열 수를 초과하는지 확인하지 마십시오.이 코드는 작동합니다:
dt = 열려 있는 ( "$sample_data\빅 클래스.jmp" ) ;
현재 데이터 테이블 ( dt ) ;
vd = "키" ;
colFound = 0 ;
N = 0 ;
ncols = ncol ( dt ) ;
하는 동안 ( ! colFound & N <= ncols ,
N ++;
열이름 = ( 열 이름 ( N ) << 이름을 얻다 ) ;
만약에 ( 열이름 == Vd ,
colFound = 1
) ;
) ;