2017-07-02 56 views
0

這是一個後續this thread我可以使用apps腳本在Google雲端硬盤中解壓縮文件嗎?

我試圖使用由@July.Tech沒有提供的代碼,但我不斷收到未知的壓縮方法錯誤或不正確頭檢查錯誤。當使用兩種不同的gzip方法創建壓縮文件時出現錯誤,所以我認爲該文件被正確地壓縮。

有什麼建議嗎? (我的輸入文件gzip壓縮的,所以我不能用Utilities.unzip()。)

這裏是整個代碼:

reports_folder_id = 'xxxxx'; //id of folder where gzipped csv reports are saved 
report_name = 'xxxxxx.gz'; // name of gzipped CSV file 

function importData() { 
    var fSource = DriveApp.getFolderById(reports_folder_id); 
    var fi = fSource.getFilesByName(report_name); // latest report file 

    eval(UrlFetchApp.fetch('https://cdn.rawgit.com/nodeca/pako/master/dist/pako.js').getContentText()); 

    if (fi.hasNext()) { // proceed if report_name file exists in the reports folder 
    var file = fi.next(); 

    var charData = file.getBlob().getDataAsString(); // same error if .getBytes() is used 

    var binData = []; 
    for (var i = 0; i < charData.length; i++) { 
     binData.push(charData[i] < 0 ? charData[i] + 256 : charData[i]); 
    } 

    var data = pako.ungzip(binData); // I get same error for pako.inflate(binData); 

    var decoded = ''; 
    for (var i = 0; i < data.length; i++) { 
     decoded += String.fromCharCode(data[i]); 
    } 

    } 
} 

如果沒有建議用於固定上述情況,就如何ungzip一個GDrive的任何想法文件編程?

謝謝。

回答

0

你需要找出是否PAKO支持gzip壓縮。如果沒有,你應該尋找另一個支持gzip的壓縮包。

+0

pako應該支持gzip(https://nodeca.github.io/pako/#gzip),但代碼不起作用。任何具體的建議,以解決我的代碼或使用不同的包?謝謝。 –

1

運行提供的示例代碼確實導致未知的壓縮方法錯誤在我的良好環境。

嘗試改變

var charData = file.getBlob().getDataAsString(); // same error if .getBytes() is used 

var charData = file.getBlob().getBytes(); 

所以這是

function myFunction() { 
    reports_folder_id = '<FOLDER_ID>'; 
    report_name = 'zip3.csv.gz'; // name of gzipped CSV file 

    var fSource = DriveApp.getFolderById(reports_folder_id); 
    var fi = fSource.getFilesByName(report_name); 
    eval(UrlFetchApp.fetch('https://cdn.rawgit.com/nodeca/pako/master/dist/pako.js').getContentText()); 

    if (fi.hasNext()) { 
    var file = fi.next(); 
    var blobData = file.getBlob(); 

    var charData = blobData.getBytes(); 

    var binData = []; 
    for (var i = 0; i < charData.length; i++) { 
     binData.push(charData[i] < 0 ? charData[i] + 256 : charData[i]); 
    } 

    var data = pako.inflate(binData); 

    var decoded = ''; 
    for (var i = 0; i < data.length; i++) { 
     decoded += String.fromCharCode(data[i]); 
    } 
    Logger.log(decoded); 

    } 

} 

嘗試在你原來的 「GlicemiaMisurazioni.csv.gz」 文件的一個子集運行此腳本: https://drive.google.com/file/d/0B8geUNXmd4J2YzJoemFLMnBTbVU/view?usp=sharing

(我截斷原來的CSV到32行加快測試的緣故執行 - 原來花費太長時間運行)

檢查日誌顯示,解壓縮工作:

4;02/07/2017 03.00.30;;;158.0;158.0;1;0M0000UMQ5D;;;0;; 
4;02/07/2017 02.59.30;;;158.0;158.0;1;0M0000UMQ5D;;;0;; 
4;02/07/2017 02.58.30;;;159.0;159.0;1;0M0000UMQ5D;;;0;; 
4;02/07/2017 02.57.30;;;159.0;159.0;1;0M0000UMQ5D;;;0;; 
4;02/07/2017 02.56.30;;;158.0;158.0;1;0M0000UMQ5D;;;0;; 
4;02/07/2017 02.56.00;;;;;0;;0.4;Novorapid ;0;Left flank;Test 
+0

不幸的是,使用.getBytes()時仍然會出現「不正確的標題檢查」錯誤。我試了一下我的原始輸入文件:https://drive.google.com/file/d/0B2wwGDRmRP3JR1Q5ZHZHZ1gzUUk/view?usp=sharing,也是我使用的總指揮官給gzip 2MB的CSV(https://drive.google。 com/file/d/0B6XAMITJOyxSUUpyZGJxdkxpY2s/view?usp = sharing),並嘗試使用相同的錯誤。 –

+0

我編輯了一個工作示例的答案,請檢查這次是否有效。 –

相關問題