1

次のように書かれたいいねを含むファイルがあります。

[NAME]: [PROPERTY]-[VALUE], [PROPERTY]-[VALUE], [PROPERTY]-[VALUE].

例えば:

[Person]: [Age]-[21], [HairColor]-[Turqoise], [Gender]-[Other].

私は Linq に精通していますが、Linq を使用してこれを解析する方法を理解するのに苦労しています。

すべての行を確認できるようにしたい:

[NAME]: [PROPERTY]-[VALUE], [PROPERTY]-[VALUE], [PROPERTY]-[VALUE].
[NAME]: [PROPERTY]-[VALUE], [PROPERTY]-[VALUE], [PROPERTY]-[VALUE].
[NAME]: [PROPERTY]-[VALUE], [PROPERTY]-[VALUE], [PROPERTY]-[VALUE].
[NAME]: [PROPERTY]-[VALUE], [PROPERTY]-[VALUE], [PROPERTY]-[VALUE].
[NAME]: [PROPERTY]-[VALUE], [PROPERTY]-[VALUE], [PROPERTY]-[VALUE].
[NAME]: [PROPERTY]-[VALUE], [PROPERTY]-[VALUE], [PROPERTY]-[VALUE].
[NAME]: [PROPERTY]-[VALUE], [PROPERTY]-[VALUE], [PROPERTY]-[VALUE].
[NAME]: [PROPERTY]-[VALUE], [PROPERTY]-[VALUE], [PROPERTY]-[VALUE].

...そして、取得した各人で何かを行います。

何か案は?どんな助けでも大歓迎です。

4

3 に答える 3

1

LINQ で解析することはありません。正規表現などで解析してから、LINQ を使用して操作します。

たとえば、次のような正規表現を使用します。

\[(.*)\]: \[(.*)\]-\[(.*)\], \[(.*)\]-\[(.*)\], \[(.*)\]-\[(.*)\]

かっこで囲まれたグループを使用します。

于 2012-09-05T01:41:03.240 に答える
1

解析する LINQ:

string input = "[Person]: [Age]-[21], [HairColor]-[Turqoise], [Gender]-[Other].";
var output = input.Split(new[] {':', '-', ','}, StringSplitOptions.RemoveEmptyEntries)
    .Select(s => s.Trim('[', ']', ' ', '.')).ToList();

var name = output.First();
var properties = output.Skip(1).ToList();

var propertyDic = Enumerable.Range(0, properties.Count()/2)
                         .ToDictionary(i => properties.ElementAt(2*i),
                                       i => properties.ElementAt(2*i + 1));
于 2012-09-05T08:22:34.230 に答える
1

もちろん、必要なものが正しく揃っている場合の例を次に示します。

        File.ReadAllLines("Utils.txt")
            .Select(s => new
            {
                Name = s.Substring(1, s.IndexOf("]:") - 1),
                Values = s.Substring(s.IndexOf(":") + 2)
                          .Split(new string[] { ", " }, StringSplitOptions.RemoveEmptyEntries)
                          .ToDictionary(l => l.Substring(1, l.IndexOf("]-") - 1),
                                        l => l.Substring(l.IndexOf("-[") + 2).Trim(']'))
            })
            .ToList()
            .ForEach(o =>
                {
                    Console.WriteLine(o.Name);
                    o.Values.ToList().ForEach(p => Console.WriteLine(string.Format("\t{0}:\t{1}", p.Key, p.Value)));
                });

したがって、ここでは、2 つのプロパティを持つ匿名オブジェクトのリストを取得します。

  1. 単なる文字列に名前を付ける
  2. 値 - キーがプロパティで値が値であるペアの辞書

私の例では、読んだ内容を単純なループで実行し、コンソールに出力します

テスト ファイル (Utils.txt) の内容は次のとおりです。

[NAME]: [PROPERTY1]-[VALUE1], [PROPERTY2]-[VALUE2], [PROPERTY3]-[VALUE3] 
[Person]: [Age]-[21], [HairColor]-[Turqoise], [Gender]-[Other]

出力:

NAME
    PROPERTY1:  VALUE1
    PROPERTY2:  VALUE2
    PROPERTY3:  VALUE3
Person
    Age:    21
    HairColor:  Turqoise
    Gender: Other
于 2012-09-05T01:53:49.167 に答える