SheepDev

資料格式與結構化資料

CSV 欄位錯位,如何檢查引號與換行?

使用工具

兩欄匯出後變三欄,某筆紀錄像是溢出到下一行。別立即刪逗號或換行,它們可能屬於地址或備註。引號決定逗號是分隔符還是資料。

用 CSV 編輯器表格和 JSON/CSV 轉換檢查各值落在哪個儲存格。範例是虛構 UTF-8 資料,亂碼應先單獨檢查編碼。目標是正確讀取邊界,而非修改值來美化原文。

把地址逗號保留在一個儲存格

未加引號的輸入
id,address
001,North, Building A

表頭兩欄,資料列卻有兩個逗號,按逗號解析會出現欄數不符。Building A 不一定是第三欄;若整個地址是一個值,應給完整值加雙引號,不要默默丟棄多餘欄。

完整地址加引號
id,address
001,"North, Building A"

表格應顯示兩個值 001 與 North, Building A,地址不含邊界引號。轉換 JSON 可確認 001 仍是字串,但其他試算表可能推斷為數字,下一步仍需檢查欄型別。

看似三行,也可能只有一筆紀錄

備註內有換行的 CSV
id,note
001,"first line
second line"

這是表頭加一筆資料,note 的引號跨越實體換行,兩行屬於同一儲存格。表格顯示一個備註,JSON 在字串中表示換行。原始碼行數不等於紀錄數。

去重行、刪空行可能刪掉引號內備註的一部分。操作 CSV 應先按紀錄解析,不應照搬逐行日誌處理。若接收端不允許值內換行,需先約定替換規則並說明值會改變。

值內的引號寫成兩個引號

含引號的商品名
id,name
001,"Notebook ""mini"""

name 應顯示 Notebook "mini"。外層引號界定欄位,內部連續兩個引號代表一個字面引號。JSON 的反斜線寫法不能直接代替 CSV 引號規則,應區分目標值與各格式表示。

全部加引號會改變簡單值的原始碼外觀。重新解析後儲存格相同,就只是表示變化。原始碼不同不一定遺失資料,字面引號消失才是值變化,應比較解析後的值。

全部擠成一欄時檢查分隔符

分號分隔範例
id;amount
001;12.50

按逗號讀取時 id;amount 可能成為一個表頭。改為分號後應分成兩欄。能解析成一欄不證明正確,應核對名稱、欄數與首末紀錄,不要全域替換值內標點來彌補錯誤設定。

編輯器按所選分隔符解釋輸入,不要假設有獨立的輸入/輸出分隔符控制。先正確解析,必要時經 JSON 檢查值。小數逗號與欄位分隔符是不同角色。

檢查空值、零與類似公式的文字

空儲存格不等於明確的零,CSV 也可能無法保留空字串與 JSON null 的區別。把空值都改為 0 會改變缺漏含義。型別和缺漏規則由雙方約定,不應在修引號時自行補定義。

交給試算表前檢查 = 等開頭文字。公式中和會給值加前綴,資料因此改變。給人閱讀的表格與給程式保留原值的匯出應區分;CSV 加引號並非通用防公式執行措施。

保留地址逗號、多行備註、帶引號名稱、前導零 ID 的小樣本,並註明紀錄數與儲存格預期值。兩三筆虛構紀錄通常足以重現正式匯入問題,也能減少分享資訊。

參考資料

使用工具

指南 →