【问题标题】:Culture info input file c#文化信息输入文件c#
【发布时间】:2016-06-10 14:42:30
【问题描述】:

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

为了计算正确,我强制程序使用“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”语言兼容

【问题讨论】:

  • 考虑文件的来源。创建文件时你能做任何事情吗,比如在文件名中包含文化或作为第一行?
  • 我不能,用户使用 Excel 制作文件。它对他来说是完全透明的

标签: c# .net wpf csv


【解决方案1】:

首先,CSV 格式与文化并不严格相关。常见的分隔符(;,)、定界符(")与文化无关,即使某些工具(如 Excel)使用 , 用于 en-US 版本(无论如何都可以更改)和 @ 987654325@ 用于 fr-FR。

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

否则,您将不得不尝试通过解析标题和内容来尝试启发式方法(如果您有固定数量的列,您可能能够猜到分隔符)但它有限制。

在试图找出文件中使用什么编码时可能会遇到同样的问题(您可能也有这个问题,例如,CSV 文件可以使用UTF-8ANSI 进行编码)。

(顺便说一句,Excel 是一个处理 CSV 文件的糟糕工具,它会截断数据并做其他奇怪的事情。Access 处理 CSV 文件要好得多,但人们倾向于使用 Excel)。

【讨论】:

  • 是的,输入文件有 10 列和 X 行。如果我用输入文件的内容创建一个带有文本块的窗口。和一个输入列分隔符的文本框,之后我可以定义小数分隔符(如果用户输入“;”作为列分隔符每个,是一个小数分隔符,我必须用“。”替换每个“,”并删除“”?
【解决方案2】:

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

LABEL1 LABEL2 等...直到 10 点

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

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

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

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

问候

【讨论】:

  • 你必须小心这种转换,例如,不要用逗号替换文本中的点。对于数字,您可以指定用于解析字符串的区域性。这对于大于或等于 1000 的数字会更好,因为 Excel 可以在 csv 文件中添加千位分隔符。 (en.wikipedia.org/wiki/Decimal_mark#Digit_grouping)
猜你喜欢
  • 1970-01-01
  • 2014-10-01
  • 2014-03-18
  • 1970-01-01
  • 2015-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-16
相关资源
最近更新 更多