Ich muss eine CSV-Datei laden, die in verschiedenen Formaten vorliegen kann. Und ich muss herausfinden, in welcher Zeile meine Daten beginnen. Ich weiß, dass die Spaltennamen nach einer bestimmten Zeile beginnen, sagen wir "[Daten beginnen hier]".
Das ist was ich mache:
ex = Load Text File(
filePath
);
words = Words( ex, "\!n\!r" );
headersLocation = Loc(words, "[Data starts here]");
und dann verwende ich headersLocation+1, um anzugeben, wo meine Header beginnen.
Das Problem tritt auf, wenn ich eine leere Zeile in meiner CSV-Datei habe:
line1
line2
[Data Starts Here]
Header1, header2
0,0
1,1
Wenn ich diese Datei in Worte zerlege, wird die Zeile „[Data STarts Here]“ die dritte sein, die Funktion Loca() gibt mir in diesem Fall 3, während es in Wirklichkeit die vierte Zeile ist.
Wenn Sie also eine Datei nach der Words-Funktion aufbrechen, schafft es diese leere Zeile einfach nicht in die Liste.
Und ich weiß nicht, wie viele leere Zeilen ich in der Datei haben kann, bevor die Daten beginnen.
Wie gehe ich vor?
Ich kann entweder nur durch "\!n" oder "\!r" brechen und dann Left() oder Right() in einer for-Schleife verwenden, um das verbleibende Sonderzeichen zu entfernen, aber es scheint zu brutal und nicht sehr optimal und Ich bin mir nicht sicher, ob es richtig ist. Etwas wie das:
For Each( {value, index}, words, words[index] = Right(value, Length(value)-1););Das ganze Skript ist:
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]");Dann scheint es zu funktionieren. Aber ist das die beste und sogar richtige Lösung?
Benötigen Sie den Standort für die Datenimportplattform von JMP? Wenn Sie die Daten vor [Data Starts Here] nicht benötigen, können Sie sie einfach löschen
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);
Und wenn Sie den JMP-Import benötigen, können Sie Char To Blob() mit der Zeichenfolge verwenden, die Sie jetzt haben:
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")
)
);