さまざまな形式のCSVファイルをロードする必要があります。 そして、データがどの行から始まるかを見つける必要があります。 列名は特定の行から始まることを知っています。たとえば、「[データはここから始まります]」としましょう。
これが私がすることです:
ex = Load Text File(
filePath
);
words = Words( ex, "\!n\!r" );
headersLocation = Loc(words, "[Data starts here]");
次に、headersLocation + 1を使用して、ヘッダーの開始位置を指定します。
この問題は、CSVファイルに空の行がある場合に発生します。
line1
line2
[Data Starts Here]
Header1, header2
0,0
1,1
このファイルを単語に分割すると、「[Data STarts Here]」の行が3行目になります。この場合、Loca()関数は3を返しますが、実際には4行目です。
したがって、Words関数でファイルを分割する場合、その空の行はリストに含まれません。
また、データが開始する前に、ファイルに空の行がいくつあるかわかりません。
どうすればいいですか?
「\!n」または「\!r」のいずれかで中断し、forループでLeft()またはRight()を使用して残りの特殊記号を削除できますが、力ずくであり、あまり最適ではないようです。正しいかわかりません。 このようなもの:
For Each( {value, index}, words, words[index] = Right(value, Length(value)-1););スクリプト全体は次のとおりです。
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]");その後、動作しているようです。 しかし、これは最善であり、正しい解決策でさえありますか?
JMPのデータインポートプラットフォームの場所が必要ですか? [データはここから始まります]の前にデータが必要ない場合は、データをドロップするだけです。
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);
また、JMPのインポートが必要な場合は、現在の文字列でChar To Blob()を使用できます。
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")
)
);