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 Wörter zerlege, ist die Zeile „[Data Starts Here]“ die dritte. 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 aufteilen, schafft es diese leere Zeile einfach nicht in die Liste.
Und ich weiß nicht, wie viele Leerzeilen die Datei möglicherweise enthält, bevor die Daten beginnen.
Wie gehe ich vor?
Ich kann entweder nur nach „\!n“ oder „\!r“ umbrechen 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 zu sein 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 gesamte Skript lautet:
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?
Hmmm... Interessanter Vorschlag. Lass mich es versuchen. Es könnte doch einfacher sein.
Benötigen Sie den Standort für die Datenimportplattform von JMP? Wenn Sie die Daten vor [Daten beginnen hier] 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")
)
);