文化信息输入文件c#

时间:2016-06-10 14:42:30

标签: c# .net wpf csv

我正在编写一个程序,该程序应该有助于根据用户导入的文件(csv输入文件)进行计算。

对于计算是正确的我强迫程序使用文化" en-US&#34 ;.

CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("en-US");
CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("en-US");

我以那种方式读取输入文件

using (StreamReader sr = new StreamReader("C:\\data.csv"))
            {   
                while ((currentLine = sr.ReadLine()) != null)
                {
                    var values = currentLine.Split(';');

                        string a = values[0];
                        string b = values[1];
                        string c = values[2];
                        string d = values[3];
                        string e = values[4];
                        string f = values[5];
                        string g = values[6];
                        string h = values[7];
                        string i = values[8];
                        string j = values[9];
                        string k = values[10];
                  }
                }

我担心的是我不知道输入文件的语言记录,也许它是一种文化" fr - FR"我必须确保数据分隔符,十进制对应语言" en-US" 。您能否向我解释如何确定输入文件的语言或如何转换它以使其与语言兼容" en-US"

2 个答案:

答案 0 :(得分:1)

首先,CSV格式与文化并不严格相关。公共分隔符(;,),分隔符(")与文化无关,即使某些工具(如Excel)使用,作为en-US版本(无论如何都可以改变)和fr {FR的;

最好的方法是使用这些文件来建立合同(“库处理具有以下格式的CSV文件:”),或者采取一些配置来正确处理文件。

否则,你必须通过解析标题和内容来尝试启发式方法(如果你有一个固定数量的列,你可以猜测分隔符)但它有限制。

在尝试确定文件中使用的编码时,可能会遇到同样的问题(您可能也遇到此问题,可以使用UTF-8ANSI对CSV文件进行编码实例)。

(顺便说一下,Excel是处理CSV文件的一个糟糕工具,它会截断数据并执行其他奇怪的操作。访问处理CSV文件要好得多,但人们倾向于使用Excel)。

答案 1 :(得分:0)

我找到了解决方案。我的输入文件是一个包含第一个标题行的10列文件。用户必须在第一行写入:

LABEL1 LABEL2等......直到10

所以,我使用函数“between”来找到分隔符。

test是使用StreamReader读取的文件的第一行。我将第一行存储到一个字符串中。

Console.WriteLine(test.Between("LABEL1", "LABEL2"));

现在,我知道这是不是“;”分隔符我将用“。”替换每个“,”。如果分隔符是“,”我不必替换任何小数分隔符,因为它已经是“。”等等任何分隔符...

此致