【问题标题】:Getting numerical amounts from csv files从 csv 文件中获取数值
【发布时间】:2018-05-18 12:22:35
【问题描述】:

您好,我的应用程序基本上会读取一个始终具有相同格式的 CSV 文件,我需要该应用程序创建一个具有不同格式的 CSV 文件。读取和写入 CSV 文件不是问题,但是我遇到的问题是获取金额值,因为这些值在 csv 文件中使用 , 格式化(例如:4、500)。话虽如此,这些在写入 csv 文件时会被拆分。

例如:从下面,我怎样才能得到完整的数字。即2241.84 & 1072809.33

line = "\"02 5 月 18 日\",\"TTEWTWTE\",\"GRHGWHWH\",\"02 5 月 18 日\",\"2,241.84\",\"\",\"1,072,809.33\" "

这就是我从 CSV 文件中读取数据的方式。

        openFileDialog1.ShowDialog();
        var reader = new StreamReader(File.OpenRead(openFileDialog1.FileName));
        List<string> searchList = new List<string>();
        while (!reader.EndOfStream)
        {
            var line = reader.ReadLine();
            searchList.Add(line);
        }

到目前为止,我已经尝试使用下面的方法来获取“2,241.84”,这是正确的,但是在写入 csv 文件时我只得到 2

searchList[2].Split(',')[1].Replace("\"", "")

【问题讨论】:

  • 那么到目前为止你尝试过什么?
  • @SeM 到目前为止,我尝试使用 searchList[2].Split(',')[1].Replace("\"", "")
  • @SeM 我会更新问题
  • 使用实际的解析器,例如Microsoft.VisualBasic.FileIO.TextFieldParser。它有帮助。

标签: c# string csv streamreader


【解决方案1】:

让我以另一种方式可视化内容:

"
    \"02 MAY 18\",
    \"TTEWTWTE\",
    \"GRHGWHWH\",
    \"02 MAY 18\",
    \"2,241.84\",
    \"\",
    \"1,072,809.33\"
"

您的分隔符似乎是\", 而不是,。将searchList[2].Split(',')[1].Replace("\"", "") 更改为searchList[1].Split(new string[] { "\",\"" }, StringSplitOptions.None)

【讨论】:

  • 实际上并非如此。 CSV has specs。您忽略了它之前和之后的引号,这仍然无法处理所有情况,例如引用的部分中可能存在双引号。
  • 我得到了正确的数字,但是它们仍在 excel 中的 3 个不同的单元格中拆分:/
  • @Nyerguds 你是对的,只要有问题的文件是通过遵守规范来实现的。对于所有 CSV 类 文件来说,这可能不是一个健康的假设。
  • 相当肯定它是 MS Excel 输出。问题中的“总是一样”是对尚未遇到特殊情况的人的天真假设。
【解决方案2】:

在你的情况下,你可以使用这个:

var result = searchList[2].Split(new string[] { "\",\"" }, StringSplitOptions.None)[4].Replace("\"", "");

"," 分隔符分割你的字符串,而不是,

我不知道您为什么使用静态数字作为索引,但我认为它是出于测试目的。

【讨论】:

  • 正如我在此处对另一个问题的评论,这仅在您找到the CSV specs 中的任何 other 特殊情况之前有效。就像事实字段可以包含引号甚至换行符
  • 我得到了正确的数字,但是它们仍在 excel 中的 3 个不同的单元格中拆分:/
  • @Nyerguds “我的应用程序基本上读取了一个始终具有相同格式的 CSV 文件”
  • @CarlaFenech 擅长什么?
  • @SeM,是的,我知道这种格式;这是将电子表格保存为 CSV 时来自 MS Excel 的输出。无需重新发明轮子; the .Net framework already has a parser for it.
猜你喜欢
  • 2020-09-16
  • 1970-01-01
  • 2013-05-12
  • 2020-01-29
  • 2020-09-04
  • 2015-07-21
  • 2014-09-12
  • 1970-01-01
  • 2019-05-23
相关资源
最近更新 更多