文化信息输入文件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”兼容
我找到了解决方案。我的输入文件是一个带有第一个标题行的10列文件。用户必须在第一行写:
LABEL1 LABEL2等等......直到10
所以,我使用的功能“之间”找到的分隔符。
test是使用StreamReader读取文件的第一行。我将第一行存储到一个字符串中。
Console.WriteLine(test.Between("LABEL1", "LABEL2"));
现在,我知道这是否是“;”分隔符我会用“。”替换每个“,”。如果分隔符是“,”我不必更换任何小数分隔符,因为它已经是“。”等等任何分隔符...
关注
例如,您必须小心这种转换,而不是用逗号替换点,对于数字,您可以指定用于解析字符串的区域性。等于1000,因为Excel可以在csv文件中添加数千个分隔符(https://en.wikipedia.org/wiki/Decimal_mark#Digit_grouping) –
首先,CSV格式与文化没有严格关系。常见的分隔符(;
或,
),分隔符("
)与文化无关,即使某些工具(如Excel)使用,
作为en-US版本(可以随时更改)和;
作为fr-FR。
最好的方法是使用这些文件来建立合同(“库处理CSV文件的格式如下:”),或者采取一些配置来正确处理文件。否则,您将不得不通过解析标题和内容来尝试启发式方法(如果您有固定数量的列,您可能可以猜出分隔符),但它有限制。
这是试图找出什么编码的文件中使用(你也可能有问题,CSV文件可以与UTF-8
或ANSI
例如编码)的时候,人们可以遇到同样的问题。 (顺便说一句,Excel是一个可怕的工具来处理CSV文件,它截断数据和其他奇怪的东西。访问处理CSV文件更好,但人们倾向于使用Excel)。
是的输入文件有10列和X行。如果我用输入文件的内容制作一个带有文本块的窗口。和一个文本框进入列分隔符,之后,我可以定义小数分隔符(如果用户输入“;”作为列分隔符每隔,是一个小数点分隔符,我必须用“。”替换每个“,”并删除“”? –
考虑文件的来源。你可以在创建文件时做任何事情,比如将文化包含在文件名中或作为第一行? –
我不能,用户用Excel制作文件。它对他完全透明 –