2

次の形式の CSV ファイルがあります。

"Call Type","Charge Type","Map to"
"51","","Mobile SMS"
"52","","Mobile SMS"
"DD","Local Calls","Local Calls"
"DD","National Calls","National Calls"

最初の 2 列は 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 からルックアップを実行できません。次の工程を教えてください。

他の方法を開きます。

御時間ありがとうございます。

4

1 に答える 1

0

一緒に行くことをお勧めします

http://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader

これにより、コードをいじる柔軟性が大幅に向上します。

私たちはプロジェクトでこれを使用しており、エラーやバグが発生しやすい一般的な CSV コードを記述する代わりに完全に制御できることは非常に役立ちます。

于 2012-10-26T06:42:28.183 に答える