基于值的不同 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。
我会使用这样的循环:
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