Анализ строки на основе шаблона - PullRequest
10 голосов
/ 22 июля 2011

Когда мне нужно структурировать некоторые значения, соединяя их запятыми, я делаю, например:

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 #.

Ответы [ 4 ]

19 голосов
/ 22 июля 2011

Да, это достаточно просто. Вы просто используете String.Split метод , чтобы разбить строку на каждую запятую.

Например:

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

foreach (string str in subStrings)
{
    Console.WriteLine(str);
}
8 голосов
/ 22 июля 2011

Возможные реализации будут использовать 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 есть связка потоков по реализации scanf в C #
Поиск C # эквивалента scanf
как мне сделать sscanf в c #

3 голосов
/ 22 июля 2011

Если вы можете принять формат строк, особенно если 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.

2 голосов
/ 22 июля 2011

Использовать функцию Split

var result = "12,Apple,20".Split(',');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...