我使用下面的代码导入CSV文件,使用VB阅读器但遇到了同样的问题。基本上在我的系统和其他我已测试它的工作,但在Windows 8 ESP(西班牙语)它失败。我能够通过在Visual Studio中打开导入的文件并使用编码(US-ASCII - 代码页20127)和行结尾CR / LF保存它来解决此问题。我的猜测是CR / LF设置,但我不确定。我没有西班牙语Windows测试这么尴尬,以确定确切的解决方案。我无法手动更改输入文件。
编辑:我知道在西班牙语row.length总是返回< = 5所以没有导入数据。我不知道它是否正在将整个文件作为一行读取(CR不起作用)或者它没有将行分开“;”不工作。
知道为什么西班牙语Windows没有正确读取文件或者如何解决它?
var frm = new OpenFileDialog();
var culture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US");
var styles = System.Globalization.DateTimeStyles.None;
var delimiters = new char[] { ';' };
var trims = new char[] { '"' };
if (frm.ShowDialog() ?? false)
{
using (System.IO.StreamReader reader = System.IO.File.OpenText(frm.FileName))
{
string input;
while((input = reader.ReadLine()) != null)
{
var rows = input.Split(delimiters);
for(int i = 0; i < rows.Length; i++)
{
rows[i] = rows[i].TrimStart(trims).TrimEnd(trims);
}
DateTime expiration;
if (rows.Length > 5 && DateTime.TryParse(rows[4], culture, styles, out expiration))
{
new Pin()
{
ID = Guid.NewGuid(),
PinCode = rows[0],
Name = rows[1],
Area = rows[5],
DeviceId = "",
Expiration = expiration,
IsSold = false
});
}
}
}
}
示例数据:
"Code";"Profile name";"Profile type";"Duration";"Expiration date";"WiFi Area";
"99999";"10 peso 1 hour";"One-Time";"60 Mins";"2015-06-19 23:59:59";"company"
答案 0 :(得分:1)
这就像眼睛疼痛一样突出:
var culture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US");
你为什么这样做?为什么不运行代码运行的当前系统的CultureInfo?