0

MP4Boxによって生成された言語とそれぞれのコード ( http://pastebin.com/rn4JbTtP ) の長いリストがあります。このリストを C# のある種のキー値ストア (辞書など) にロードして、ユーザーがコンボ ボックスから言語を選択できるようにし、プログラムがそれぞれの言語コードを返すようにします。

プログラムを実行するたびにテキスト ファイルを読み込まずにこれを行う方法はありますか? もしそうなら、どのように?

更新(コメントはこちら) :申し訳ありませんが、明確に説明しませんでした。テキスト ファイルの読み取りに問題はありません。現在の形式では、Dictionary に入力する前に多くの解析が必要なだけです。これらのペアを格納して、実行時に必要な解析の量を最小限に抑える最善の方法は何でしょうか?

4

2 に答える 2

0

プログラムを実行するたびにテキストファイルを読み取らずにこれを実行できる方法はありますか?

あまり。データはどういうわけかメモリにロードする必要があります。@lcがコメントしたように、辞書をアプリケーションコードにハードコーディングする以外に、辞書を保存して読み取る必要があります。

読み取るためにデータをいくつかの方法で保存できますが、メモリに読み込む必要があります。

  • ローカルテキストファイルに保存
  • ローカルファイルにシリアル化する
  • 組み込みデータベースを使用してデータを保存する

アップデート:

最小限の解析でローカルデータをロードしたいので、データを辞書解析したら、辞書をディスクにシリアル化することをお勧めします。ディスクから逆シリアル化すると、辞書のインスタンスが作成されます。

于 2012-07-19T17:58:13.917 に答える
0

とにかく、アプリケーションの起動時にファイルを読み取る必要があります。1つの解決策は、次のような言語を含むxmlファイルを作成することです。

<?xml version="1.0" encoding="utf-8" ?>
<Languages>
  <Language Name="English" Code="en"/>
  <Language Name="German" Code="de"/>
</Languages> 

また、次のように言語の名前とコードを保持する小さなクラスを作成することもできます。

 class Language
    {
        public string Name { get; set; }
        public string Code { get; set; }
    }

そして、すべての言語を読むための読み方:

 private static List<Language> ReadLanguageFile()
        {
            List<Language> languages = new List<Language>();
            string path = @"LanguagesFile.xml";
            XDocument xdoc = XDocument.Load(path);
            var lans = xdoc.Root.Elements("Language");
            Language lan;
            foreach (var item in lans)
            {
                lan = new Language();
                lan.Name = item.Attribute("Name").Value;
                lan.Code = item.Attribute("Code").Value;
                languages.Add(lan);
            }
            return languages;
        }

次に、コンボボックスのデータソースを次のように言語リストにバインドできます。

cmb.DataSource = ReadLanguageFile();
cmb.DisplayMember="Name";
cmb.ValueMember="Code";

ここで、言語用のファイルを作成したくない場合は、次のようにすべての言語を保持するクラスを作成できます。

public sealed class Languages
    {
        public static List<Language> GetLanguages()
        {
            return new List<Language>
            {
                new Language{Code="en",Name="English"},
                new Language{Code="de",Name="German"},
            };
        }
    }
于 2012-07-19T23:48:37.453 に答える