基于值的不同 CSV 文件

本文关键字:CSV 文件 于值 | 更新日期: 2023-09-27 18:34:51

我有一个关于我的CSV的问题。我导出一个 CSV 并在 C# 中读取它。CSV 中每行的最后一列是 A、B、C、D、E 或 G。现在,我希望我的 CSV 被切成碎片,比如;我想要一个新的 CSV,其中包含包含 A 和 D 的行。另一个包含 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 文件?

DebtsMetaal,DebtorsSystemen和DebtorsHolding将是新的CSV文件。

例如;

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

number - name- description - type

其中类型可以是 A、B、C、D、E 或 G。现在,我希望将类型 = A 的行和类型 = D 的行放在一个 CSV 文件中。这可能吗?

值 A、B、C、D、E 或 G 始终采用 excel 格式的 colomn AJ。

基于值的不同 CSV 文件

我会使用这样的循环:

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