연결된 문자열을 함수에 대한 인수로 사용할 수 있나요?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />다음의 간단한 예를 고려해보세요:
dt2 = 현재 데이터 테이블();
b = 140;
BC = 문자(b);
인쇄(b);
인쇄(bc);
dt2 << 새 열("범위"||bc||"v1",
숫자,
식(b)
);
// dt2 = 현재 데이터 테이블();
dt2 << 새 열("범위",
숫자,
Formula(Maximum(:Name("AA"||bc), :Name("BB"||bc), :Name("CC"||bc)) - 최소(:Name("AA"||bc) , :이름("BB"||bc), :이름("CC"||bc)))
);
다음은 테이블입니다.

반환된 오류 메시지:

저는 JSL 프로그래밍을 거의 하지 않습니다. 도와주세요!!나는 이것이 효과가 있기를 바랍니다.
Re: 연결된 문자열을 함수의 인수로 사용할 수 있나요?이런, 죄송해요! 심야 JSL 코딩 Craige가 해당 문제를 일으키는 괄호 오류를 발견하고 단순화한 것처럼 보입니다(감사합니다. 크레이지 !).
줄리안
Re: 연결된 문자열을 함수의 인수로 사용할 수 있나요?안녕하세요 크레이지,
나는 그것을 시도할 것이다.스크립트에서 Name()으로 끝난 이유는 다른 수식을 위해 수식 편집기에서 바로 복사했기 때문이라고 생각합니다.이제 괄호의 문제를 알 것 같습니다.
감사해요!
Re: 연결된 문자열을 함수의 인수로 사용할 수 있나요?안녕하세요 줄리안,
귀하의 스크립트를 시험해 보았지만 부분적으로 작동하는 것 같습니다.실행해보니 다음과 같은 결과가 나왔습니다.

Range 열 아래의 값은 15가 아닌 5여야 합니다.
그리고 로그에는 다음과 같이 적혀 있었습니다(이해가 안 됨).

