我知道如何在C#中拆分.CSV文件,并且有一个程序可以这样做。 我的问题是我想要做的下一个任务的逻辑。
我有这个数据
Name AddressName AddressContact AddressType Address
Ap Services Main address Ap Services A/S1 50 789 E 5300 S
Ap Services BILLING Ap Services A/S2 20 123 W 5200 S
Ap Services Shipping address Ap Services A/S3 10 456 N 5100 S
我的CSV中有很多文件没有重复,因为它们的字段不同,但它们具有相同的Name
。我想简单地将名称只打印一次,同时将新列放在最后以容纳其他字段。列必须是新的,但我认为它更容易将它们放在行的.length
的末尾。
这就是我希望将输出CSV文件格式化为:
Name AddressName AddressContact AddressType Address AddressContact2 AddressType2 Address2 AddressContact3 AddressType3 Address3
Ap Services Main address Ap Services A/S1 50 789 E 5300 S Main address Ap Services A/S1 50 789 E 5300 S Main address Ap Services A/S1 50 789 E 5300 S
我正在使用C#,无法弄清楚我需要用来执行此操作的逻辑或循环。 我需要读取文件,以这种方式拆分,然后打印出来,每个客户名称只显示一次,同时将信息全部放在一行。
有谁知道我怎么做到这一点?
static void Main(string[] args)
{
String path = "C:\\Desktop\\";
String file2 = "customerListAll.csv";
String file3 = "finalCustomerList.csv";
ArrayList arrayList1 = new ArrayList();
ArrayList arrayList2 = new ArrayList();
//ArrayList al3=new ArrayList();
String[] dataArray1;
String[] dataArray2;
Dictionary<String, String> badCustomers = new Dictionary<string, string>();
StreamWriter output = new StreamWriter(path + file3);
TextFieldParser CSVFile2 = new TextFieldParser(path + file2);
CSVFile2.SetDelimiters(",");
dataArray2 = CSVFile2.ReadFields();
int count = 0;
while (!CSVFile2.EndOfData)
{
if (!badCustomers.ContainsKey(dataArray2[0]))
{
String record = String.Empty;
for (int i = 0; i < dataArray2.Length; i++)
{
if (dataArray2[i].Contains(","))
{
string x = "\"" + dataArray2[i] + "\"";
record += x;
}
else
{
record += dataArray2[i];
}
if (i < dataArray2.Length - 1)
{
record += ",";
}
}
count++;
if (count % 50 == 0)
{
Console.WriteLine(count);
}
output.WriteLine(record);
}
dataArray2 = CSVFile2.ReadFields();
}
CSVFile2.Close();
Console.Read();
}
}
}
答案 0 :(得分:0)
在C#中有多种方法可以实现这一点,其中非常基本和简单如下。