2
我這種格式有一個CSV文件:查找從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做查詢。你能告訴我下一個過程嗎?
開放給任何其他方法。
謝謝你的時間。
我認爲這將是有益的描述你的最終目標是。根據你在找什麼,有很多建議可以做。我想我的混淆來自具有映射到不同費用類型的重複呼叫類型的示例數據。 – KreepN
@KreepN我正在嘗試創建一個函數,它將採用兩個變量,將其與CSV中的前兩列進行匹配,並且如果100%匹配返回CSV中的第3列。 –
我明白了,你已經在頂部提供了csv映射文件。你的最終結果是什麼?代表你的數據的一組對象?包含結果的文件? (這將有助於知道什麼bill_file太)) – KreepN