10 / 0 / 2
Регистрация: 12.10.2015
Сообщений: 62
1

Ошибка конвертации в double при чтении массива из файла

05.09.2016, 21:59. Показов 2012. Ответов 4
Метки нет (Все метки)

Добрый День!
Считую двомерный массив double из файла таким образом

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class Data
    {
        public static int size;
        public static double[,] matrixA;
 
        public Data()        
        {
            var streamReader = new StreamReader("Data.txt");
            var sizeString = streamReader.ReadLine();
            size = Int32.Parse(sizeString);
            matrixA = new double[size, size];
            Console.WriteLine("Number  " + size);
 
            for (int i = 0; i < size; i++)
            {
                string line = streamReader.ReadLine();
 
                double[] nums = line.Split(new char[] {' '}).Select(n => Convert.ToDouble(n)).ToArray();
 
                for (int j = 0; j < size; j++)
                {
                    matrixA[i, j] = nums[j];
                }
            }
 
        }
    }
Выдает ошибку здесь Convert.ToDouble(n).
В файле записано такое
2
1.0 2.0
3.0 5.0

Если написать числа без точки вот так
2
1 2
3 5
все будет работать.
Помогите разобраться пожалуйста.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.09.2016, 21:59
Ответы с готовыми решениями:

Ошибка при чтении массива из файла
Доброго времени суток всем участникам форума! При написании программы столкнулся с проблемой,...

Ошибка при чтении массива слов из файла
void __fastcall TForm1::Button2Click(TObject *Sender) { char *ss; int p = 0; FILE *ff; ...

Ошибка 106 при чтении массива из файла
В общем такая проблема, есть процедура чтения двумерного массива из файла. Без графики при...

Ошибка при бинарном чтении массива структур из файла
Здравствуйте! Написал программу, которая бинарно записывает и считывает массив структур в файл, но...

4
Администратор
Эксперт .NET
15368 / 12380 / 4935
Регистрация: 17.03.2014
Сообщений: 25,079
Записей в блоге: 1
05.09.2016, 22:08 2
Matanoid, Convert.ToDouble() использует текущие региональные настройки системы. На твоей машине используются настройки с разделителем целой и дробной части в виде запятой. Поэтому метод ToDouble генерирует исключение. Нужно указать правильные региональные настройки при преобразовании. В данном случае подойдет инвариантная культура:
C#
1
double[] nums = line.Split(new char[] {' '}).Select(n => Convert.ToDouble(n, CultureInfo.InvariantCulture)).ToArray();
0
10 / 0 / 2
Регистрация: 12.10.2015
Сообщений: 62
05.09.2016, 22:15  [ТС] 3
OwenGlendower, я вывел матрицу на екран
C#
1
2
3
4
5
6
7
8
9
Console.WriteLine("Matrix A : ");
            for (int i = 0; i < size; i++)
            {
                for (int j = 0; j < size; j++)
                {
                    Console.Write(matrixA[i, j] + " ");
                }
                Console.Write("\n");
            }
и у меня у числа дробная часть стоит через кому. Например 6,54. Можно сделать так что бы было через точку.
Надо поменять настройки с разделителем целой и дробной части?
0
1492 / 1207 / 821
Регистрация: 29.02.2016
Сообщений: 3,597
05.09.2016, 22:21 4
https://habrahabr.ru/post/138957/
0
Администратор
Эксперт .NET
15368 / 12380 / 4935
Регистрация: 17.03.2014
Сообщений: 25,079
Записей в блоге: 1
05.09.2016, 22:30 5
Цитата Сообщение от Matanoid Посмотреть сообщение
Можно сделать так что бы было через точку.
Укажи нужную культуру при форматировании. У Console.WriteLine() нет перегрузки принимающей IFormatProvider, поэтому необходимо использовать string.Format:
C#
1
Console.Write(string.Format(CultureInfo.InvariantCulture, "{0:F} ", matrixA[i, j]));
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.09.2016, 22:30
Помогаю со студенческими работами здесь

Ошибка "Индекс за пределами диапазона" при чтении массива классов из файла
Ошибка возникает до загрузки первой формы. Всю ночь просидел - так и не понял, что ему не...

Ошибка при чтении файла
Всем привет. Помогите разобраться с ошибкой. Вот код: procedure TForm1.FormCreate(Sender:...

Ошибка при чтении файла
Есть вот такой код: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;iomanip&gt; #include...

Ошибка при чтении файла
Всем привет. Пытаюсь считать из файла, который программно не создаю, создаю на диске и прописываю...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru