데이터 표준이 좋지 않은 파일 이름에 대한 정규식안녕,
방금 Regex의 Sitges에서 열린 2023 Discovery Summit에서 훌륭한 강연을 보았고 이 함수를 사용하여 PDF 가져오기 마법사를 사용하여 JMP로 가져오는 파일 이름에서 주요 변수를 추출할 수 있는지 궁금했습니다. 문제는 파일 이름이 여러 운영자에 의해 생성되고 공통된 표준이 없다는 것입니다. 저는 보통 재코딩 기능과 일부 일반 정리를 사용하여 필요한 것을 가져오지만 시간이 많이 걸립니다. 특히 매주 100개 이상의 PDF를 JMP로 가져오는 경우에는 더욱 그렇습니다.
다음은 내 데이터가 어떻게 생겼는지 보여주는 예제 스크립트입니다. 추출하려는 주요 변수는 "제품 유형", "배치 번호" 및 "박스 샘플"입니다. 다른 JMP 사용자가 비슷한 문제를 겪었고 필요한 데이터를 추출하기 위해 스크립트가 생성되었다는 이야기가 토크에서 언급되었습니다. 저는 JSL 전문가가 아니므로 이 문제에 대한 도움을 받고 싶지만 파일 이름에 불일치가 너무 많기 때문에 자동화하기에는 너무 복잡할 수 있다는 점에 감사드립니다. 모든 도움/조언은 놀라울 것입니다! 안부 인사, 알리시아
New Table( "REGEX Function Filename Example",
Add Rows( 8 ),
New Column( "Source Table",
Character,
"Nominal",
Set Selected,
Set Values(
{
"TYPE-A Z012345 BOX 10 ImpactTemplate_01.pdf - 2023-02-14 14-09-03 Page(2) Table(1)",
"TYPE-A Z012345 BOX 129 ImpactTemplate_01.pdf - 2023-02-14 14-09-03 Page(2) Table(1)",
"TYPE-B Z012346 BOX12 ImpactTemplate_01.pdf - 2023-02-14 14-09-03 Page(2) Table(1)",
"Z012347 TYPEB BOX16 ImpactTemplate_01.pdf - 2023-02-14 14-09-03 Page(2) Table(1)",
"TYPEC Z12347 BOX 103 ImpactTemplate_01.pdf - 2023-02-14 14-09-03 Page(2) Table(1)",
"BOX 14 TYPE-C Z012350 ImpactTemplate_01.pdf - 2023-02-14 14-09-03 Page(2) Table(1)",
"TYPE-D Z012450 BOX 142 ImpactTemplate_01.pdf - 2023-02-14 14-09-03 Page(2) Table(1)",
"TYPED Z12451 BOX7 ImpactTemplate_01.pdf - 2023-02-14 14-09-03 Page(2) Table(1)"
}
)
),
New Column( "Product Type",
Character,
"Nominal",
Set Selected,
Set Values(
{"TYPE-A", "TYPE-A", "TYPE-B", "TYPE-B", "TYPE-C", "TYPE-C", "TYPE-D",
"TYPE-D"}
)
),
New Column( "Batch Number",
Character,
"Nominal",
Set Selected,
Set Values(
{"Z012345", "Z012345", "Z012346", "Z012347", "Z012347", "Z012350",
"Z012450", "Z012451"}
)
),
New Column( "Box Sampled",
Character,
"Nominal",
Set Selected,
Set Values(
{"BOX 10", "BOX 129", "BOX 12", "BOX 16", "BOX 103", "BOX 14", "BOX 142",
"BOX 7"}
)
)
)
스크립팅Re: 데이터 표준이 좋지 않은 파일 이름에 대한 정규식나는 이것들이 당신을 때렸다고 생각합니다.
dt << New Column("MyProdType", character, formula(Regex( :Source Table, "TYPE-?(\w)", "TYPE-\1" )));
dt << New Column("MyBatchNum", character, formula(
v=Regex( :Source Table, "Z0{0,6}(\d{0,6})", "\1"); // getting just the non zero values
"Z"||repeat("0", 6-length(v))||v
));
dt << New Column("My Box", character, formula(Regex( :Source Table, "BOX ?(\d+)", "BOX \1" )));
Re: 데이터 표준이 좋지 않은 파일 이름에 대한 정규식Vince의 솔루션에서 알 수 있듯이 Regex는 이 문제를 신속하게 처리하며 확실히 이와 같은 문제를 처리하는 데 선호되는 방법입니다.
Regex는 하룻밤 사이에 배울 수 없는 것들 중 하나입니다... 사용하면서 조금씩 배워갑니다.
Regex를 선택하는 동안 대체( ) 및 항목( ) 명령으로 문자열을 조작하는 방법을 배우고 목록 정렬( ) 및 항목 연결( ) 명령으로 목록을 조작하는 방법을 배우십시오. 이러한 명령은 정규식만큼 강력하지도 않고 유연하지도 않습니다. 하지만, 그것들로 무엇을 할 수 있는지는 놀랍고, 그것들의 단순함은 그것들을 이해하고 기억하기 쉽게 만듭니다. 평가 삽입( )과 같은 기능과 함께 기능/사용 용이성의 "80/20"을 달성했다고 생각하십시오. 그것들은 충분히 배울 가치가 있습니다.
이를 설명하기 위해 제공한 데이터 테이블에 대해 아래 코드를 실행하고 생성된 4개의 열을 검사합니다.
dt = current data table ( );
dt << new column ( "lis", character,
formula(
concatItems(
sortList (
items( [1 3],
substitute(:source table,
" ", "",
"-", "",
"TYPE", ",TYPE-",
"BOX", ",BOX ",
"Z", ",Z",
"Impact", ","
),
","
)
),
","
)
)
);
dt << Text to Columns( columns( :lis ), Delimiters( "," ) );
Re: 데이터 표준이 좋지 않은 파일 이름에 대한 정규식큰 감사 @brady_brady 그리고 @vince_faller . 이러한 솔루션은 완벽하게 작동하며 많은 시간을 절약해 줄 것입니다!! 둘 다 고마워