J'ai besoin de charger un fichier aCSV qui peut être dans un certain nombre de formats différents. Et j'ai besoin de trouver à quelle ligne mes données commencent. Je sais que les noms de colonne commencent après une certaine ligne, disons "[Les données commencent ici]".
C'est ce que je fais:
ex = Load Text File(
filePath
);
words = Words( ex, "\!n\!r" );
headersLocation = Loc(words, "[Data starts here]");
puis j'utilise headersLocation+1 pour spécifier où mes en-têtes commencent.
Le problème se produit lorsque j'ai une ligne vide dans mon fichier CSV :
line1
line2
[Data Starts Here]
Header1, header2
0,0
1,1
Lorsque je casse ce fichier en mots, la ligne "[Data Starts Here]" sera la troisième, la fonction Loca() me donnera 3 dans ce cas, alors qu'en réalité c'est la 4ème ligne.
Ainsi, lors de la rupture du fichier par la fonction Words - cette ligne vide ne figure tout simplement pas dans la liste.
Et je ne sais pas combien de lignes vides je peux avoir dans le fichier avant que les données ne commencent.
Comment puis-je m'y prendre?
Je peux casser par "\!n" ou "\!r" uniquement, puis utiliser Left() ou Right() dans une boucle for pour supprimer le symbole spécial restant, mais cela semble trop brutal et pas très optimal et Je ne suis pas sûr que ce soit correct. Quelque chose comme ça:
For Each( {value, index}, words, words[index] = Right(value, Length(value)-1););L'ensemble du script étant :
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]");Ensuite, cela semble fonctionner. Mais est-ce la meilleure et même une solution correcte ?
Avez-vous besoin de l'emplacement de la plate-forme d'importation de données de JMP ? Si vous n'avez pas besoin des données avant [Les données commencent ici], vous pouvez simplement les supprimer
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);
Et si vous avez besoin de l'importation de JMP, vous pouvez utiliser Char To Blob() avec la chaîne que vous avez maintenant :
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")
)
);