Разбор элемента массива строк в int - PullRequest
0 голосов
/ 01 октября 2010

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

Ошибка 1 Создание содержимого сгенерировало FormatException: входная строка была в неправильном формате. at System.Number.StringToNumber (String str, NumberStyles, NumberBuffer & number, информация NumberFormatInfo, логическое parseDecimal) в System.Number.ParseInt32 (String s, стиль NumberStyles, информация NumberFormatInfo) at System.Int32.Parse (String s) в TileContent.Tiles.TileLayerProcessor.Process (вход XmlDocument, контекст ContentProcessorContext) в C: \ Users \ Darren \ Documents \ Enders \ TileContent \ Tiles \ TileLayerProcessor.cs: строка 75

вот код, вызывающий проблему ниже

                foreach (string line in lines)
                {
                    string realLine = line.Trim();

                    if (string.IsNullOrEmpty(line))
                      continue;

                    string[] cells = realLine.Split(' ');

                    for (int x = 0; x < width; x++)
                    {
                        int cellIndex = int.Parse(cells[x]);

                        layer.Layout[row, x] = cellIndex;
                    }

Ответы [ 5 ]

1 голос
/ 01 октября 2010

Как ни странно, это было связано с тем, что я сделал табуляции для информации, которая путалась с тем, как она читалась.

0 голосов
/ 01 октября 2010

Если вы используете простой синтаксический анализ int, обязательно предоставьте IFormatProvider, идентифицирующий источник культуры.Если у вас есть числа в форме, инвариантной к культуре, используйте следующий код:

int cellIndex = int.Parse(cells[x], CultureInfo.InvariantCulture);

Возможно, это не решит вашу проблему сейчас, но хорошо всегда передавать параметр CultureInfo (это также будет работать как комментарий).КСТАТИ.Если бы я был тобой, я бы использовал TryParse () вместо ...

0 голосов
/ 01 октября 2010

Вы говорите, что пытаетесь проанализировать один элементов, но ваш for цикл выполняет синтаксический анализ всех элементов.

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

Кроме того, вы можете использовать int.TryParse(), чтобы определить, находится ли значение в int илинет, не выбрасывая ошибку ..

0 голосов
/ 01 октября 2010

Трудно сказать, не видя входных данных, но предполагая, что все строки содержат только допустимые значения int, я бы предположил, что существует более одного пробела, разделяющего числа в строке.В этом случае массив, возвращаемый Split, будет содержать несколько пустых строк, которые нельзя преобразовать в int.В этом случае используйте:

string[] cells = realLine.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
0 голосов
/ 01 октября 2010

Ошибка возникает из-за того, что cells[x] не может быть проанализирован как Int32. Попробуйте отладку и проверку cells после string[] cells = realLine.Split(' ');

...