web-dev-qa-db-ja.com

パターンベースの文字列解析

いくつかの値をコンマで結合して文字列化する必要がある場合は、たとえば次のようにします。

string.Format("{0},{1},{3}", item.Id, item.Name, item.Count);

そして、例えば、"12,Apple,20"
それから私は反対の操作をしたいのですが、与えられた文字列から値を取得します。何かのようなもの:

parseFromString(str, out item.Id, out item.Name, out item.Count);

Cでは可能ですが、C#ではそのような関数はわかりません。

10
Sergey Metlov

はい、これは簡単です。 String.Split method カンマごとに文字列を分割します。

例えば:

string myString = "12,Apple,20";
string[] subStrings = myString.Split(',');

foreach (string str in subStrings)
{
    Console.WriteLine(str);
}
19
Cody Gray

可能な実装は String.Split または Regex.Match を使用します

例。

public void parseFromString(string input, out int id, out string name, out int count)
{
    var split = input.Split(',');
    if(split.length == 3) // perhaps more validation here
    {
        id = int.Parse(split[0]);
        name = split[1];
        count = int.Parse(split[2]);     
    }
}

または

public void parseFromString(string input, out int id, out string name, out int count)
{
    var r = new Regex(@"(\d+),(\w+),(\d+)", RegexOptions.IgnoreCase);
    var match = r.Match(input);
    if(match.Success)
    {
        id = int.Parse(match.Groups[1].Value);
        name = match.Groups[2].Value;
        count = int.Parse(match.Groups[3].Value);     
    }
}

編集:最後に、SOには、C#のscanf実装に多数のスレッドがあります。
scanfに相当するC#を探しています
c#でsscanfを実行する方法

8
Jamiec

文字列形式を想定できる場合、特にitem.Name,が含まれていない場合

void parseFromString(string str, out int id, out string name, out int count)
{
    string[] parts = str.split(',');
    id = int.Parse(parts[0]);
    name = parts[1];
    count = int.Parse(parts[2]);
}

これは単にあなたが望むことをしますが、エラーチェックを追加することをお勧めします。 XMLまたはJSONへのシリアライズ/デシリアライズを検討することをお勧めします。

3
Jodrell

分割機能を使用する

var result = "12,Apple,20".Split(',');
2
Vlad Bezden