我有非常陌生的 csv 檔案,其中的行如下:
"31 lip 2021,""Inna op?ata"",""--"",""--"",""--"",""--"",""--"",""--"",""--"",""--"",""-1,29"",""EUR"",""2 sie 2021"",""111"",""mBank *7981"",""?rodki zosta?y wys?ane"",""--"",""111"",""--"",--,""--"",""--"",""--"",""--"",""--"",""--"",""0%"",""--"",""--"",""--"",""--"",""--"",""-5,7"",""PLN"",""4,43151"",""FEE-111"",""Op?ata za nazw? pomocnicz? przedmiotu """
我使用了 GenericParserAdapter 但結果不滿意: 結果 (ItemArray):
[0] "31 lip 2021" object {string}
[1] "\"Inna op?ata\"" object {string}
[2] "\"--\"" object {string}
[3] "\"--\"" object {string}
[4] "\"--\"" object {string}
[5] "\"--\"" object {string}
[6] "\"--\"" object {string}
[7] "\"--\"" object {string}
[8] "\"--\"" object {string}
[9] "\"--\"" object {string}
[10] "\"\"-1" object {string}
[11] "29\"\"" object {string}
[12] "\"EUR\"" object {string}
[13] "\"2 sie 2021\"" object {string}
[14] "\"111\"" object {string}
[15] "\"mBank *7981\"" object {string}
[16] "\"?rodki zosta?y wys?ane\"" object {string}
[17] "\"--\"" object {string}
[18] "\"111\"" object {string}
[19] "\"--\"" object {string}
[20] "--" object {string}
[21] "\"--\"" object {string}
[22] "\"--\"" object {string}
[23] "\"--\"" object {string}
[24] "\"--\"" object {string}
[25] "\"--\"" object {string}
[26] "\"--\"" object {string}
[27] "\"0%\"" object {string}
[28] "\"--\"" object {string}
[29] "\"--\"" object {string}
[30] "\"--\"" object {string}
[31] "\"--\"" object {string}
[32] "\"--\"" object {string}
[33] "\"\"-5" object {string}
[34] "7\"\"" object {string}
[35] "\"PLN\"" object {string}
[36] "\"\"4" object {string}
[37] "43151\"\"" object {string}
[38] "\"FEE-111\"" object {string}
[39] "\"\"Op?ata za nazw? pomocnicz? przedmiotu " object {string}
第 10 列和第 11 列被拆分 (36, 37 too) ,但這是一個值,不能拆分。如何正確配置決議器(或拆分想法)并解決此問題?有什么解決辦法嗎?
uj5u.com熱心網友回復:
"31 lip 2021,""Inna op?ata"",""--"",""--"",""--"",""--"",""--"",""--"",""--"",""--"",""-1,29"",""EUR"",""2 sie 2021"",""111"",""mBank *7981"",""?rodki zosta?y wys?ane"",""--"",""111"",""--"",--,""--"",""--"",""--"",""--"",""--"",""--"",""0%"",""--"",""--"",""--"",""--"",""--"",""-5,7"",""PLN"",""4,43151"",""FEE-111"",""Op?ata za nazw? pomocnicz? przedmiotu """
以某種方式將整行轉換為單個欄位,并且所有雙引號都用另一個雙引號轉義。
該行應該看起來像這樣(決議得很好):
31 lip 2021,"Inna oplata","--","--","--","--","--","--","--","--","-1,29","EUR","2 sie 2021","111","mBank *7981","Srodki zostaly wyslane","--","111","--",--,"--","--","--","--","--","--","0%","--","--","--","--","--","-5,7","PLN","4,43151","FEE-111","Oplata za nazwe pomocnicza przedmiotu "
一種解決方案可能是對資料進行兩次決議。首先轉換為原始行,然后決議資料。
uj5u.com熱心網友回復:
最后我像這樣解決了這個問題:
var kodowanie = sciezkaPliku.GetEncoding();
var plik = new StringBuilder();
var linie = File.ReadAllLines(sciezkaPliku, kodowanie);
for (int i = 0; i < File.ReadAllLines(sciezkaPliku, kodowanie).Length; i )
{
plik.AppendLine(linie[i]
.Trim('\"')
.Replace(",\"\"", ";")
.Replace("\"\",", ";")
.Replace("\"\"", ""));
}
sciezkaPliku = $"{sciezkaPliku}_parsed";
if (File.Exists(sciezkaPliku))
{
File.Delete(sciezkaPliku);
}
File.AppendAllText(sciezkaPliku, plik.ToString(), kodowanie);
using (var parser = new GenericParserAdapter(sciezkaPliku, sciezkaPliku.GetEncoding()))
{
parser.FirstRowHasHeader = true;
parser.ColumnDelimiter = ';';
var pozycje = parser.GetDataTable();
foreach (var item in pozycje.Rows)
{
//ToDo
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/342832.html
