我有一個像下面的CSV數據:防止LOAD DATA INFILE
"E12 98003";1085894;"HELLA";"8GS007949261";"";1
"5 3/4"";652493;"HELLA";"9HD140976001";"";1
一些字段包括在雙引號。問題是, ,你可能在第二行看到第一列中的數據包含一個雙引號在年底爲數據的一部分。
我試圖沿着線的東西:
LOAD DATA INFILE file.csv
INTO TABLE mytable
FIELDS TERMINATED BY ';' ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
,但它會使用引號的數據逃離現場封閉引號。我也試過ESCAPED BY ''
和ESCAPED BY '\\'
沒有成功。 有沒有辦法阻止LOAD DATA INFILE
命令轉義雙引號? 或者我應該解析csv並且在只有一個時加雙引號? 無論如何,我使用powershell解析文件,將編碼更改爲utf8。有什麼方法可以很快解決這個問題嗎?我的powershell代碼:
function Convert-FileToUTF8 {
param([string]$infile,
[string]$outfile,
[System.Int32]$encodingCode)
$encoding = [System.Text.Encoding]::GetEncoding($encodingCode)
$text = [System.IO.File]::ReadAllText($infile, $encoding)
[System.IO.File]::WriteAllText($outfile, $text)
}
好吧,我做了它使用.NET正則表達式來修復csv。這是昂貴的,但不是太多。 我寫
$text = [regex]::Replace($text, "(?m)(?<!^)(?<!\;)""(?!\;)(?!\r?$)", '""');
只是在函數的最後一行之前,它似乎工作確定。由於我是正則表達式的新手,這可能可以改進。
主要的問題是輸入數據是無效的CSV格式,因爲屬於數據的雙引號應該加倍(轉義)。所以問題就變成了:你從哪裏得到這個無效的CSV,你能做些什麼來解決它? – trincot
它是從第三方軟件中導出的。不幸的是,我無法控制csv是如何創建的。 – pankal