Devo caricare un file CSV che potrebbe essere in diversi formati. 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 poi uso 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 divido 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 quarta riga.
Quindi, quando si interrompe il file con la funzione Words, quella riga vuota non entra nell'elenco.
E non so quante righe vuote potrei avere nel file prima che i dati inizino.
Come posso procedere?
Posso rompere solo con "\!n" o "\!r", e quindi utilizzare Left() o Right() in un ciclo for per rimuovere il simbolo speciale rimanente, ma sembra una forza 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?
Hmm... Suggerimento interessante. Fammi provare. Potrebbe essere più facile, dopotutto.
Hai bisogno della posizione per la piattaforma di importazione dei dati di JMP? Se non hai bisogno dei dati prima di [I dati iniziano qui], puoi semplicemente rilasciarli
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 ora hai:
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")
)
);