逐行讀取 CSV 以查找數據開始的位置我需要加載一個 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]”行將是第三行,在這種情況下 Loca() 函數將為我提供 3 行,而實際上它是第四行。
因此,當通過 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]");然後它似乎起作用了。 但這是最好的、甚至是正確的解決方案嗎?
質量和工藝工程回复:逐行讀取 CSV 以查找數據開始的位置嗯... 有趣的建議。 讓我嘗試一下。 畢竟這可能會更容易。
回复:逐行讀取 CSV 以查找數據開始的位置您需要 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")
)
);