다른 폴더에서 여러 CSV 파일을 가져오고 값을 업데이트하고 다른 이름으로 CSV를 저장합니다.기본 데이터 폴더와 \data\dataset1\dataset1.csv, \data\dataset2\dataset2.csv 등과 같은 95개의 하위 폴더에 서로 다른 열 이름이 저장된 약 95개의 csv 파일이 있습니다. id1 및 id2 열은 전체에서 공통 변수입니다. 모든 파일. 나는 다음을 수행하고 싶습니다 :
- 95개의 csv 파일을 모두 JMP로 가져오기(JMP Pro 16 사용)
- 95개 파일 전체의 조건에 따라 값을 업데이트합니다. if (id1 = 'a001' then id2='b001')
- 업데이트된 csv 파일을 각 폴더에 다른 이름으로 저장
첫 번째 행은 파일 제목이며 제거할 수 없습니다. 열/변수 이름은 행 2에서 시작하고 데이터는 행 3에서 시작됩니다.
다음 방법으로 모든 파일을 가져올 수 있었습니다.
dt: 다중 파일 가져오기(
<<폴더 설정(
"C:\데이터\"
),
<< 숨김 표시 설정( 0 ),
<<하위 폴더 설정( 1 ),
<<이름 필터 설정( "*.csv" ),
<<이름 설정 활성화( 1 ),
<<크기 필터 설정( {522, 2096152} ),
<<크기 설정 활성화( 0 ),
<<날짜 필터 설정( {3715322235, 3718948571} ),
<<날짜 설정 활성화( 0 ),
<<파일 이름 추가 열 설정( 0 ),
<<파일 크기 추가 열 설정( 0 ),
<<파일 추가 날짜 열 설정( 0 ),
<<가져오기 모드 설정( "CSVData" ),
<<문자 집합 설정( "Best Guess" ),
<<스택 모드 설정( "파일당 테이블" ),
< < < < < < < < < < < < < < < < < < < < < < < <<가져오기 콜백 설정(Empty())
) << 데이터 가져오기;
이 코드에는 열 이름과 데이터가 시작되는 위치에 대한 수식이 없습니다.
그런 다음 다음을 사용하여 값을 업데이트하려고 했습니다.
dt: 하위 ID <<
:id1 << 수식 설정(
If( :id2 == "a001", :id1 == "b001")
);
결과적으로 id1 열의 "a001" 이전 값은 삭제되고 "a001"의 id1 값은 업데이트되지 않습니다.
나는 이 단계에서 재고가 있으며 각 폴더에 다른 이름으로 파일을 저장하는 다음 단계를 생각조차 할 수 없습니다. 어떤 도움이나 안내도 대단히 감사하겠습니다.
감사합니다
대량 맞춤화윈도우Re: 다른 폴더에서 여러 CSV 파일을 가져오고, 값을 업데이트하고, 다른 이름으로 CSV를 저장합니다.다시 감사합니다. 정말 대단해요.
헬랄
Re: 다른 폴더에서 여러 CSV 파일을 가져오고, 값을 업데이트하고, 다른 이름으로 CSV를 저장합니다.감사합니다. 일반적으로 유용한 것 같고 일부는 수행 방법이 명확하지 않기 때문에 게시물을 작성했습니다.
MFI 업데이트 CSV
Re: 다른 폴더에서 여러 CSV 파일을 가져오고, 값을 업데이트하고, 다른 이름으로 CSV를 저장합니다.고마워요 크레이지. 말씀하신 대로 두 번째 예는 잘 작동했습니다. 그러나 하나의 CSV를 열거나 가져오는 경우에만 작동했지만 여러 CSV를 가져올 때는 작동하지 않았습니다. 또한 다른 파일 이름을 사용하여 해당 폴더에 csv를 다시 작성하는 마지막 단계를 수행하도록 안내해 주시겠습니까?
감사합니다,
헬랄
Re: 다른 폴더에서 여러 CSV 파일을 가져오고, 값을 업데이트하고, 다른 이름으로 CSV를 저장합니다.귀하의 JSL이 무엇을 했는지 잘 모르겠습니다.
dt: subjid << :id1 << Set Formula( If( :id2 == "a001", :id1 == "b001") )
<< "보내기" 연산자는 한 번만 나타나야 하며 수식을 추가하는 열은 왼쪽에 있어야 합니다. 그런 다음 if 문에는 조건이 있어야 하고, 그 뒤에 참인 경우에 대한 값과 거짓인 경우에 대한 또 다른 값이 와야 합니다. 이 같은
dt << New Column( "likes",
"character",
formula( If(
Is Missing( name ), // first test
"unknown", // if first test is true
name == "KATIE", // second test
"cats", // if second test is true
"dogs" // if second test is false
)
)
);
이는 열 이름의 값에 따라 고양이 또는 개의 새로운 수식 열을 생성하기 위한 것입니다. 이름이 비어 있으면(누락) "알 수 없음"입니다.
또는 다른 열의 값을 기반으로 기존 열을 덮어쓰는 것이 목표라면 수식 열보다 명시적인 루프가 더 나을 것입니다.
foreachrow(dt,
if(
name == "DANNY", // a test with ==
name = "Dani"; // an assignment with =
sex = "F";
, /* else if */ name == "ROBERT",
name = "Roberta";
sex = "F";
);
);
( 비밀이라면 쉼표와 세미콜론을 이해하는 데 도움이 될 수 있습니다. ) 이름이 일치하지 않는 한 행은 변경되지 않습니다.
두 예제가 어떻게 다른지 확인하세요.
첫 번째 예에서는 수식 열에 할당될 if(...)에 답을 생성해야 합니다. 해당 행에 대해 열을 변경하지 않아야 하는 경우 수식 값은 해당 행의 원래 값이어야 합니다.편집: 죄송합니다. 틀렸어요. 수식 열이 모든 행에 대해 값을 생성하는지 확인하세요.
두 번째 예에서는 선택한 행과 열만 업데이트합니다.
JMP 파일을 저장하지 않고 CSV 파일을 작성할 계획이므로 열에 추가하는 수식 표현식은 저장되지 않습니다. 단, 수식에서 업데이트된 값은 저장됩니다. 두 번째 예.