逐行讀取 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,而實際上它是第 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]");然後它似乎正在工作。 但這是最好的,甚至是正確的解決方案嗎?
腳本回复:逐行讀取 CSV 以查找數據開始的位置您需要 JMP 數據導入平台的位置嗎? 如果您不需要 [Data Starts Here] 之前的數據,您可以直接刪除它
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")
)
);