Ho bisogno di caricare un file CSV che potrebbe essere in un numero di formati diversi. E ho bisogno di trovare su quale riga iniziano i miei dati. So che i nomi delle colonne iniziano dopo una certa riga, diciamo "[I dati iniziano qui]".
Questo è ciò che faccio:
ex = Load Text File(
filePath
);
words = Words( ex, "\!n\!r" );
headersLocation = Loc(words, "[Data starts here]");
e quindi utilizzo headersLocation+1 per specificare dove iniziano le mie intestazioni.
Il problema si verifica quando ho una riga vuota nel mio file CSV:
line1
line2
[Data Starts Here]
Header1, header2
0,0
1,1
Quando rompo questo file in parole, la riga "[Data STARTs Here]" sarà la terza, la funzione Loca() mi darà 3 in questo caso, mentre in realtà è la 4a riga.
Quindi, quando si interrompe il file con la funzione Words, quella riga vuota non viene inserita nell'elenco.
E non so quante righe vuote potrei avere nel file prima che i dati inizino.
Come faccio a farlo?
Posso interrompere solo "\!n" o "\!r", quindi usare Left() o Right() in un ciclo for per rimuovere il simbolo speciale rimanente, ma sembra una forza troppo bruta e non molto ottimale e Non sono sicuro che sia corretto. Qualcosa come questo:
For Each( {value, index}, words, words[index] = Right(value, Length(value)-1););L'intero script è:
ex = Load Text File(
filePath
);
words = Words( ex, "\!n\!r" );
For Each( {value, index}, words, words[index] = Right(value, Length(value)-1););
headersLocation = Loc(words, "[Data starts here]");Allora sembra funzionare. Ma è questa la soluzione migliore e persino corretta?
Hai bisogno della posizione per la piattaforma di importazione dei dati di JMP? Se non hai bisogno dei dati prima di [Data Starts Here], puoi semplicemente eliminarli
Names Default To Here(1);
csv = "line1
line2
[Data Starts Here]
Header1, header2
0,0
1,1
";
string_to_search = "[Data Starts Here]";
data_start_idx = Contains(csv, string_to_search);
data_str = Substr(csv, data_start_idx + Length(string_to_search) + 1);
E se hai bisogno dell'importazione di JMP, puoi usare Char To Blob() con la stringa che hai ora:
dt = Open(
Char To Blob(data_str),
Import Settings(
End Of Line(CRLF, CR, LF),
End Of Field(Comma, CSV(0)),
Strip Quotes(1),
Use Apostrophe as Quotation Mark(0),
Use Regional Settings(0),
Scan Whole File(1),
Treat empty columns as numeric(0),
CompressNumericColumns(0),
CompressCharacterColumns(0),
CompressAllowListCheck(0),
Labels(1),
Column Names Start(1),
Data Starts(2),
Lines To Read("All"),
Year Rule("20xx")
)
);