2017-06-07 4 views
1

Ich bin durch eine Liste von .tar.gz-Dateien durchforsten, entpacken Sie sie und machen Sie eine Analyse mit ihnen. So weit, ist es gut. Das Problem ist, wenn einige der Dateien beschädigt sind, untar einen Fehler auslöst und die Verarbeitung stoppt.Fangen Sie einen Fehler von tar und fahren Sie mit der Verarbeitung fort

Mein Code ist wie folgt aus:

f <- dir(path.to.files, pattern=".tar.gz") 
for(k in 1:length(f)){ 
    # make sure the temporary dir is empty 
    file.remove(dir(path = tempdir(), full.names = TRUE) 
    untar(f[k], exdir = tempdir()) 
    # do some analisys with the extracted files 
} 

Ich würde eher den Fehler fangen von untar, überspringen, die beschädigte Datei, und einfach meine Schleife fortgesetzt. Ich habe bereits versucht, try und tryCatch aber ohne Glück zu verwenden.

Gibt es eine Möglichkeit zu sagen untar, um eine Warnung anstelle eines Fehlers zu werfen?

+0

Bitte fügen Sie eine Beschreibung dessen ein, was passiert ist, als Sie versuchten, "try" und "tryCatch" zu verwenden. " Dies könnte helfen, das Problem zu diagnostizieren. Außerdem gibt es ein Extras-Argument in "untar", das Optionen an das tar-Programm übergibt. Vielleicht kann das tar-Programm selbst eine Option haben, um besser zu scheitern. – lmo

+0

'try' führt nur zu einer zusätzlichen Warnung: for (i in seq_len (ceiling (Größe/512L))) aber ich habe herausgefunden, dass ich' tryCatch' falsch verwendet habe. Ich stelle es einfach vor den Untar-Befehl, ohne den Fehler zu bewerten. Durch das Einfügen einer Fehlerbehandlungsfunktion in tryCatch wurde das Problem gelöst. Danke trotzdem. – smoff

Antwort

1

Sie können die Schleife fortsetzen, indem Sie next zum Argument finally von tryCatch hinzufügen. Betrachten Sie das folgende Beispiel. Die Schleife läuft von 1 bis 3 und gibt den Iterationswert aus. Wenn der Wert gleich 2 ist, versucht R die Datei "untitled-3.synctex1.gz" zu entpacken, die in meinem aktuellen Arbeitsverzeichnis existiert nicht

for(i in 1:3) { 
    print(i) 
    if(i == 2) tryCatch(untar("untitled-3.synctex1.gz"), finally=next) 
} 

[1] 1
[1 2]
anzeigen Traceback

Rerun mit Debug Fehler in gzfile (path.expand (tarfile), "rb"): kann nicht die Verbindung Zusätzlich öffnen: Warnmeldung:
in gzfile (path.expand (tarfile), "rb"): kann komprimierte Datei 'untitle nicht öffnen d-3.synctex1.gz‘wahrscheinlicher Grund‚Keine solche Datei oder das Verzeichnis‘
[1] 3

Wir sehen die Fehlermeldung und die Warnung, aber die Schleife weiter auf die nächste Iteration und druckt die dritter Wert.

+0

Schön. Ich habe eine ähnliche Lösung gefunden, indem ich'NULL' zum dritten Argument von'tryCatch' hinzugefügt und dann ausgewertet habe, ob der Rückgabewert von'tryCatch'NULL ist. – smoff

Verwandte Themen