将单个CSV排序为多个CSV

时间:2015-07-20 12:51:10

标签: vb.net parsing csv

我有一个主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文件。

2 个答案:

答案 0 :(得分:1)

我要做的是:

  1. 使用File.ReadAllLines
  2. 将所有行读入内存
  3. 根据区号
  4. 将这些行添加到字典中
  5. 循环遍历字典并使用File.AppendText将每一行写入以区号为名的文件。
  6. 我不是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只是为了将其拆分。

答案 1 :(得分:-1)

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

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

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

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