Importa più file CSV in una cartella e impilaliCiao a tutti,
Ho un problema con i miei file CSV, che hanno uno strano separatore ( "," ) e non riesco a capire come far sì che JMP li importi automaticamente.
Il mio obiettivo è quello di poter selezionare una cartella contenente più file CSV, con la stessa struttura e gli stessi nomi di colonna, importare tutti i dati e impilarli.
Ho allegato un file CSV che assomiglia al mio file.
Spero che tu possa aiutarmi:)
saluti, Christian
Automazione e scriptingAccesso ai datiPersonalizzazione di massaRe: Importa più file CSV in una cartella e impilaliancora di più, le virgolette sono 1, 2 e 3:

Forse la soluzione migliore è correggere l'esportazione del file : )
Un'altra soluzione: utilizzare "Notepad++" / Sostituisci nei file:

per eliminare le virgolette.
Re: Importa più file CSV in una cartella e impilaliIn JMP,
Testo in colonne è LO strumento per gestire tali gruppi di separatori:
non gli importa se è " o "","" o """
tratta più separatori come uno solo (!)
Questo può essere molto dannoso: Testo in colonne: gestire correttamente i dati mancanti
... ma spesso è proprio ciò di cui abbiamo bisogno, come in questo caso.
COSÌ,
a) caricare i file tramite MFI con l'opzione "Riga per riga"
b) e usa Testo in colonne con Delimitatori = ,"

dts = Multiple File Import(
<
<SET folder="">
</SET>
<BR />
Re: Importa più file CSV in una cartella e impilaliSembra anche che tu abbia "" alla fine di ogni riga e la prima colonna non ha il formato "," ma piuttosto ,".

Non sono sicuro che questo funzionerà per tutti i tuoi file, ma li gestirei come testo, li pulirei in un file csv "corretto" e poi lo aprirei dalla memoria nella tabella 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: Importa più file CSV in una cartella e impilaliAh, giusto, parole() usa lo stesso trucco di Testo in colonne() .
Re: Importa più file CSV in una cartella e impilaliApprofondendo:
il problema principale è il

nelle impostazioni MFI.
JMP è soddisfatto della prima e dell'ultima virgoletta e legge l'intera riga di testo come una colonna (mantenendo ogni seconda virgoletta?!?):

modifica: prima e ultima virgoletta? no, è più complicato - vedi sotto!
Come soluzione rapida, è possibile modificare l'impostazione Citazione CSV impostando un altro carattere:

<
<SET csv="" quote=""></SET>
<P>e utilizzare le virgolette stesse come separatore:</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 />Ciò consente a JMP di leggere i file, ma:</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>diversamente da <FONT face="courier new,courier">Parole()</FONT> e <FONT face="courier new,courier">Testo in colonne()</FONT> , <FONT face="courier new,courier">MFI</FONT> tratta ogni (singolo) separatore come un separatore<BR /> con l'idea: dati mancanti = dati mancanti, nessuna colonna saltata!</P> <P>Grazie MFI, per la maggior parte dei file, questo ha senso : - )</P> <BR /> <P>Non qui: dopo l'importazione, l'utente deve eliminare le colonne vuote.<BR /><BR /> Nota: l'importazione del file con un'impostazione di preventivo CSV vuota non funziona.</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 utilizzerà automaticamente le virgolette come citazione CSV e caricherà l'intero file come una singola colonna.</P>
Re: Importa più file CSV in una cartella e impilaliper divertirti di più con le quotazioni MFI e CSV
utilizzare il file allegato
ingresso: JMP:

Una volta formulata un'ipotesi che si adatti alle righe 1–N, è facile trovare un cigno nero per la riga N+1...
Re: Importa più file CSV in una cartella e impilali0. Se ci sono caratteri prima delle virgolette, non si tratta di una virgoletta CSV.
- se il primo carattere della cella è una virgoletta, si tratta di una virgoletta CSV -> esegui la scansione per trovare la virgoletta di chiusura
- se lungo il percorso ci sono due virgolette adiacenti, trattale come una virgoletta singola

- se per strada trovi una virgola, è una virgola
- se lungo il percorso trovi una nuova riga, è una nuova riga (!!)
in realtà il contenuto della cella è:

- altri personaggi interessanti? ...
- se trovi una virgoletta di chiusura, la citazione è completa
- cercare un delimitatore o un'interruzione di riga.
qualsiasi carattere trovi: aggiungilo semplicemente alla citazione.
- qui: una virgoletta singola è una virgoletta singola
- 2 virgolette sono 2 virgolette (confronta #2)
- se trovi un delimitatore o un'interruzione di riga, questa è la fine della cella (confronta #4)
- Se si usa uno spazio prima della citazione, la citazione non è in formato CSV.
(sottoinsieme di #0)
Mi ci è voluto un po' per capire 
dal post precedente, ecco perché l'ho aggiunto come caso separato.
file csv: JMP:

Re: Importa più file CSV in una cartella e impilaliAlla luce delle nuove scoperte, la tabella dei dati nel post originale ora appare più familiare:
Assomiglia a una tabella dati che, nel primo passaggio ('V1'), è stata esportata con virgolette aggiunte alle colonne numeriche e di caratteri (solo la prima colonna non ha ricevuto le virgolette aggiuntive:

Sorprendentemente:
V1 può essere aperto in JMP ed Excel tramite trascinamento della selezione. Entrambi i programmi "scompattano" automaticamente le citazioni CSV e caricano la tabella nel formato corretto. Quindi, come si fa a passare da V1 aCSV con strano sep.csv ?
Cosa funziona:
passaggio 2: aprire V1 come tabella separata da tabulazioni (invece di un file CSV con virgolette CSV)
passaggio 3: salvare la tabella come csv (in questo passaggio [in JMP ed Excel], le virgolette aggiuntive all'inizio e alla fine di ogni riga vengono aggiunte automaticamente e le virgolette singole vengono sostituite da virgolette doppie)
Il processo inverso dovrebbe essere semplice:
- Basta aprire CSV con strano sep.csv in JMP o Excel. Entrambi i programmi rimuovono automaticamente le virgolette di chiusura e le virgolette doppie vengono riconvertite in virgolette singole: Ecco come appare in Excel:

esattamente come quello che vogliamo:

Quindi, salviamo la tabella dati come csv e carichiamola di nuovo : )
in JMP possiamo disabilitare le opzioni:
]
Purtroppo, la codifica CSV è abilitata di default. Da un lato, è ragionevole: salvare il file senza virgolette CSV cambierebbe significativamente la struttura dei dati!
Ma in realtà era proprio quello che volevamo.
Quindi, l'unico modo (?) è copiare le voci da JMP o Excel in un editor di testo e salvare da lì v1.txt.
L'editor di testo non riconosce le virgolette CSV e salva il testo così com'è.
Re: Importa più file CSV in una cartella e impilali@hogi @jthi Grazie mille per le vostre risposte e per l'impegno! Si è rivelato anche peggio di quanto immaginassi!
Dovrò dedicare un po' di tempo a esaminare le tue risposte, ma volevo ringraziarti subito:)
saluti, Christian