Re: 여러 CSV 파일을 가져오지만 일부 제목 형식 오류는 JSL에서 수정해야 합니다.하나의 예제(또는 다른 종류가 있는 경우 몇 개)의 .csv 파일을 제공할 수 있다면 이 작업이 더 쉬워질 것입니다. 그렇지 않은 경우 "깨진" 데이터 테이블 하나를 제공할 수 있습니까?
Re: 여러 CSV 파일을 가져오지만 일부 제목 형식 오류는 JSL에서 수정해야 합니다.참고하실 수 있도록 샘플 표를 첨부했습니다.
여러 CSV 파일을 가져오지만 일부 제목 형식 오류는 JSL에서 수정해야 합니다.여러 개의 CSV 파일을 가져오려고 하는데 원본 데이터 열 이름 형식에 제목과 데이터가 일치하지 않는 두 가지 문제가 있기 때문에 "여러 파일 가져오기" 기능이 제대로 작동하지 않습니다.
1. 데이터 열 이름은 다음과 같습니다. 날짜 시간 이름( ABC ) (DEF ) 높이 무게 ......etc
2. 나에게 필요한 딜림은 공백과 ( 그리고 ) 입니다.
3. 단, "Date" 앞에 공백이나 탭이 추가되어 첫 번째 열 이름이 Date가 아닌 Column 1이 되고, 데이터와 비교하여 제목 오른쪽으로 한 열 이동됩니다.
4. 두 번째 오류는 (D입니다. 제목에 대해 이 둘 사이에 공백이 없으므로 하나의 제목으로 처리되지만 데이터는 (와 D 사이에 공백이 있기 때문에 두 개의 열로 분리되므로 제목이 왼쪽으로 이동합니다. 하나의 열은 데이터와 비교됩니다.
5. 첫 번째 오류는 항상 첫 번째 열 이름 "Date" 이전에 존재하지만, 두 번째 오류 "(D"는 소스 도구에 따라 다른 순서로 나타날 수 있습니다.
모든 제목과 열을 자동으로 일치시킬 수 있도록 JSL을 작성하고 싶지만 이를 수행하는 방법을 잘 모르겠습니다.
첫 번째 단계는 Get Column Names()를 사용한 다음 이름을 구문 분석하는 것이지만,parse() 및 word()가 작동하지 않는 것 같습니다.
코딩에 정말 익숙하지 않아 여기에 갇혀 있습니다. 미리 도움을 주셔서 감사합니다.

자동화 및 스크립팅Re: 여러 CSV 파일을 가져오지만 일부 제목 형식 오류는 JSL에서 수정해야 합니다.두 줄의 예를 바탕으로 .csv 파일을 정리(제거() 및 공백 축소)한 다음 Open with Char를 Blob()으로 사용하여 해당 "고정된" 문자열을 데이터 테이블로 변환할 것입니다.
Names Default To Here(1);
str = Load Text File("$DOWNLOADS/sample CSV.csv");
lines = Words(str, "\!N");
data = Transform Each({line}, lines,
str = Collapse Whitespace(Substitute(line, {"(", ")"}, ""))
);
str = Concat Items(data, "\!N");
dt = Open(Char To Blob(str),
Import Settings(
End Of Line(CRLF, CR, LF),
End Of Field(Spaces, Space, CSV(0)),
Strip Quotes(1),
Use Apostrophe as Quotation Mark(0),
Use Regional Settings(0),
Scan Whole File(1),
Treat empty columns as numeric(0),
CompressNumericColumns(0),
CompressCharacterColumns(0),
CompressAllowListCheck(0),
Labels(1),
Column Names Start(1),
First Named Column(1),
Data Starts(2),
Lines To Read("All"),
Year Rule("20xx")
)
);Re: 여러 CSV 파일을 가져오지만 일부 제목 형식 오류는 JSL에서 수정해야 합니다.@jthi
귀하의 솔루션은 훌륭합니다!
하나의 질문.각 줄에서 괄호를 제거하는 줄을 지정합니다.
str = Collapse Whitespace(Substitute(line, {"(", ")"}, ""))
여기서 모든 "("를 ")"로 대체한 다음 모든 ")"를 ""로 대체합니다.
내 기존 접근 방식은 다음과 같습니다.
str = Collapse Whitespace(Substitute(line, "(", "", ")", ""))
여기서 "("는 ""로 대체되고 ")"는 ""로 대체됩니다.
구문에 이점이 있습니까, 아니면 개인적인 선택입니까?
Re: 여러 CSV 파일을 가져오지만 일부 제목 형식 오류는 JSL에서 수정해야 합니다.그것은 단지 내 개인적인 선택입니다. 일반적으로 여러 항목을 동일한 항목으로 교체하려는 경우 대체할 값 목록을 제공한 다음 해당 값을 한 번 제공합니다. 다른 것으로 교체하려면 보여드린 접근 방식을 사용합니다. 또는 동적으로 빌드해야 하거나 구성 파일이 있어야 하는 경우 두 개의 목록을 사용합니다.
Names Default To Here(1);
str = "AA BB CC DD";
a = Substitute(str, {"AA", "BB"}, "11"); // a = "11 11 CC DD";
b = Substitute(str, "AA", "11", "BB", "22"); // b = "11 22 CC DD";
subs = ["AA" => "33", "BB" => "44"];
c = Substitute(str, subs << get keys, subs << Get Values); // c = "33 44 CC DD";
show(a, b, c);Re: 여러 CSV 파일을 가져오지만 일부 제목 형식 오류는 JSL에서 수정해야 합니다.지원해 주셔서 감사합니다. 이 방법은 단일 파일에 적합합니다.
하지만 아직 한 가지 질문이 남아 있습니다. 하나의 JMP 파일로 가져와야 하는 동일한 형식의 파일이 많이 있습니다.
그래서 이 방법을 사용하려면 하나씩 열어서 하나의 파일로 연결해야 하는 것 같습니다.
이것이 내 원래 생각이 다음과 같았던 이유입니다.
1. 다중 가져오기 기능을 사용하세요
2. 열 이름 가져오기
3. 그런 다음 열 이름 기록 기능을 사용하여 각 열 이름을 수정합니다.
Re: 여러 CSV 파일을 가져오지만 일부 제목 형식 오류는 JSL에서 수정해야 합니다.다음을 수행할 수 없는 특별한 이유가 있습니까?
- 관심 있는 파일 목록 가져오기
- For Each를 사용하여 반복합니다.
- 루프 내에서 파일을 구문 분석하고 먼저 여는 테이블에 연결합니다.
열을 수정하려고 시도할 수도 있지만 예제에 따르면 열 이름을 어지럽히거나 값을 가져온 후 값을 이동하는 것보다 csv 파일을 수정하는 것이 훨씬 쉬웠습니다.
Re: 여러 CSV 파일을 가져오지만 일부 제목 형식 오류는 JSL에서 수정해야 합니다.파일을 생성하는 프로그램을 수정하는 것도 좋은 선택일 수 있습니다. 이는 표준 CSV가 아니며 다른 프로그램에서도 이를 올바르게 구문 분석할 것이라고 생각하지 않습니다.
Re: 여러 CSV 파일을 가져오지만 일부 제목 형식 오류는 JSL에서 수정해야 합니다.데이터 테이블 연결 한 가지 방법을 보여줍니다.
Re: 여러 CSV 파일을 가져오지만 일부 제목 형식 오류는 JSL에서 수정해야 합니다.for 루프를 사용하여 파일을 반복하려고 했지만 작동하지 않습니다. 파일을 연결하려고 할 때 문제가 발생한 것 같습니다.
Names Default To Here(1);
dir = Pick Directory("Select a directory");
filelist = Files In Directory(dir);
strings = {};
For(i = 1, i <= N Items(filelist), i++,
file = dir || Eval(Parse(filelist[i]));
str = Load Text File(file);
lines = Words(str, "\!N");
data = Transform Each({line}, lines,
str = Collapse Whitespace(Substitute(line, {"(", ")"}, ""))
);
str = Concat Items(data, "\!N");
strings = strings || str;
);
dt = Open(
Char To Blob(str),
Import Settings(
End Of Line(CRLF, CR, LF),
End Of Field(Spaces, Space, CSV(0)),
Strip Quotes(1),
Use Apostrophe as Quotation Mark(0),
Use Regional Settings(0),
Scan Whole File(1),
Treat empty columns as numeric(0),
CompressNumericColumns(0),
CompressCharacterColumns(0),
CompressAllowListCheck(0),
Labels(1),
Column Names Start(2),
First Named Column(1),
Data Starts(3),
Lines To Read("All"),
Year Rule("20xx")
)
);
Re: 여러 CSV 파일을 가져오지만 일부 제목 형식 오류는 JSL에서 수정해야 합니다.여러 번 시도한 후 아래 코드는 루프를 통해 여러 CSV를 성공적으로 가져오고 형식이 정확합니다.
하지만 여전히 두 가지 문제가 남아 있습니다.
1. 두 번째 파일부터 시작하여 헤더는 열 제목으로 제외되지 않고 테이블의 데이터로 처리되며 헤더 행이 두 개 있습니다. 첫 번째 행은 파일 이름이고 두 번째 행은 공백으로 구분된 제목입니다.
2. 다양한 파일을 분석할 수 있도록 파일 이름 열을 추가하고 싶지만 이는 쉽게 달성할 수 있는 다중 파일 가져오기 기능과 같지 않습니까?
이름의 기본값은 여기에 있습니다( 1 );
dir = 디렉터리 선택( "디렉터리를 선택하세요" );
filelist = 디렉토리의 파일( dir );
내 목록 = {};
For( i = 1, i <= N 항목( filelist ), i++,
파일 = 디렉토리 || "/" || 파일목록[i];
str = 텍스트 파일 로드( file );
line = Words(str, "\!N");
데이터 = 각각 변환({line}, 라인,
line = 축소 공백(대체(line, {"(", ")"}, ""))
);
수정된str = 항목 연결(data, "\!N");
mylist[i] = 수정된str;
);
dt = 공개(
Char To Blob( Concat 항목( mylist, "\!N" ) ),
가져오기 설정(
줄 끝(CRLF, CR, LF),
필드 끝( 공백, 공백, CSV( 0 ) ),
스트립 인용문( 1 ),
아포스트로피를 따옴표( 0 )로 사용하세요.
지역 설정 사용( 0 ),
빈 열을 숫자( 0 )로 처리합니다.
숫자 열 압축( 0 ),
문자 열 압축( 0 ),
압축 허용 목록 확인( 0 ),
라벨( 1 ),
열 이름 시작( 2 ),
첫 번째 명명된 열( 1 ),
데이터 시작( 3 ),
읽을 줄( "모두" ),
연도 규칙( "20xx" )
)
);
Re: 여러 CSV 파일을 가져오지만 일부 제목 형식 오류는 JSL에서 수정해야 합니다.하나의 거대한 문자열을 생성하지 말고, 오히려 데이터 테이블을 하나씩 생성하고 진행하면서 연결하세요. 또한 JSL 스크립트를 게시할 때 "JSL 스크립트 삽입"을 사용하세요.
읽기가 훨씬 쉬워지기 때문입니다.
</CODE></PRE>
<P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><span class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><img src="https://us.v-cdn.net/6038925/uploads/images/60013iEF81464ED8426C0C/jthi_2-1703167262034.png" role="button" title="jthi_2-1703167262034.png" alt="jthi_2-1703167262034.png" /></span></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></P>
<P> </P></LINGO-BODY><LINGO-SUB id="lingo-sub-711549" slang="en-US" mode="NONE">Re: 여러 CSV 파일을 가져오지만 일부 제목 형식 오류는 JSL에서 수정해야 합니다.</LINGO-SUB><LINGO-BODY id="lingo-body-711549" slang="en-US" mode="NONE"><P><A href="https://community.jmp.com/t5/user/viewprofilepage/user-id/14366" target="_blank">@jthi</A> 맞습니다. 하지만 문자열을 계속 연결하려면 몇 가지 변경 사항이 필요합니다.<STRONG>연결이 2GB 문자를 초과하면 JMP가 처리할 수 있는 가장 긴 문자열이기 때문에 이 작업은 실패합니다.</STRONG></P>
<P>아이디어:</P>
<PRE><CODE class=" language-jsl">
For( i = 1, i <= N Items( filelist ), i++,
file = dir || "/" || filelist[i];
str = Load Text File( file );
lines = Words(str, "\!N");
header1 = RemoveFrom(lines, 1); // remove the first line, two times.
header2 = RemoveFrom(lines, 1); // (removes both header lines.)
data = Transform Each({line}, lines,
// prepend the file name to each data line
filelist[i] || " " || Collapse Whitespace(Substitute(line, {"(", ")"}, ""));
);
modifiedstr = Concat Items(data, "\!N");
mylist[i] = modifiedstr;
);
header2 = "filename" || header2; // add the column name "filename"
insertInto(mylist,header2,1); // check the order of the arguments, the goal
insertInto(mylist,header1,1); // is to push these onto the front of the list
// now do the import...Names Default To Here(1);
dir = "$DOWNLOADS/New Folder (7)";
filelist = Files In Directory(dir);
mylist = {};
dt_collector = Empty();
For(i = 1, i <= N Items(filelist), i++,
file = dir || "/" || filelist[i];
str = Load Text File(file);
lines = Words(str, "\!N");
data = Transform Each({line}, lines,
line = Collapse Whitespace(Substitute(line, {"(", ")"}, ""))
);
modifiedstr = Concat Items(data, "\!N");
dt = Open(
Char To Blob(modifiedstr),
Import Settings(
End Of Line(CRLF, CR, LF),
End Of Field(Spaces, Space, CSV(0)),
Strip Quotes(1),
Use Apostrophe as Quotation Mark(0),
Use Regional Settings(0),
Treat empty columns as numeric(0),
Compress Numeric Columns(0),
Compress Character Columns(0),
Compress Allow List Check(0),
Labels(1),
Column Names Start(1),
First Named Column(1),
Data Starts(2),
Lines To Read("All"),
Year Rule("20xx")
),
invisible
);
dt << Set Name(filelist[i]);
dt << New Column("Source", Character, Nominal, << Set Each Value((dt << get name)));
If(!Is Empty(dt_collector),
dt_collector << Concatenate(
dt,
Append to first table
);
Close(dt, no save);
,
dt_collector = dt;
);
);
테스트되지 않았지만 거의 맞습니다. InsertInto() 및 RemoveFrom()을 찾아보십시오. 지금은 JMP가 열려 있지 않습니다. 아이디어는 매번 처음 두 줄을 제거(및 캡처)하고, 모두 캡처하고 쌓은 후에 추가 열 이름을 붙인 채 처음 두 줄을 맨 앞에 배치하는 것입니다. 그리고 내부에는 모든 줄에 파일 이름을 붙입니다.
Re: 여러 CSV 파일을 가져오지만 일부 제목 형식 오류는 JSL에서 수정해야 합니다.여러분의 지원에 감사드립니다. 이 jsl 프로젝트에서 정말 많은 것을 배웠습니다.