1

我对我的 CSV 有疑问。我导出 CSV 并用 C# 读取它。CSV 中每一行的最后一列是 A、B、C、D、E 或 G。现在,我希望将我的 CSV 切成几块,例如;我想要一个包含 A 和 D 行的新 CSV。例如,另一个包含 B 和 C 的行。

谁能指出我正确的方向?我卡住了。。

这是我的代码的一部分

StreamReader debtors = new StreamReader(@"C:\CSV\Debtors.csv");
StreamWriter debtorsMetaal = new StreamWriter(@"C:\CSV\DebtorsMetaal.csv");
StreamWriter debtorsSystemen = new StreamWriter(@"C:\CSV\DebtorsSystemen.csv");
StreamWriter debtorsHolding = new StreamWriter(@"C:\CSV\DebtorsHolding.csv");

while(debtors.Peek() >=0)
{
   string line = debtors.ReadLine();
   try
   {
     string[] rowsArray = line.Split(';');

    //..... etc

现在这些行是分段的,但是如何选择行中的最后一个列并根据最后一个列的值创建一个新的 CSV 文件?

债务人Metaal、债务人系统恩和债务人控股将是新的CSV文件。

例如;

在 CSV 的一行中,我有以下信息

number - name- description - type

其中 type 可以是 A、B、C、D 、E 或 G。现在我想要 type = A 的行和 type = D 的行一起放在一个 CSV 文件中。这甚至可能吗?

值 A、B、C、D、E 或 G 始终位于 Excel 格式的 AJ 列中。

4

1 回答 1

2

我会使用这样的循环:

var adLines = new List<string>();
var bcLines = new List<string>();
var unknownLines = new List<string>();
var adList = new[]{"A", "D"};
var bcList = new[]{"B", "C"};
using(var debtors = new StreamReader(@"C:\CSV\Debtors.csv"))
{
    string line = null;
    while((line = debtors.ReadLine()) != null)
    {
        string[] columns = line.Split(';'); // you should check if columns.Length is correct
        string lastColumn = columns.Last().Trim();
        if(adList.Contains(lastColumn, StringComparer.CurrentCultureIgnoreCase))
            adLines.Add(line);
        else if(bcList.Contains(lastColumn, StringComparer.CurrentCultureIgnoreCase))
            bcLines.Add(line);
        else
            unknownLines.Add(line);
    }
}
File.WriteAllLines(@"C:\CSV\DebtorsSystemen.csv", adLines);
File.WriteAllLines(@"C:\CSV\DebtorsHolding.csv", bcLines); 

但是,通常您不应该重新发明轮子并使用可用的 CSV 解析器,例如:

http://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader

于 2013-10-11T14:11:10.387 回答