최대값이 제대로 평가된 것 같더니 거기에서 멈춥니다.어떤 아이디어가 있나요?당신의 도움을 주셔서 감사합니다
스크립트:
dt2 = 현재 데이터 테이블();
b = 140;
BC = 문자(b);
인쇄(b);
인쇄(BC);
dt2 << 새 열("bias"||bc||"v1",
숫자,
식(b)
);
// dt2 = 현재 데이터 테이블();
dt2 << 새 열("범위",
숫자,
);
eval(구문 분석(EvalInsert(
"\[
:범위 << 수식 설정( Maximum(:Name("^"AA_"||bc^"), :Name("^"BB_"||bc^"), :Name("^"CC_"||bc )^") -
최소(:이름("^"AA_"||bc^"), :이름("^"BB_"||bc^"), :이름("^"CC_"||bc^"))
)
]\")));
Re: 연결된 문자열을 함수의 인수로 사용할 수 있나요?Julian의 답변에 대한 추가 정보입니다.
예, 연결을 사용하여 대부분의 함수에 대한 인수를 작성할 수 있습니다.이름은 정말 이상한 예외 중 하나입니다. Name()은 런타임 함수가 아닌 구문 분석 시간 도우미입니다.
대부분의 JSL 변수 이름은 JMP 파서가 쉽게 이해할 수 있는 일련의 문자, 숫자, 밑줄 및 공백으로 구성되어 있습니다.당신의 이름, AA_140 등이 잘 형성되어 있습니다.때때로 변수 이름이 지저분해지는 경우가 있습니다.일반적으로 이는 삽입된 쉼표나 빼기 기호에서 발생합니다. 엑스레이 또는 사과, 배 .어쨌든 인용하지 않고는 이러한 변수 이름을 사용하여 JSL 표현식을 작성할 수 없습니다. Name() 래퍼는 다음과 같은 작업을 수행합니다.
name("엑스레이") + name("사과,배")
두 변수를 함께 추가합니다.이름은 JSL 소스 코드가 실행될 때가 아니라 구문 분석될 때 처리(실행되지 않음)됩니다.Name에 대한 인수는 구문 분석 시 단순 문자열이어야 합니다.Julian의 코드는 JMP의 문자 함수를 사용하여 연결된 문자열을 미리 구축하고 이를 구문 분석 함수로 보냅니다.
변수 이름의 형식이 잘 지정되어 있기 때문에(항상 좋은 생각임) 이름 래퍼가 필요하지 않으며 Julian의 아이디어는 더욱 단순화될 수 있습니다.(이것은 또한 잘못된 괄호를 수정합니다.)
eval(구문 분석(EvalInsert(
"\[
:범위 << 수식 설정(
최대(^":AA_" || bc^, ^":BB_" || bc^, ^":CC_" || bc^) -
최소(^":AA_" || bc^, ^":BB_" || bc^, ^":CC_" || bc^) )
]\")));

문자열을 작성하고 구문 분석하지 않고 수식을 직접 조작하기 위한 다른 JSL 함수가 있지만 Julian의 EvalInsert 아이디어를 사용하면 JSL에서 친숙한 문자 조작을 사용할 수 있습니다.
Re: 연결된 문자열을 함수의 인수로 사용할 수 있나요?안녕 shehzaad.kaka ,
eval, 구문 분석 및 eval 삽입을 사용하여 표현식을 작성하여 이 작업을 수행할 수 있었습니다. 당신이 JSL을 처음 접한다고 말했으므로 이것이 매우 난해해 보일 것이라고 생각하므로 이에 대한 두 가지 중요한 부분을 살펴보겠습니다.
내가 한 첫 번째 일은 열 생성과 별도로 수식을 자체 부분으로 설정하는 것이었습니다. 이는 열 수식을 설정하기 위한 표현식 작성에만 집중할 수 있도록 하기 위한 것입니다. 이것의 대부분은 Eval(Parse(EvalInsert( ))); 하고있다.EvalInsert는 문자열을 가져와서 변수나 변수의 함수로 대체하는 깔끔한 도구입니다. 대체를 원하는 것을 지정하는 방법은 함수나 변수를 ^ ^로 묶는 것입니다. 예를 들어:
g = "세계";
h = EvalInsert("안녕하세요 ^g^ ");
캡션(h);
이 경우 h는 위의 코드와 함께 캡션 상자에 표시되는 "hello world"와 동일합니다.
귀하의 상황에서는 열 이름에 evalInsert를 사용했습니다.
:이름("^"AA_"||bc^")
이것을 분리해 보면 더 명확해질 것입니다.
:이름(" ^ "AA_" || bc ^ ")
:Name() 함수에는 인용된 텍스트가 필요하므로 괄호로 시작과 끝에 인용문이 있습니다. 다음으로 연결을 ^ ^로 묶었습니다. Evalinsert는 이를 처리하고 :Name() 함수에는 따옴표 붙은 AA_140 문자열이 남습니다. EvalInsert는 무언가가 래핑된 모든 곳을 대체합니다 ^ ^. 우리가 작성하는 표현식에는 따옴표가 있어야 하지만 문자열 자체를 지정하려면 따옴표를 사용해야 한다는 특별한 복잡한 문제가 있습니다. 이를 처리하기 위해 각 따옴표 앞에 \! (슬래시 뱅) 또는 아래에서 수행한 대로 시작 인용문 뒤에 \[를 넣고 마지막 인용문 앞에 ]\를 입력합니다. 이는 우리가 작성 중인 표현식의 모든 따옴표를 "이스케이프"합니다.
다음으로 Parse()는 문자열을 JSL 표현식으로 변환하고 마지막으로 Eval()은 JSL 표현식을 실행하여 해당 수식을 열에 할당합니다.
이게 도움이 되길 바란다!
줄리안
추신: 귀하의 코드에는 열 이름에 밑줄이 없어서 추가했습니다.
dt2 = 현재 데이터 테이블 () ;
비 = 140 ;
기원전 = 숯 ( 비 ) ;
인쇄 ( 비 ) ;
인쇄 ( 기원전 ) ;
dt2 << 새 열 ( "범위" || 기원전 || "v1" ,
숫자 ,
공식 ( 비 )
) ;
// dt2 = 현재 데이터 테이블();
dt2 << 새 열 ( "범위" ,
숫자 ,
) ;
평가 ( 분석하다 ( 평가삽입 (
"\[
:범위 << 수식 설정( Maximum(:Name("^"AA_"||bc^"), :Name("^"BB_"||bc^"), :Name("^"CC_"||bc )^") - 최소(:이름("^"AA_"||bc^"), :이름("^"BB_"||bc^"), :이름("^"CC_"||bc^" ))
)
]\" ))) ;