JMP Zip 아카이브 명령을 사용하여 압축을 해제하는 방법이전 질문에서 파일 압축 해제가 가능한지 물었습니다.나는 블로그를 읽었다( FILENAME ZIP을 사용하여 SAS에서 데이터 파일 압축 해제 및 읽기 - SAS Dummy ), 하지만 지금은 JSL을 사용하여 따라가는 데 어려움을 겪고 있습니다.
150개의 압축 폴더가 있는 폴더가 있습니다.각 폴더에는 장치 이름, 주문 점수, 날짜(예: 장치 X_2016_07_20.zip)가 있습니다.장치 이름으로 새 폴더를 만들고 싶습니다(작동할 수 있음).zip 폴더를 열고 그 안의 다른 모든 파일을 볼 수 있지만 새 폴더에 압축을 풀거나 복사하는 방법을 알 수 없습니다.누군가 나에게 도움을 줄 수 있습니까?
이것이 내가 지금까지 가지고 있는 것입니다:
directory = Pick Directory();
filesInDirectory = Files In Directory( directory );
nFiles = N Items( filesInDirectory ); //get number of zip files in directory
For( i = 1, i <= nFiles, i++,
fileName = filesInDirectory;
pos = Contains( fileName, "_" );
deviceName = Left( fileName, pos - 1 ); //get the device name
subDir = directory || deviceName;
//Create Directory(subDir); //eventually create a new sub directory
za = Open( directory || fileName, zip );
dirlist = za << dir;
Show( dirlist ) // see all contents of zipped folder
;
);
Re: JMP Zip 아카이브 명령을 사용하여 압축을 푸는 방법위의 예제 코드를 따르고 있는데 zip 파일의 내용을 읽으려고 하면 빈 데이터가 나타납니다.
예를 들어 file1.csv가 file1.zip으로 압축되었고 file1.zip에서 file1.csv를 읽으려고 합니다.
내 코드에서 무엇이 잘못되었는지 알려주시겠습니까?
za = Open( unzip_file_list[1], zip);
dirlist = za << dir;
// below line correctly giving me file1.csv
show(dirlist);
// below two lines correctly gives me full file path.
full_path = directory || dirlist[1];
show(full_path);
// below line returns "Empty()" in log windows.
txt = za << read( full_path);
Re: JMP Zip 아카이브 명령을 사용하여 압축을 푸는 방법<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />환영/감사 및 늦은 후속 조치: 압축된 데이터 로드 도움이 될 수도 있습니다.
Re: JMP Zip 아카이브 명령을 사용하여 압축을 푸는 방법매우 감사합니다!나는 확실히 그것을 복잡하게 만들었습니다.설명도 훌륭합니다.
Re: JMP Zip 아카이브 명령을 사용하여 압축을 푸는 방법다음 줄은 zip 아카이브 개체인 za를 사용하여 아카이브에서 멤버를 읽습니다.이 같은:
za = Open( "$desktop\test.zip", zip );
dirlist = za << dir;
Show( dirlist ); // see all contents of zipped folder
// dirlist = {"fft.jmp", "fft2.jsl"};
For( i = 1, i <= N Items( dirlist ), i++,
If( Right( dirlist, 4 ) == ".jmp" /*binary data*/,
blob = za << read( dirlist, Format( blob ) );
Save Text File( "$desktop\deleteme_" || dirlist, blob );
);
If( Right( dirlist, 4 ) == ".jsl" /*text data*/,
text = za << read( dirlist );
Save Text File( "$desktop\deleteme_" || dirlist, text );
);
);
zip 파일에는 바이너리 데이터(이 경우 JMP 데이터 테이블) 또는 일반 텍스트(JMP 스크립트)가 포함될 수 있기 때문에 두 가지 예가 굵게 표시되어 있습니다.이진 데이터는 JSL 문자열에 저장할 수 없지만 BLOB는 작동합니다.다음 줄인 saveTextFile은 문자열과 BLOB를 모두 인식합니다(이름이 있더라도 BLOB에 대한 이진 파일을 저장함).특히 누군가가 멤버를 편집/추가/삭제했을 수 있는 경우 zip 파일의 멤버 순서에 의존해서는 안 됩니다.
(저는 .zip 파일을 다른 .zip 파일로 복사하는 것이 아니라 구성원을 추출하려고 한다고 가정합니다.zip 파일을 전혀 열지 않고도 그렇게 할 수 있습니다.)
편집: 텍스트 파일을 복사하는 경우에도 BLOB를 사용할 수 있습니다.JSL에서 텍스트를 처리하려는 경우 BLOB가 더 어렵게 만듭니다.
Re: JMP Zip Archive 명령을 사용하여 압축을 푸는 방법각각의 항목을 얻으려면 i를 인덱스로 사용해야 합니다. 예를 들어 dirlist 대신 dirlist[i]를 사용해야 합니다.
그러면 위의 코드가 훌륭하게 작동합니다.
za = Open( "$desktop\test.zip", zip );
dirlist = za << dir;
For( i = 1, i <= N Items( dirlist ), i++,
blob = za << read( <FONT color="#339966"><STRONG>dirlist[i]</STRONG></FONT>, Format( blob ) );
);
참고: JMP Zip 아카이브 명령을 사용하여 압축을 푸는 방법RP = Run Program( Executable( "C:\Program Files\WinRAR\WinRAR.exe" ), Options( {"e -or C:\1\abc.7z C:\2"} ) );