Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
5 / 5 / 2
Регистрация: 07.01.2013
Сообщений: 102
1

Неправильный парсинг строки и неправильный её вывод

29.10.2015, 11:11. Показов 751. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день!

Столкнулся с непонятным поведением парсера:

На вход подается вот такая строка:
[45.343, -90.143, -89.998, -89.936, -90.019, -89.738, -90.133]
Далее, я делаю ее парсинг вот таким образом:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
            int numberOfSensorsReceived2 = 0;
 
            string output_data2;
            output_data2 = input_data2.Split('[', ']')[1];
            string[] massive2 = output_data2.Split(',');
 
            double[] sample2;
            sample2 = new double[7];
            for (int i = 0; i < 7; i++)
            {
                sample2[i] = double.Parse(massive2[i]);
                textBox5.Text += sample2[i].ToString() + ", ";
 
                numberOfSensorsReceived2++;
                label11.Text = numberOfSensorsReceived2.ToString();
            }
Но появляется ошибка "Дополнительные сведения: Входная строка имела неверный формат." вот в этой строчке кода:
C#
1
                sample2[i] = double.Parse(massive2[i]);
Поэтому я добавил ей инвариантность культуры и, вроде бы, все успешно заработало:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
            int numberOfSensorsReceived2 = 0;
 
            string output_data2;
            output_data2 = input_data2.Split('[', ']')[1];
            string[] massive2 = output_data2.Split(',');
 
            double[] sample2;
            sample2 = new double[7];
            for (int i = 0; i < 7; i++)
            {
                sample2[i] = double.Parse(massive2[i], CultureInfo.InvariantCulture);
                textBox5.Text += sample2[i].ToString() + ", ";
 
                numberOfSensorsReceived2++;
                label11.Text = numberOfSensorsReceived2.ToString();
            }
На выходе получаю:
45,343, -90,143, -89,998, -89,936, -90,019, -89,738, -90,133,
У меня два вопроса: первый, из любознательности - почему первый мой код не работает как надо? Что я сделал не так? А второй вопрос - как сделать так, чтобы на выходе дробная часть отделялась от целой не запятой, а точкой?

Добавлено через 5 минут
Со вторым вопросом разобрался, сделал вот так:
C#
1
                textBox5.Text += sample2[i].ToString().Replace(",", ".") + ", ";
Буду очень благодарен, если кто-нибудь подскажет ответ на первый вопрос: что я изначально делал не так?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.10.2015, 11:11
Ответы с готовыми решениями:

Неправильный вывод строки, C++
Напишите часть кода которая исправит вывод чтобы сообщение выводилось один раз, а не столько,...

Неправильный вывод строки
Функция должна получать строку, проверять ее и записывать в переменную. Но при выводе получается...

Неправильный вывод строки на ассемблере
Программа на ассемблере должна выводить на экран имя и фамилию, введенные ранее с клавиатуры....

DOS неправильный вывод строки
Разбирая программу отслеживаю переходы по условию. Ветви которые в данный момент не интересуют...

4
1 / 1 / 3
Регистрация: 26.10.2015
Сообщений: 25
29.10.2015, 11:21 2
Daemon2017, по умолчанию double числа записываются с запятой а не с точкой, поэтому double.Parse, получив на вход 45.343 выкидывает тебе FormatException
1
484 / 439 / 123
Регистрация: 05.01.2010
Сообщений: 1,848
29.10.2015, 12:23 3
распарсить можно проще:
C#
1
2
3
4
            var input_data2 = "[45.343, -90.143, -89.998, -89.936, -90.019, -89.738, -90.133]";
            var numbers = input_data2.Trim(new[] {'[', ']'})
                                     .Split(new[] {','}, StringSplitOptions.RemoveEmptyEntries)
                                     .Select(num => double.Parse(num.Replace('.', ',')));
0
5 / 5 / 2
Регистрация: 07.01.2013
Сообщений: 102
29.10.2015, 13:42  [ТС] 4
Цитата Сообщение от veselchack Посмотреть сообщение
Daemon2017, по умолчанию double числа записываются с запятой а не с точкой, поэтому double.Parse, получив на вход 45.343 выкидывает тебе FormatException
Спасибо! А ведь и правда. Всегда забываю, что в коде надо разделять их точками, а в текстбоксах и прочих иссточниках данных - запятыми.

Цитата Сообщение от valera_21 Посмотреть сообщение
распарсить можно проще:
Спасибо, попробовал так:
C#
1
2
3
4
5
6
7
8
            var numbers = input_data2.Trim(new[] { '[', ']' })
                                     .Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
                                     .Select(num => double.Parse(num.Replace('.', ',')));
 
            foreach (var x in numbers)
            {
                textBox5.Text += x + " ";
            }
Вывод:
44,639 -12,445 18,315 -14,222 18,716 -13,098 18,502
Пробовал код отредактировать так, чтобы на выходе целая и дробная часть разделялись точками, но это не увенчалось успехом - неверный формат данных, якобы
0
[Bicycle Reinventor]
332 / 270 / 109
Регистрация: 19.10.2011
Сообщений: 668
Записей в блоге: 2
29.10.2015, 14:01 5
C#
1
value.ToString(CultureInfo.InvariantCulture);
Будет с точкой
0
29.10.2015, 14:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.10.2015, 14:01
Помогаю со студенческими работами здесь

Неправильный вывод урезанной строки DrawString
Привет. Нужно урезать и вывести путь к папке. Private Sub Form1_Paint(ByVal sender As...

Неправильный вывод UTF8 строки вместе с setw
Есть файл с UTF8 строкой. Считываем его и выводим во второй файл с выравниванием. В результате...

Чтение строки из файла дает неправильный вывод
Добрый день! Вопрос такой, код работает неправильно. Смысл такой: читаем строку. Если первый...

Неправильный логин и неправильный пароль, программа не выдает сообщения об ошибке
Вообщем проблема такова: DBConnect-&gt;ConnectionString = &quot;Provider=SQLOLEDB.1;Password=&quot; +...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru