0 votos

Necesito un AppleScript para fusionar todos los archivos .CSV excluyendo el registro de cabecera de todos menos uno

He buscado una solución a esto y he encontrado algunas formas geniales de hacerlo usando la línea de comandos. Sin embargo, me gustaría usar AppleScript para poder incorporarlo a otros scripts más adelante. Necesito "fusionar" todos los archivos .CSV de una carpeta en un único archivo .CSV. La carpeta tendrá aproximadamente 10 archivos (el número varía cada día) cada uno con unos cientos de registros. Las cabeceras son las mismas para cada archivo, por lo que necesito mantener la primera cabecera y eliminar la cabecera de todos los demás. En última instancia, me gustaría tener el archivo de salida en la misma carpeta y nombrarlo con el nombre del primer archivo con una ligera modificación como la siguiente. Los nombres actuales de los archivos son los siguientes IC-Nombre de la Escuela YYYY-YBPoseExport.CSV Me gustaría sustituir el Nombre de la Escuela por algo así como "Combinado". Soy nuevo en esto y no sé por dónde empezar. Cualquier ayuda será muy apreciada.

1voto

qarma Puntos 71
to mergeCSVFiles at path as «class furl»
        local path, tmp

        set (path) to path as text
        get the path & "newfile.tmp"
        set tmp to the result's POSIX path

        close access (open for access tmp)
        set eof of tmp to 0

        set my text item delimiters to {linefeed, "IC-", space}

        tell application id "com.apple.SystemEvents"
                tell (the folder path's files whose name extension = "csv")
                        get the first file's POSIX path
                        read the result using delimiter linefeed
                        write "" & result & linefeed to tmp as "utf8"

                        repeat with f in rest of (get POSIX path of files)
                                read f using delimiter linefeed
                                write (rest of result as text) & linefeed ¬
                                        to tmp as "utf8" starting at eof
                        end repeat

                        set suffix to the last text item of (get some file's name)
                end tell

                set ICCombined to "IC-Combined" & space & the suffix
                set the name of file tmp to ICCombined
                get the path of file ICCombined in the folder path
        end tell

        tell application id "com.apple.finder" to activate (reveal the result)
end mergeCSVFiles

A este manejador se le puede pasar una ruta de archivo absoluta (completa) a la carpeta que contiene el .csv archivos que se van a fusionar. Inicialmente, se crea un archivo en blanco llamado "newfile.tmp" en el que se ha introducido el contenido completo de la primera .csv se escribe el archivo. El resto de .csv se leen en su totalidad y se añaden a "newfile.tmp" con la excepción de sus primeras líneas (sus cabeceras).

Una vez completada la fusión, "newfile.tmp" pasa a llamarse "IC-Combined <suffix>.csv" , donde <suffix> se obtiene de uno de los otros .csv Los nombres de archivo se consideran todo lo que aparece después del primer espacio, pero sin incluirlo. Si su nombre de archivo de ejemplo incluye el sufijo literal, el archivo resultante se llamará "IC-Combined YYYY-YBPoseExport.CSV" (aunque realmente deberías mantener las extensiones de tus archivos en minúsculas, de lo contrario puede ser problemático en aplicaciones (incluyendo el shell) que enumeran archivos y realizan búsquedas en los nombres de los archivos distinguiendo entre mayúsculas y minúsculas, lo cual es bastante estándar en los sistemas tipo UNIX).

Finalmente, el archivo se revela en Buscador que coincidirá con su cambio de nombre.

Para invocar el manejador, he aquí un ejemplo:

mergeCSVFiles at "/Users/CK/Documents/Some Folder"

No devuelve ningún valor.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X