Importe varios archivos CSV en una carpeta y apílelosHola a todos,
Tengo un problema con mis archivos CSV, que tienen un separador extraño ( "," ) y no puedo descubrir cómo lograr que JMP los importe automáticamente.
Mi objetivo es poder elegir una carpeta que contenga varios archivos CSV, con la misma estructura y nombres de columnas, importar todos los datos y apilarlos.
He adjuntado un archivo CSV que se parece al mío.
Espero que puedas ayudarme:)
Saludos, Christian
Automatización y scriptingAcceso a datosPersonalización masivaRe: Importar varios archivos CSV en una carpeta y apilarlosEn JMP,
Texto a columnas es LA herramienta para gestionar este tipo de grupos de separadores:
No le importa si es " o "","" o """
¡Trata varios separadores como uno solo!
Esto puede ser muy perjudicial: Texto a columnas: manejar correctamente los datos faltantes
... pero a menudo es exactamente lo que necesitamos, como aquí.
Entonces,
a) cargar los archivos vía MFI con la opción “Fila por Línea”
b) y usar Texto a columnas con Delimitadores = ,"

dts = Multiple File Import(
<
<SET folder="">
</SET>
<BR />
Re: Importar varios archivos CSV en una carpeta y apilarlosTambién parece tener "" al final de cada fila y la primera columna no tiene el formato "," sino ,".

No estoy seguro de si esto funcionará para todos sus archivos, pero los manejaría como texto, los limpiaría en un csv "adecuado" y luego los abriría desde la memoria en una tabla JMP.
Names Default To Here(1);
filedir = "$DOWNLOADS\New folder (2)\";
csvfiles = {};
For Each({filename}, Files In Directory(filedir),
If(Ends With(filename, ".csv"),
Insert Into(csvfiles, filedir || filename);
);
);
dt_res = Empty();
For Each({csvfile}, csvfiles,
txt = Load Text File(csvfile);
lines = Words(txt, "\!N");
lines_fixed = Transform Each({line}, lines,
items = Concat items(Words(line, "\!","), ",");
);
csv_txt = Concat Items(lines_fixed, "\!N");
dt = Open(Char to Blob(csv_txt), "text", Invisible);
dt << Set Name(Word(-1, csvfile, "\/"));
If(Is Empty(dt_res),
dt_res = dt;
,
dt_res << Concatenate(
dt,
"Append to first table";
);
Close(dt, no save);
);
);
dt_res << Bring Window To Front;
Re: Importar varios archivos CSV en una carpeta y apilarlosAh, cierto, palabras() usa el mismo truco que Texto a columnas() .
Re: Importar varios archivos CSV en una carpeta y apilarlosProfundizando más:
El problema principal es el

en la configuración de la MFI.
JMP está contento con la primera y la última comilla, y lee toda la línea de texto como una columna (¿manteniendo cada segunda comilla?):

Editar: ¿Primera y última comilla? No, es más complicado. ¡Ver más abajo!
Como solución rápida, se puede cambiar la configuración de cotización CSV a otro carácter:

<
<SET csv="" quote=""></SET>
<P>y utiliza las comillas como separador:</P> <P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="hogi_2-1756463581618.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="hogi_2-1756463581618.png" style="width: 193px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="hogi_2-1756463581618.png" style="width: 193px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="hogi_2-1756463581618.png" style="width: 193px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="hogi_2-1756463581618.png" style="width: 193px;"><span class="lia-inline-image-display-wrapper" image-alt="hogi_2-1756463581618.png" style="width: 193px;"><img src="https://us.v-cdn.net/6038925/uploads/images/81530i4BF1266286F27E58/hogi_2-1756463581618.png" role="button" title="hogi_2-1756463581618.png" alt="hogi_2-1756463581618.png" /></span></SPAN></SPAN></SPAN></SPAN></SPAN></P> <P><BR />Esto permite que JMP lea los archivos, pero:</P> <P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="hogi_3-1756463633644.png" style="width: 773px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="hogi_3-1756463633644.png" style="width: 773px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="hogi_3-1756463633644.png" style="width: 773px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="hogi_3-1756463633644.png" style="width: 773px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="hogi_3-1756463633644.png" style="width: 773px;"><span class="lia-inline-image-display-wrapper" image-alt="hogi_3-1756463633644.png" style="width: 773px;"><img src="https://us.v-cdn.net/6038925/uploads/images/81531iE7879526B8F81200/hogi_3-1756463633644.png" width="773" height="87" role="button" title="hogi_3-1756463633644.png" alt="hogi_3-1756463633644.png" /></span></SPAN></SPAN></SPAN></SPAN></SPAN></P> <P>A diferencia de <FONT face="courier new,courier">Palabras()</FONT> y <FONT face="courier new,courier">Texto a columnas()</FONT> , <FONT face="courier new,courier">IMF</FONT> trata cada separador (individual) como un separador.<BR /> con la idea: datos faltantes = datos faltantes, ¡no se omite ninguna columna!</P> <P>Gracias MFI, para la mayoría de los archivos esto tiene sentido : - )</P> <BR /> <P>No aquí, por lo tanto, después de la importación, el usuario debe eliminar las columnas vacías.<BR /><BR /> Tenga en cuenta: Importar el archivo con una configuración de cotización CSV vacía no funciona.</P> <P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="hogi_4-1756463762291.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="hogi_4-1756463762291.png" style="width: 158px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="hogi_4-1756463762291.png" style="width: 158px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="hogi_4-1756463762291.png" style="width: 158px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="hogi_4-1756463762291.png" style="width: 158px;"><span class="lia-inline-image-display-wrapper" image-alt="hogi_4-1756463762291.png" style="width: 158px;"><img src="https://us.v-cdn.net/6038925/uploads/images/81533iF2FFDC8A29503E1D/hogi_4-1756463762291.png" role="button" title="hogi_4-1756463762291.png" alt="hogi_4-1756463762291.png" /></span></SPAN></SPAN></SPAN></SPAN></SPAN></P> <CODE class=" language-jsl"><
<SET csv="" quote=""></SET> <P>JMP utilizará automáticamente una comilla como cita CSV y cargará todo el archivo como una sola columna.</P>
Re: Importar varios archivos CSV en una carpeta y apilarlosPara más diversión con cotizaciones de MFI y CSV
Utilice el archivo adjunto
entrada: JMP:

Una vez que se ha establecido una hipótesis que se ajusta a las filas 1 a N, es fácil encontrar un cisne negro para la fila N+1...
Re: Importar varios archivos CSV en una carpeta y apilarlos0. Si hay caracteres delante de las comillas, no se trata de comillas CSV.
- Si el primer carácter de la celda es una comilla, es una comilla CSV -> escanee para encontrar la comilla de cierre
- Si en tu camino hay dos comillas adyacentes, trátalas como una comilla simple.

- Si en tu camino encuentras una coma, es una coma.
- Si en tu camino encuentras una nueva línea, es una nueva línea (!!)
En realidad el contenido de la celda es:

- ¿Algún otro personaje interesante?...
- Si encuentras una comilla de cierre, la cita está completa.
- buscar un delimitador o un salto de línea.
cualquier personaje que encuentres: simplemente agrégalo a la cita.
- aquí: una comilla simple es una comilla simple
- 2 comillas son 2 comillas (comparar #2)
- Si encuentra un delimitador o un salto de línea, este es el final de la celda (compare el n.° 4)
- Con un espacio delante de la cita, la cita no es una cita CSV.
(subconjunto de #0)
Me tomó un tiempo entenderlo 
Del post anterior, por eso lo agregué como un caso aparte.
archivo csv: JMP:

Re: Importar varios archivos CSV en una carpeta y apilarlosA la luz de los nuevos hallazgos, la tabla de datos en la publicación original ahora parece más familiar:
Se parece a una tabla de datos que, en el primer paso ('V1'), se exportó con comillas agregadas a las columnas numéricas y de caracteres (solo la primera columna no recibió las comillas adicionales:

Asombrosamente:
La versión 1 se puede abrir en JMP y Excel mediante arrastrar y soltar. Ambos programas descomprimen automáticamente las citas CSV y cargan la tabla en el formato correcto. Entonces, ¿cómo se pasa de la versión 1 a...?CSV con sep.csv extraño ?
Lo que funciona:
Paso 2: abra V1 como una tabla separada por tabulaciones (en lugar de un archivo CSV con comillas CSV)
Paso 3: guardar la tabla como csv (en este paso [en JMP y Excel], las comillas adicionales al inicio y al final de cada fila se agregan automáticamente y las comillas simples se reemplazan por comillas 2x)
El proceso inverso debería ser sencillo:
Simplemente abra CSV con sep.csv extraño en JMP o Excel. Ambos programas eliminan las comillas de cierre automáticamente y las comillas dobles se convierten en simples. Así se ve en Excel:

Exactamente como lo queremos:

Entonces, guardemos la tabla de datos como csv y carguémosla nuevamente : )
En JMP, podemos deshabilitar las opciones:
]
Lamentablemente, la codificación CSV está habilitada por defecto. Por un lado, es razonable: guardar el archivo sin las comillas CSV cambiaría significativamente la estructura de los datos.
Pero en realidad eso es lo que queríamos.
Entonces, la única forma (?) es copiar las entradas de JMP o Excel a un editor de texto y guardar v1.txt desde allí.
El editor de texto no tiene en cuenta las comillas CSV y guarda el texto tal como está.
Re: Importar varios archivos CSV en una carpeta y apilarlos@hogi @jthi ¡Muchísimas gracias por tus respuestas y tu esfuerzo! ¡Resultó incluso peor de lo que imaginaba!
Tendré que dedicar algún tiempo a analizar tus respuestas, pero quería agradecerte de inmediato.:)
Saludos, Christian