gpt4 book ai didi

c# - 如何根据 C# 中的搜索条件合并 csv 文件中的多行?

转载 作者:行者123 更新时间:2023-11-30 22:22:55 24 4
gpt4 key购买 nike

是否有一种简单的方法来搜索 csv 字符串数组,然后将数据的某些位写入一行。目前,它搜索一个 csv 文件并根据来自文本框的两个用户输入提取某些数据,然后对其进行排序并将其写入另一个 csv 文件。

本质上,如果设备名称相同,我希望它在同一行写入数据。假设一个设备称为“dev1 id1”,另一个设备称为“dev1 id2”。我不想将两者都写在单独的行上(就像现在那样),而是希望它写在一个组合的行上。像这样的东西:

dev1,id1,id2

代替:

dev1,id1

dev1,id2

我尝试过使用 for 循环和 if 语句,但很快就会变得困惑。 Bellow 是我当前的代码(抱歉,由于工作原因,我不得不重新输入任何拼写错误)。

StreamWriter sw = new StreamWriter(@"c:\test.csv");
StreamReader sr = new StreamReader(@"c:\rtest.csv");

List<string> list = new List<string>();
string line = "Station,Device,Key,AOR";
string sta = textBox1.Text;
string[] devs = richTextBox1.Text.Split(',').Select(dev => dev.Trim()).ToArray();
string[] sort,strs;
bool cont;

sw.WriteLine(line);

while (!sr.EndOfStream)
{
strs = line.Split(',');
cont = (devs.Any(s => strs[1].IndexOf(s, StringComparison.OrdinalIgnoreCase) >= 0));
if (strs[2].ToString() == sta && cont ==true)
{
list.Add(line.ToString());
}
line = sr.ReadLine();
}
sort = new string[list.Count];
list.CopyTo(sort);
Array.Sort(sort);

foreach (string var in sort)
{
strs = var.Split(',');
sw.WriteLine(string.Format("{2},{1},{0},{3}", strs[0], strs[1], strs[2], strs[3]));
}

sw.Close();
if (File.Exists(@"c:\test.csv")
{
Process.Start(@"c:\test.csv");
}

希望我的问题能被理解,谢谢。

最佳答案

您应该使用第 3 方解析器来读取您的 CSV 文件 - 它会减轻您的负担。

例如,使用 KBCsv ,您的代码可能如下所示(最初是用 VB.NET 编写的,对于任何转换错误,我深表歉意):

Dictionary<string, List<string>> dict = new Dictionary<string, List<string>>();
using (CsvReader reader = new CsvReader("Input.csv")) {
foreach (string[] record in reader.DataRecordsAsStrings) {
//assuming each record contains exactly 2 columns, under index 0 and 1
string key = record[0];
string value = record[1];
List<string> targetList = null;
if (!dict.TryGetValue(key, out targetList))
{
targetList = new List<string>();
dict.Add(key, targetList);
}
targetList.Add(value);
}
}
List<string> output = new List<string>();
foreach (KeyValuePair<string, List<string>> kv in dict)
{
string outputCsvLine = kv.Key + "," + string.Join(",", kv.Value);
output.Add(outputCsvLine);
}
System.IO.File.WriteAllLines("output.csv", output);

为了编写输出,您可能需要考虑转义 CSV 特殊字符,例如逗号和引号(如果它们在您的值中)。

编辑:如果您真的希望避免使用任何第三方组件(出于安全或其他原因),您可以将上述代码中的第 2 行和第 3 行更改为:

using (System.IO.StreamReader reader = new System.IO.StreamReader("Input.csv")) {
foreach (string rawRecord in reader.ReadLine()) {
string[] record = rawRecord.Split(",");

免责声明:像这样处理 CSV 文件是一种不好的做法,但对于您的特定示例,它会起作用。其余代码保持不变。

关于c# - 如何根据 C# 中的搜索条件合并 csv 文件中的多行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13575653/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com