文化信息输入文件c#

问题描述:

我正在编写一个应该帮助进行计算的程序,这取决于用户导入的文件(csv输入文件)。文化信息输入文件c#

对于计算是正确的我强制该计划已与文化“en-US”运作。

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”兼容

+0

考虑文件的来源。你可以在创建文件时做任何事情,比如将文化包含在文件名中或作为第一行? –

+0

我不能,用户用Excel制作文件。它对他完全透明 –

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

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

所以,我使用的功能“之间”找到的分隔符。

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

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

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

关注

+0

例如,您必须小心这种转换,而不是用逗号替换点,对于数字,您可以指定用于解析字符串的区域性。等于1000,因为Excel可以在csv文件中添加数千个分隔符(https://en.wikipedia.org/wiki/Decimal_mark#Digit_grouping) –

首先,CSV格式与文化没有严格关系。常见的分隔符(;,),分隔符(")与文化无关,即使某些工具(如Excel)使用,作为en-US版本(可以随时更改)和;作为fr-FR。

最好的方法是使用这些文件来建立合同(“库处理CSV文件的格式如下:”),或者采取一些配置来正确处理文件。否则,您将不得不通过解析标题和内容来尝试启发式方法(如果您有固定数量的列,您可能可以猜出分隔符),但它有限制。

这是试图找出什么编码的文件中使用(你也可能有问题,CSV文件可以与UTF-8ANSI例如编码)的时候,人们可以遇到同样的问题。 (顺便说一句,Excel是一个可怕的工具来处理CSV文件,它截断数据和其他奇怪的东西。访问处理CSV文件更好,但人们倾向于使用Excel)。

+0

是的输入文件有10列和X行。如果我用输入文件的内容制作一个带有文本块的窗口。和一个文本框进入列分隔符,之后,我可以定义小数分隔符(如果用户输入“;”作为列分隔符每隔,是一个小数点分隔符,我必须用“。”替换每个“,”并删除“”? –