【问题标题】:Sorting single CSV to many CSV's将单个 CSV 排序为多个 CSV
【发布时间】:2015-07-20 12:51:09
【问题描述】:

我有一个类似这样的主 CSV 文件

Area Code,City,Phone
123,somecity,somenumber
123,somecity,somenumber
321,somecity,somenumber
918,somecity,somenumber

以此类推。

我想为每个区号创建单独的 CSV。 因此,123.csv 文件将仅包含区号 = 123 的记录。 321.csv 文件将只包含区号 = 321 的记录。

我了解如何创建 CSV 文件以及如何解析它们。 我不明白的是——我怎样才能解析区号。 -并且- 然后我如何仅从该行中选择数据以放入其特定的 csv 文件中。

这是一个 VB.Net 项目, 谢谢:)

--作为旁注,我应该提到我目前正在从 SQL 中获取此信息,然后将其转换为字符串,然后转换为 csv 文件。我已经完成了转换,但我不确定是否更容易解析为字符串或 csv 文件。

【问题讨论】:

  • 如果您从 SQL 获取信息,请跳过主 csv 并直接从数据生成区域代码特定的 csv。
  • 如果您从数据库中获取数据,为什么不首先创建正确的 CSV 文件?

标签: vb.net parsing csv


【解决方案1】:

我要做的是:

  1. 使用File.ReadAllLines将所有行读入内存
  2. 根据区号将这些行添加到字典中
  3. 遍历字典并将每一行写入一个使用File.AppendText 以区号命名的文件。

我不是 VB 专家,但以下 C# 代码可能仍然对您有所帮助:

string[] lines = File.ReadAllLines(csvFileName);
Dictionary<string, List<string>> linesByAreaCode = new Dictionary<string, List<string>>();

foreach (string line in lines)
{
    // Two parts, one for the area code, one for the rest
    string[] parts = line.Split(new char[] { ',' }, 2); 

    // Add a new list for the lines for an area code if it doesn't exist
    if (!linesByAreaCode.ContainsKey(parts[0]))
        linesByAreaCode[parts[0]] = new List<string>();

    // Add the line to the list of lines for the area code
    linesByAreaCode[parts[0]].Add(line);
}

foreach (string key in linesByAreaCode.Keys)
{
    List<string> lines = linesByAreaCode[key];
    foreach (string line in lines)
    {
        // Write this line to the file [key].csv
    }
}

鉴于您对问题的编辑,直接从数据库信息生成所需的 CSV 文件会容易得多,而不是先创建一个字符串,然后将其写入一个 CSV 以进行拆分。

【讨论】:

  • 好的,谢谢。在研究之后,我相信直接从 sql 数据到单个文件会容易得多。数据存储在比 csv 更容易处理的数据表中。我想我今天写的时候超前了。一定是星期一;)谢谢你的帮助!
【解决方案2】:

为什么不解析所有内容(使用“,”作为分隔符)然后从其他所有内容中挑选出 3 位数的区号?这是假设没有人有 3 位数的电话号码,否则这应该有效。仅通过快速的 Google 搜索,看起来以下代码可以选择 3 位数字:

If IsNumeric(Range("A1")) And Len(Range("A1")) = 3 Then
'...
End If

然后,为了将它们放入不同的 CSV 文件中,我只需为每个区号创建一个数组并将它们分类,然后遍历这些数组并通过它们将它们放入单独的 CSV。

显然,上面是一个模板,而不是实际使用的代码,但我希望这有点用处。

【讨论】:

    猜你喜欢
    • 2021-07-07
    • 1970-01-01
    • 1970-01-01
    • 2019-10-11
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多