이름 jsl의 올바른 형식 찾기안녕!
저는 다음과 같은 jsl 스크립트를 만들었습니다.
For Each Row(
dt_fichier3,
// Lire la valeur de la colonne "Process" et les offsets
process_value = :Process;
first_offset = :first_OFFSET;
second_offset = :second_OFFSET;
third_offset = :third_OFFSET;
// Vérifier et assigner les valeurs des offsets si elles ne sont pas vides ou "."
If(
(Char(first_offset) != "." & Char(first_offset) != "") | (Char(second_offset) != "." &
Char(second_offset) != "") | (Char(third_offset) != "." & Char(third_offset) != ""),
// Créer une nouvelle colonne dans le fichier1 si elle n'existe pas encore
new_column_name = process_value || "_offset";
dt_fichier1 << New Column(new_column_name, Numeric, Continuous);
// Définir la formule pour la nouvelle colonne
Column(dt_fichier1, new_column_name) << Set Formula(
Eval(
Eval Expr(
If(:Supplier == "FIRST",
:Expr(process_value) + Expr(:first_OFFSET),
If(:Supplier == "SECOND",
:Expr(:Process) + Expr(:second_OFFSET),
If(
:Supplier == "THIRD",
:Expr(:Process) + Expr(:third_OFFSET),
,
:Expr(:Process) // Valeur par défaut si aucun fournisseur ne correspond
)
)
)
)
)
);
);
);
편집(2024-08-08 jthi): jsl 포맷 추가
문제는 열 이름이 열 정보->수식에 "열_이름"으로 나타나거나 "열-이름"이어야 하기 때문에 수식이 작동하지 않는다는 것입니다. Name() 함수를 사용하려고 했지만 작동하지 않았습니다.:(
자동화 및 스크립팅데이터 접근데이터 탐색 및 시각화Re: jsl 이름의 올바른 형식 찾기표현식 평가를 사용하여 수식을 작성합니다 . Eval Insert, Eval Expr, Parse 및 Substitute를 사용하여 한 표현식을 다른 표현식에 삽입합니다 . 이것은 보통 내가 선호하는 방법입니다(또는 Eval(Substitute()) 및 NameExpr(AsColumn())
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
col1 = "height";
col2 = "weight";
new_col = Eval(EvalExpr(dt << New Column("mycol", Numeric, Continuous, Formula(
Expr(NameExpr(AsColumn(dt, col1))) * Expr(NameExpr(AsColumn(dt, col2)))
))));
new_col << get formula;Re: jsl 이름의 올바른 형식 찾기오른쪽,
하지만 스크립트를 컴파일한 후 한 열을 가져와서 수식이 어떤지 확인하면 다음과 같습니다.
만약( :공급업체 == "FIRST",
"열 이름" + 4,
If( :공급업체 == "SECOND",
"열 이름" + 5,
만약( :공급업체 == "THIRD",
"열 이름" + (-10),
"열 이름"
)
)
)
작동하지 않는데 작동하려면 다음과 같아야 합니다.
만약( :공급업체 == "FIRST",
"열 이름"n + 4,
If( :공급업체 == "SECOND",
"열 이름"n + 5,
만약( :공급업체 == "THIRD",
"Column_Name"n + (-10),
"열 이름"n
)
)
)
그럼 내 스크립트를 어떻게 수정해야 하나요? 감사합니다.:)
Re: jsl 이름의 올바른 형식 찾기: 열에서 누락되었습니다. 원래 스크립트에서 최소한 다음 :Expr(:Process)을 수정해야 합니다. 또한 process_value = :Process(process_value = "Process"를 선호하는 방식)와 같은 참조 대신 열 이름을 사용하는 것이 좋습니다.
Re: jsl 이름의 올바른 형식 찾기나는 당신을 얻을 수 없습니다,
process_value = "Process"를 사용하면 문자열이 되고 열 이름을 사용하지 않습니다.
게다가 :Expr(:Process)에서 무엇을 변경해야 합니까?
Re: jsl 이름의 올바른 형식 찾기저는 이전 답변에서 수식 내부의 해당 (문자열)을 다시 열로 바꾸는 한 가지 기술을 보여드렸습니다.
Re: jsl 이름의 올바른 형식 찾기아... :Process를 사용하는 것은 For Each Row 루프를 사용하는 것과 마찬가지로 해당 위치에서 올바릅니다. 여전히 동일한 방법을 적용하여 열에서 얻은 값을 다시 열로 변환합니다.
Re: jsl 이름의 올바른 형식 찾기내 스크립트에 적용할 수 있나요? 이해가 안 갑니다.
Re: jsl 이름의 올바른 형식 찾기데이터 표를 제공해 주시면 더 나은 예를 보여드릴 수 있습니다.
Re: jsl 이름의 올바른 형식 찾기여기에 데이터가 있습니다
Re: jsl 이름의 올바른 형식 찾기이것이 당신이 찾고 있는 것을 한다고 생각합니다. 저는 Eval(Substitute())를 사용했는데, 보통 코드에서 직접 무엇을 하는지 읽는 것이 조금 더 쉽기 때문입니다. 또한 표현식 빌드에서 평가를 분리했으므로 원하는 경우 인쇄하여 어떻게 보이는지 확인할 수 있습니다. For Each 루프는 현재 데이터 테이블로 올바른 테이블이 있는 한 현재 행을 특정 값으로 설정하여 디버깅할 수도 있습니다.
Names Default To Here(1);
dt1 = Open("$DOWNLOADS/DATAtable1.jmp");
dt2 = Open("$DOWNLOADS/DATAtable2.jmp");
//Row() = 2;
For Each Row(
dt2,
process_value = :Process;
first_offset = :first_OFFSET;
second_offset = :second_OFFSET;
third_offset = :third_OFFSET;
If(
(Char(first_offset) != "." & Char(first_offset) != "") | (Char(second_offset) != "." &
Char(second_offset) != "") | (Char(third_offset) != "." & Char(third_offset) != ""),
new_column_name = process_value || "_offset";
col_expr = Substitute(
Expr(dt1 << New Column(new_column_name, Numeric, Continuous, Formula(
If(:Supplier == "FIRST",
_processval_ + _firstoffset_
, :Supplier == "SECOND",
_processval_ + _secondtoffset_
, :Supplier == "THIRD",
_processval_ + _thirdoffset_
, // else
_processval_
)
))),
Expr(_processval_), Name Expr(AsColumn(dt1, process_value)),
Expr(_firstoffset_), first_offset,
Expr(_secondtoffset_), second_offset,
Expr(_thirdoffset_), third_offset
);
//show(col_expr);
new_col = Eval(col_expr);
);
);
