Combine múltiples archivos txt o csvEste script combinará varios archivos txt o csv en un solo archivo. La secuencia de comandos solicita un directorio de destino, abre el primer archivo y luego agrega iterativamente los archivos posteriores al primero utilizando la función Concatenar tabla.Se crea una nueva columna en el archivo final: esta columna contendrá el nombre del archivo del que proviene cada fila. Si todos los archivos de texto tienen los mismos nombres de columna (idénticos), esas columnas se apilarán (concatenarán) en una sola columna. Las columnas únicas también se transferirán al archivo final.
La secuencia de comandos tiene varios bloques de secciones comentados, estas secciones de la secuencia de comandos podrían usarse para combinar varios archivos de Excel. Al combinar archivos de Excel, se supone que estos archivos .xls o .xlsx solo tendrán una hoja de trabajo.
-------Actualizado el 01 de junio de 2016
Tenía una pregunta interesante sobre este script. Alguien tenía una pila de archivos CSV donde los nombres de las columnas estaban en la segunda fila y, para empeorar las cosas, los nombres de las columnas estaban delimitados por punto y coma mientras que el texto estaba delimitado por comas.Una forma de lidiar con esto es agregar Configuración de importación al script.Esta es una de esas cosas que estoy feliz de que JMP escriba para mí.Abrí e importé manualmente el archivo (usando Archivo>Abrir>Abrir con vista previa, luego en el cuadro de diálogo configuré las columnas para comenzar en la segunda fila y agregué un delimitador "otro" de ";".Después de importar el archivo, fui al script de origen y encontré el argumento Configuración de importación.
Para hacer que el script abra estos archivos, agregué una expresión, importset=expr(import settings(...pegar script aquí...)); cerca de la parte superior del guión. (Es una expresión porque no es útil evaluar la configuración de importación hasta que la necesite más tarde cuando abra los archivos).
Luego, cerca de la parte inferior, agregué la expresión al argumento abierto, open(filename,importset).
NOTA IMPORTANTE: si va a descargar este segundo script con el filtro de importación y espera que funcione automáticamente en sus tablas CSV con formato inusual...simplemente no va a funcionar, debe crear su propia configuración de importación y sustituirla por la configuración que se encuentra aquí, por ejemplo.
--------También hubo una pregunta sobre cómo hacer que esto funcione en un MAC hace un tiempo.
Agregué otro bit para que también funcione en una Mac (lo que significa que no probé esto en una PC)
If( Host is( Mac ),
filepath="/"||prefilepath,
filepath = Convert File Path( prefilepath, Windows )
);
-----Actualizado el 10 de octubre de 2016
Justin C notó que los nombres de archivo con varios "." no funcionaban tan bien y sugirió cambiar el "elemento" a -1 para que las extensiones de archivo se usen en lugar del segundo elemento para las extensiones de archivo. Buena solución y una idea importante a tener en cuenta cuando se trabaja con nombres de archivos. ¡Gracias, Justin!
UtilidadesRe: Combinar varios archivos txt o csvEstoy descubriendo que las columnas no siempre se unen correctamente en mi caso.¿Alguien puede ayudar con esto?
Tengo un montón de archivos que me gustaría concatenar, pero el orden de las columnas cambia ocasionalmente, según el ejemplo que se muestra a continuación:
Archivos 1-3
Orden de las columnas (A,B,C,D,E,F,G)
Archivos 4-100
Orden de las columnas (A,B,C,D,E, H ,F,G)
Archivos 101-1000
Orden de las columnas (A,B,C, k ,DELAWARE, H ,F,G, I , j )
Me gustaría combinar todos estos archivos y asegurarme de que los datos de cada columna siempre terminen en la columna adecuada de la tabla final.También quiero conservar todos los datos (no elimine la columna K, simplemente deje todas las filas en blanco donde no existía la columna K).¡Cualquier ayuda sería muy apreciada!
Re: Combinar varios archivos txt o csv¿Hay alguna manera de agregar un encabezado en este script?Tengo unos 20.000 archivos con datos sin encabezados
Re: Combinar varios archivos txt o csvHola,
Soy nuevo en las secuencias de comandos JMP. Por alguna razón, la configuración de importación no me funciona cuando combino varios archivos de texto. Puedo ver los archivos concatenados. En mi caso, el nombre de la columna comienza en 11 y los datos comienzan en 12. Pero los archivos combinados comienzan desde la columna 1 en lugar de comenzar desde la 11. Por favor, indique lo que me estoy perdiendo.
gracias
Re: Combinar varios archivos txt o csvCreé una solución para esto que consiste en copiar los archivos en el directorio temporal y cambiarles el nombre. No puedo ver ningún medio para adjuntar un archivo, así que aquí está el código.
names default to here (1);
Clear Symbols();
//Import settings, sometimes CSV files aren't exaclty formatted as CSV. Add import settings
//This is an expression to use later in the Open argument.
//Column names start on the second row, and are semicolon delimited
importset=expr( Import Settings(
End Of Line( CRLF, CR, LF ),
End Of Field( Comma, Other( ";" ), CSV( 0 ) ),//use ";" as a delimiter too
Strip Quotes( 1 ),
Use Apostrophe as Quotation Mark( 0 ),
Scan Whole File( 1 ),
Treat empty columns as numeric( 0 ),
CompressNumericColumns( 0 ),
CompressCharacterColumns( 0 ),
CompressAllowListCheck( 0 ),
Labels( 1 ),
Column Names Start( 2 ),//starting on second row
Data Starts( 3 ),//data starts on 3rd row
Lines To Read( "All" ),
Year Rule( "20xx" )
));
//set up variables with starting values
filelist={}; //empty list
//launch dialog to get the file location
prefilepath = munger(Pick Directory( "Browse to the Directory of the .txt / .csv files " ),1,"/","");
If( Host is( Mac ),
filepath="/"||prefilepath,
filepath = Convert File Path( prefilepath, Windows )
);
prefilelist = Files In Directory( filepath );
n2=nitems(prefilelist);
//filter out any non-txt or csv files
For( i2 = 1, n2 >= i2, i2++,
file=(prefilelist[i2]);
If( Item( 2, prefilelist[i2], "." ) == "txt" | Item( 2, prefilelist[i2], "." ) == "csv",
Insert Into( filelist,file),
show(file)
)
);<BR />
nf=nitems(filelist); //number of items in the working list
tempDir = "$TEMP\JMP\";
Create Directory(tempDir); //create the temp folder in the "%temp%" windows directory
//for each .csv file found on the server
For( i3 = 1 , i3 <= nf, i3++,
copyFileName = filelist[i3];
csvPos = Contains(filelist[i3],".csv"); //determine where in the filename .csv is
newFileName = Left(copyFileName, csvPos + 3 ); //determine the filename without the extra bits after .csv
Copy File (filepath||filelist[i3], tempDir||copyFileName);//copy the file to the temp folder
Rename File (tempDir||copyFileName, newFileName);//rename the file without the extra bits after .csv
filelist[i3] = newFileName; //replace the reference in the array to this file
);//end of the for loop
cctable= New Table( "Combined data table ");//make an empty table
cctable<<NEW column=""></NEW>Re: Combinar varios archivos txt o csvTengo algunos problemas para hacer que esto funcione.Creo que el problema es que estoy usando archivos que son esencialmente archivos de texto delimitados por comas pero con una extensión .log.
Cambié el txt a un registro en su código en:
Elemento (-1, prelista de archivos [i2], ".") == "registro"
me sale un error de
Enviar espera objeto programable en acceso o evaluación de 'Enviar', dt << /*###*/Run Formulas() /*###*/
en:
dt<< ejecutar fórmulas();
Si cambio las extensiones de mis archivos a .txt, funciona.Sin embargo, tengo miles de archivos que quiero combinar y se agregan docenas diariamente. ¿Hay alguna manera de hacer que esto funcione con archivos que tienen una extensión .log?
2da pregunta
Mis archivos no tienen encabezados.¿Hay alguna forma de combinar los archivos y luego agregar encabezados a la tabla de datos?Actualmente toma la fila superior del primer archivo y lo convierte en un encabezado, que son todos los datos.
Gracias por cualquier ayuda.
Re: Combinar varios archivos txt o csvSolo quiero darte las gracias, Byron. Ese es un gran y práctico ejemplo.
¡Este script me ahorra mucho tiempo!
Ese script hace en segundos lo que me estaba tomando horas y horas de trabajo.
¡¡¡Gracias!!!
Re: Combinar varios archivos txt o csv<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />El mismo enfoque funcionará con "join". Simplemente intente sustituir el argumento concat con un argumento de combinación.(realice la unión manualmente y luego copie el script de origen en la tabla resultante para ver un ejemplo de cómo se vería el argumento de unión
Re: Combinar varios archivos txt o csv¿Hay alguna manera fácil de combinar varios archivos txt o csv uno al lado del otro usando JOIN en lugar de combinarlos verticalmente con Concatenar en Combinar tablas de txt.jsl ?
Re: Combinar varios archivos txt o csvHola Byron, este script funciona muy bien. Modifiqué ligeramente para seleccionar un subconjunto de los datos de los archivos abiertos, agregar columnas, cambiar caracteres a numéricos, etc. Una pregunta que tenía, ¿hay una manera simple de modificar el script para especificar la carpeta donde están los archivos y no tener ¿una ventana emergente?
Gracias
TS
Re: Combinar varios archivos txt o csvEste script no se ejecuta en mi sistema: Mac OS X 10.10.5 + JMP Pro 12.1.0
Re: Combinar varios archivos txt o csvsí, la referencia negativa es útil y funciona en casi todas las funciones que hacen referencia a la posición del carácter, así como en algunos lugares que no esperarías; como, imagina tener -1 lugares decimales.
Re: Combinar varios archivos txt o csvHola Bryan y todos,
Pude agregar una pequeña actualización: elimine las extensiones de archivo finales como .csv o .txt del nombre de la columna de origen:
entonces en la última sección en lugar de:
establecer cada valor (filenow)
Yo añadí :
establecer cada valor (eliminar (filenow,-4,-1))
¡Me sorprendió que la referencia negativa funcionara!
Re: Combinar varios archivos txt o csvHola Byron,
Buen guión y funciona a las mil maravillas en JMP 12. Me preguntaba acerca de una buena manera de comenzar a leer los archivos de datos de origen de una fila específica, si lo desea, trunque la información del encabezado.Por ejemplo, ¿comenzar con la fila que comienza con la palabra "CH" si todos los archivos de origen tienen el mismo formato?
Re: Combinar varios archivos txt o csvHola Byron,
Está sucediendo solo en este script. Muestra el error en blanco "NItem ()" en la ventana de registro después de ejecutar el script. Así que solo copio todo el script y lo pego en la nueva ventana del script, luego funciona bien.
Gracias
Re: Combinar varios archivos txt o csvNo estoy seguro de entender la pregunta. ¿Se replica este comportamiento con otros scripts?
Re: Combinar varios archivos txt o csvHola Byron,
Gracias por este valioso guión. Estoy usando este script para agregar varios archivos .txt. Pero se ejecuta después de copiar el mismo script en un nuevo script. Quiero preguntar por qué no se ejecuta al abrir el mismo script en el primer intento. Gracias por la respuesta de antemano. Este guión es muy útil.
Re: Combinar varios archivos txt o csvsean,
En MAC, la ventana de diálogo para seleccionar un directorio o para seleccionar un archivo es idéntica. El script lo está buscando para identificar un directorio que contenga archivos csv y/o txt. El script actualmente permite que se concatenen archivos csv y txt en la lista de archivos. Si desea que sea más restrictivo, simplemente edite el tipo de archivo que desea excluir de esta parte del script.
//filter out any non-txt or csv files
For( i2 = 1, n2 >= i2, i2++,
file=(prefilelist[i2]);
If( Item( 2, prefilelist[i2], "." ) == "txt" | Item( 2, prefilelist[i2], "." ) == "csv",
Insert Into( filelist,file),
show(file)
)
);
Lo que sería genial es que la secuencia de comandos devuelva una lista de las extensiones de archivo en el directorio seleccionado y luego permita que el usuario marque los tipos de archivos para agregar a la variable de lista de archivos.
Si tiene tiempo para hacer algunas secuencias de comandos, publique la secuencia de comandos actualizada.
Atentamente,
Byron
Re: Combinar varios archivos txt o csvbrayan,
Uso JMP 10.0.0 en OS X 10.10.2. Se abrirá una ventana cuando ejecute el script para seleccionar los archivos. Sin embargo, no puedo seleccionar ningún archivo .txt o .csv en la ventana abierta. No estoy seguro de si la secuencia de comandos necesita una revisión adicional para JMP (OS X ver.). ¿Podría ayudar a resolver este problema? Gracias.
sean
Re: Combinar varios archivos txt o csvGracias, lo tengo ahora.
Re: Combinar varios archivos txt o csvValle,
¿Te importaría volver a comprobar el archivo adjunto?
Lo volví a adjuntar.
-Byron
Re: Combinar varios archivos txt o csv¿Dónde está el guión?Parece que no puedo encontrarlo en ningún lado.