10

私のプロジェクトには、ユーザーが読み取りおよび変更できるキーと値のペア データを格納するファイルが必要です。キーがそこにあることをプログラムに期待させ、できるだけ早くファイルからキーを解析したいと考えています。

それらを XML に格納することもできますが、XML は複雑になりすぎて、ノードや子ノードなどをトラバースする必要があります。必要なのは、ファイルを取得してキーと値のペアを生成するクラスだけです。エラー処理をできるだけ少なくしたいし、できるだけ少ないコードで実行したい.

そのようなクラスを自分でコーディングすることはできますが、車輪を 2 回発明するよりも、フレームワークでどのように機能するかを学びたいと思います。そうすることができる .NET (3.5) の組み込みのマジック クラスはありますか?

MagicClass kv = new MagicClass("Settings.ini"); // It doesn't neccesarily have to be an INI file, it can be any simple key/value pair format.
string Value1 = kv.get("Key1");
...
4

5 に答える 5

8

すばやく簡単な機能を探していて、.Net app\user config 設定ファイルを使用したくない場合や、時々発生するシリアライゼーションの問題を心配している場合。

次の静的関数は、のような形式のファイルをロードできますKEY=VALUE

public static Dictionary<string, string> LoadConfig(string settingfile)
{
    var dic = new Dictionary<string, string>();

    if (File.Exists(settingfile))
    {
        var settingdata = File.ReadAllLines(settingfile);
        for (var i = 0; i < settingdata.Length; i++)
        {
            var setting = settingdata[i];
            var sidx = setting.IndexOf("=");
            if (sidx >= 0)
            {
                var skey = setting.Substring(0, sidx);
                var svalue = setting.Substring(sidx+1);
                if (!dic.ContainsKey(skey))
                {
                    dic.Add(skey, svalue);
                }
            }
        }
    }

    return dic;
}

注: 私はディクショナリを使用しているため、キーは一意である必要があります。これは通常、設定の場合です。

利用方法:

var settingfile = AssemblyDirectory + "\\mycustom.setting";
var settingdata = LoadConfig(settingfile);
if (settingdata.ContainsKey("lastrundate"))
{
    DateTime lout;
    string svalue;
    if (settingdata.TryGetValue("lastrundate", out svalue))
    {
        DateTime.TryParse(svalue, out lout);
        lastrun = lout;
    }
}
于 2014-12-17T18:40:14.690 に答える
6

KeyとValueにKeyValuePairクラスを使用してから、 XMLSerializerを使用してリストをディスクにシリアル化します。

それが私が感じる最も簡単なアプローチでしょう。ノードのトラバースについて心配する必要はありません。Deserialize関数を呼び出すと、それが自動的に行われます。ユーザーは、必要に応じてファイル内の値を編集できます。

于 2008-11-12T18:38:34.473 に答える
6

ini ファイルを解析するための組み込みクラスを知りません。そうする必要があるとき、私はniniを使用しました。MIT/X11 ライセンスの下でライセンスされているため、クローズド ソース プログラムに含まれる問題はありません。

とても使いやすいです。したがって、このようにフォーマットされた Settings.ini ファイルがある場合:

[Configuration]
Name = Jb Evain
Phone = +330101010101

それを使用すると、次のように簡単になります。

var source = new IniConfigSource ("Settings.ini");
var config = source.Configs ["Configuration"];

string name = config.Get ("Name");
string phone = config.Get ("Phone");
于 2008-11-12T18:36:21.573 に答える
2

ユーザーがファイルを読み取って変更できるようにする場合は、1行に1つずつ、カンマ区切りのペアをお勧めします。

key1,value1
key2,value2
...

解析は簡単です。ファイルを読み取り、改行またはコンマで分割してから、要素をペアで取得します。

于 2008-11-12T18:41:16.120 に答える
0

ファイルを次のようにフォーマットします。

key1=value1
key2=value2

ファイル全体を文字列に読み込み (これを行う単純な便利な関数が File クラスまたは文字列クラスにある可能性があります)、string.Split('=') を呼び出します。リストをトラバースし、各ペアをハッシュテーブルまたはディクショナリにポップするときに、各キーと値で string.Trim() も呼び出すようにしてください。

于 2008-11-12T18:36:43.180 に答える