폴더의 CSV 파일을 연결할 때 재귀를 사용하는 방법은 무엇입니까?안녕하세요. 누군가 이 코드를 수정하도록 도와줄 수 있나요?폴더별로 csv 파일을 연결하려고 합니다. 사용자는 폴더를 선택해야 하며 모든 적격 csv 폴더는 폴더 이름에 따라 연결되어 저장됩니다. 이 방법을 사용하면 사용자는 스크립트 실행당 하나의 폴더를 선택하게 됩니다.
하지만 지금 하려는 작업은 사용자가 기본 폴더를 선택한 다음 스크립트를 실행하고 하위 폴더별로 데이터를 연결하는 것입니다(이전 방법과 마찬가지로 폴더 이름을 파일 이름으로 개별적으로 저장).
하지만 이 코드를 사용하면 모든 csv 파일이 하나의 파일로 연결됩니다. 재귀가 어떻게 작동하는지 수정하고 설명하는 데 도움을 줄 수 있습니까? 그리고 메인 폴더만 열어서 이 파일을 개별적으로(폴더별로 데이터 연결) 저장하려면 어떻게 해야 합니까? JMP 15를 사용하고 있습니다. 감사합니다
p = pick Directory("Select a Folder");<BR />//f = Files In Directory(p);
f = Files In Directory(p, recursive(1));
Dir = Word(-1, p, "/"); //get filename
saveDir = Substr( p, 1, Length( p ) - Length( Word( -1, p, "\/" ) ) - 1 ); //save file outside main folder
/* Removes the file names from the list f which are not CSV files */
for(j=1,j<=N Items(f),j++,
If (Substr(f[j],Length(f[j])-2,3)!= "CSV",
RemoveFrom(f,j,1);
j=j-1;
);
);
A = {}; /* creates a empty list for storing the names of each data table */
B = {};
C = {};
D = {};
k = {};
m = {};
/*Opens each one of the CSV files and deletes all unwanted rows */
for(j=1,j<=N Items(f),j++,
CSV = Open(Concat(p,f[j]), End of Field(comma), Strip Quotes(1), Labels(1),
Column Names Start(3), Data Starts(4), Columns(:MRR=Numeric));
colname = {};
colname = CSV<<GET column="" names="">20 & Contains(colname,"Weight")>50,
InsertInto(A,CSV);
CSV<<SELECT where="">1,
dt2 = dt1<<CONCATENATE>1,
dt3 = dt1<<CONCATENATE></CONCATENATE></CONCATENATE></SELECT></GET>자동화 및 스크립팅Re: 폴더의 CSV 파일을 연결할 때 재귀를 사용하는 방법은 무엇입니까?recursive(1) 옵션에 대해 무엇을 설명해야 합니까?
Names Default To Here(1);
Files In Directory("$SAMPLE_DATA", recursive(1));
해당 옵션이 없으면 폴더에 있는 첫 번째 수준의 파일만 가져오고 재귀를 사용하면 그 안에 있는 하위 폴더와 파일도 가져옵니다.

강조 표시된 것은 recursive(1)이 설정되었기 때문에 존재하는 것입니다.
스크립트와 관련하여 폴더 수준은 몇 개입니까? 바뀔 수도 있지? .csv 파일을 찾을 때까지 여러 수준이 있는 경우 파일 이름은 무엇이어야 합니까?
Re: 폴더의 CSV 파일을 연결할 때 재귀를 사용하는 방법은 무엇입니까?다음은 모든 재귀 파일을 읽고 파일이 발견된 폴더에 따라 별도의 데이터 테이블로 연결하는 시작 스크립트입니다.
나는 개별 오류 검사 등을 모두 포함하지 않았습니다. 해당 내용을 코드에 다시 넣으려면 내 예제를 수정해야 합니다.
이 코드에는 구조적 차이가 있습니다.JSL은 파일을 읽은 후 다음 파일을 읽기 전에 파일을 연결합니다.최대한 많이 확인했지만 여전히 문제가 있을 수 있습니다.
names default to here(1);
p = pick Directory("Select a Folder");//f = Files In Directory(p);
f = Files In Directory(p, recursive(1));
for(i=nitems(f),i>=1,i--,
if(uppercase(word(-1,f[i],"."))!="CSV",
remove from(f,i,1)
)
);
// Create the Associative Array with all of the files, with their directories
// Place all data into a data table, and then move into an Associative Array which will give the
// folder(data table to concatenate to)
dt= new table("The Files", new column("File", character));
dt << add rows(nitems(f));
dt:file<<SET values=""></SET>Re: 폴더의 CSV 파일을 연결할 때 재귀를 사용하는 방법은 무엇입니까?안녕하세요. 기본 폴더와 내부에 CSV가 포함된 여러 폴더의 두 가지 수준의 폴더만 있습니다. 다음은 재귀를 사용하지 않은 스크립트의 출력 예입니다. 제가 하고 싶은 것은 스크립트가 실행될 때 Main 폴더만 선택되고 스크립트는 다음과 같은 출력을 갖게 되는 것입니다.

Re: 폴더의 CSV 파일을 연결할 때 재귀를 사용하는 방법은 무엇입니까?음수 색인이 있는 Word()를 사용하면 폴더 이름을 쉽게 얻을 수 있습니다. 아래 예
Names Default To Here(1);
foldername = Word(-1, "F1/1.jmp", "/\"); //"1.jmp"
키가 폴더 이름인 연관 배열을 만들 가능성이 높습니다. 그런 다음 파일 목록을 반복하고 폴더가 연관 배열에 이미 존재하지 않는지 확인한 다음 거기에 추가하고 해당 값을 빈 목록으로 초기화합니다. 그런 다음 삽입을 사용하여 해당 연관 배열에 파일 경로를 추가하여 키를 수정할 수 있습니다(파일을 더 쉽게 열 수 있도록 전체 경로를 사용하십시오). 파일 목록을 살펴본 후 연관 배열에 대해 다른 루프를 수행하십시오. 이번에는 파일을 열고 진행하면서 연결하세요.
Re: 폴더의 CSV 파일을 연결할 때 재귀를 사용하는 방법은 무엇입니까?안녕하세요. 저는 아직 JMP 15를 사용하고 있는데 이 코드 줄에 질문이 있습니다. 이것을 JMP 15(for 루프 형식)로 어떻게 변환할 수 있나요? JMP 15의 for 루프 형식에 있을 때 {table}이 무엇인지 혼란스럽습니다. 또한 이 CSV 파일을 적절하게 저장하려면 어떻게 해야 합니까? 내 예를 들어, 그것은 성별에 의한 것입니다. 따라서 파일명은 성별(Male.csv & Female.csv)로 저장해야 합니다.
For Each( {table}, theArray << get keys,
stable = theArray << get value( table );
stable = Substitute( stable, ":", "-" );
stable = Substitute( stable, "/", "-" );
If( Try( Data Table( stable ) << get name, "" ) == "",
dt = New Table( theArray << get value( table ) ),
dt = Data Table( stable )
);
Re: 폴더의 CSV 파일을 연결할 때 재귀를 사용하는 방법은 무엇입니까?나는 이것이 작동해야 한다고 생각합니다:
arrayKeys = theArray << get keys;
For(i=1, i <=nitems( arrayKeys), i++,
table = arrayKeys[i];
stable = theArray << get value( table );
stable = Substitute( stable, ":", "-" );
stable = Substitute( stable, "/", "-" );
If( Try( Data Table( stable ) << get name, "" ) == "",
dt = New Table( theArray << get value( table ) ),
dt = Data Table( stable )
);