Разделить строку, задав каждой переменной внутри нее значение - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть этот код, который должен Split, и назначить значение каждой переменной внутри String:

string ab = "Seq [A=255, B=0, C=0, D=0]";

string[] abcd = ab.Split(',');

int a = Convert.ToInt32(abcd[0].Split('=')[1].Trim());
int b = Convert.ToInt32(abcd[1].Split('=')[1].Trim());
int c = Convert.ToInt32(abcd[2].Split('=')[1].Trim());
int d = Convert.ToInt32(abcd[3].Split('=')[1].Trim());

В последней строке я получил эту ошибку

System.FormatException: 'Входная строка была в неправильном формате.'

Ответы [ 3 ]

0 голосов
/ 27 сентября 2018

Ваш последний сплит оставляет] в строке.Попробуйте:

int d = Convert.ToInt32((abcd[3].Substring(0, abcd[3].Length - 1)).Split('=')[1].Trim());
0 голосов
/ 27 сентября 2018

Регулярные выражения - это другой подход:

  using System.Linq;  
  using System.Text.RegularExpressions;

  ...

  string ab = "Seq [A=255, B=0, C=0, D=0]";

  Dictionary<string, int> vars = Regex
    .Matches(ab, @"(?<Name>[A-Za-z]+)\s*=\s*(?<Value>-?[0-9]+)")
    .OfType<Match>()
    .ToDictionary(match => match.Groups["Name"].Value,
                  match => int.Parse(match.Groups["Value"].Value),
                  StringComparer.OrdinalIgnoreCase);

Тогда

  int a = vars["a"];
  int b = vars["b"];

  // Do we have "e" variable?
  if (vars.ContainsKey("e")) {
    ...
  }

  // If we have "d" variable, assign it to d    
  if (var.TryGetValue("d", out int d)) {
    ...
  }  
0 голосов
/ 27 сентября 2018

Ну да, Convert.ToInt("0]") мне тоже не кажется числом.Обратите внимание, как abcd[3] == " =0]" в вашем случае.

Это пример, где минимальный пример приведет вас к уменьшенным и уменьшенным версиям, пока проблема не станет очевидной.В вашем случае я бы сузил его до:

string ab = "Seq [A=255, B=0, C=0, D=0]";
string[] abcd = ab.Split(',');
int d = Convert.ToInt32(abcd[3].Split('=')[1].Trim());

, затем до

int d = Convert.ToInt32(" D=0]".Split('=')[1].Trim());

и так далее, пока ошибка не станет очевидной.Когда вы освоите технику, вы, вероятно, будете сильно зависеть от нее и найдете ее невероятно полезной.

...