JMP Zip アーカイブ コマンドを使用して解凍する方法以前の質問で、ファイルを解凍できるかどうかを尋ねました。ブログを読んだ( FILENAME ZIP を使用して SAS でデータ ファイルを解凍して読み取る - SAS ダミー)、しかし、現時点では、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 スクリプト) が含まれている可能性があるため、太字で示した 2 つの例があります。バイナリ データを JSL 文字列に格納することはできませんが、BLOB は機能します。次の行、saveTextFile は、文字列と BLOB の両方を認識します (その名前に関係なく、BLOB のバイナリ ファイルを保存します)。特に誰かがメンバーを編集/追加/削除した可能性がある場合は、zip ファイル内のメンバーの順序に依存しないでください。
(.zip ファイルを別の .zip ファイルにコピーするのではなく、メンバーを抽出することを想定しています。zip ファイルをまったく開かなくても実行できます。)
編集: テキスト ファイルをコピーするだけの場合は、テキスト ファイルにも BLOB を使用できます。テキストを JSL で処理したい場合、BLOB ではそれが難しくなります。
Re: JMP Zip アーカイブ コマンドを使用して解凍する方法それぞれのエントリを取得するには、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"} ) );