我有这种格式的CSV文件:
"Call Type","Charge Type","Map to"
"51","","Mobile SMS"
"52","","Mobile SMS"
"DD","Local Calls","Local Calls"
"DD","National Calls","National Calls"
前两列是"源信息"我的C#将插入,最后一列将返回。
目前我正在做的是在c#中硬编码的switch语句。
var File001 = from line in File.ReadLines(bill_file)
let l = line.Split(',')
select new
{ CallType = ICD_map(l[5],l[3])}
,其中
l[5] = "51";
l[3] = "";
private static string ICD_map(string call_type_description, string call_category,)
{
case "51":
case "52":
return "Mobile SMS";
default:
return "Unknown";
}
我希望这是一个可扩展的列表,因此我的新方法是从csv文件加载映射表。您能否建议对此方法进行任何改进,以使我的定义库可扩展(希望CSV文件可以用于此目的,到目前为止只有100行,所以不关心内存管理)。
到目前为止我尝试的是:
class ICD_Map2
{
private string call_type;
private string charge_type;
private string map_to;
// Default constructor
public ICD_Map2() {
call_type = "Unknown";
charge_type = "Unknown";
map_to = "Unknown";
}
// Constructor
public ICD_Map2(string call_type, string charge_type, string map_to)
{
this.call_type = call_type;
this.charge_type = charge_type;
this.map_to = map_to;
}
}
List<ICD_Map2>maps = new List<ICD_Map2>();
private void button2_Click(object sender, EventArgs e)
{
// Start new thread to create BillSummary.csv
button1.Enabled = false;
maps.Clear();
//load mapping file
var reader = new StreamReader(File.OpenRead(@"Itemised_Call_Details_Map.csv"));
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
var values = line.Split(',');
maps.Add(new ICD_Map2(values[0].Replace("\"",""), values[1].Replace("\"",""), values[2].Replace("\"","")));
textBox2.AppendText(Environment.NewLine + " Mapping: " + values[0].Replace("\"", "") + " to " + values[1].Replace("\"", ""));
}
我已将CSV文件加载到我的程序中,但我无法从LINQ进行查找。你能告诉我下一个过程吗?
对任何其他方法开放。
感谢您的时间。
答案 0 :(得分:0)
我建议你一起去
http://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader
它可以让您灵活地使用代码。
我们一直在我们的项目中使用它,并且完全控制以编写容易出错和错误的通用CSV代码非常有用