【发布时间】:2015-01-28 12:31:50
【问题描述】:
我正在读取一个 csv 文件并对其进行排序。
我正在尝试对 DataTable 进行排序,以根据数据表中的 Bankname 为我提供输出
这是我已有的代码:
DataTable dt = new DataTable();
dt.Columns.Add("accountholder", typeof(string));
dt.Columns.Add("accountnumber", typeof(int));
dt.Columns.Add("accounttype", typeof(string));
dt.Columns.Add("bankname", typeof(string));
dt.Columns.Add("branch", typeof(string));
dt.Columns.Add("amount", typeof(double));
dt.Columns.Add("date", typeof(DateTime));
string line;
//CultureInfo culture = CultureInfo.InvariantCulture;
StreamReader sr = new StreamReader(@"C:\\Test\\debitorders.csv");
StreamWriter sw = new StreamWriter(@"C:\\Test\\output.txt");
while ((line = sr.ReadLine()) != null)
{
if (line.Length > 0)
{
string[] inputArray = line.Split(new char[] { ',' });
dt.Rows.Add(new object[] {
inputArray[0].Trim().Substring(0,1),
inputArray[1].Trim(),
long.Parse(inputArray[2].Trim()),
inputArray[3].Trim(),
inputArray[4].Trim(),
inputArray[5].Trim(),
(long)(100 * double.Parse(inputArray[6].Trim())),
DateTime.Parse(inputArray[7].Trim())
});
DateTime date = account.Field<DateTime>("date");
string[] outputLine = new string[]{
initial,
accountholder,
accountnumber.ToString(),
accounttype,
bankname,
branch,
amount.ToString(),
date.ToShortDateString()
};
Console.WriteLine(string.Join(",",outputLine));
}
}
Console.ReadLine();
任何帮助将不胜感激。
谢谢
【问题讨论】:
-
使用FileHelpers 可以更轻松、更好地完成此操作。您似乎也没有关闭 StreamReader 和 StreamWriter;你最好encapsulate them in a using statement。
-
此外,您不使用 StreamWriter,而是输出到控制台。
Field<string>("Surname")来自哪里?我建议重组您的代码,将其拆分为更小的位:读取原始数据,将原始数据转换为格式正确的数据,写入输出......恕我直言,此代码存在太多问题,无法指望任何人帮助你。 -
("Surname" ) 和 ("Initial") 组成“accountholder”。代码还没有完成,所以我仍然卡住了。我只是想要一种更简单的方法
-
您可能会卡住,因为您试图一次完成所有操作。将您的工作拆分为更小的方法,例如首先尝试将原始数据读取为易于使用的格式:自定义类而不是
DataTable。然后将该“原始”数据转换为您希望看到的数据,然后将这些格式正确的数据写入文件。您发布的代码已严重损坏,我怀疑您会在这里找到可以为您工作的人。 -
您可能想要隐藏敏感数据,例如帐号等...
标签: c# arrays linq csv text-files