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

Чтение файла в массивы и дальнейшая работа с ними

16.05.2016, 10:31. Показов 927. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Столкнулся с проблемой чтения массивов из файла. Задача следующая: необходимо считать из файла, в котором 4 столбца и n строк, массивы так, чтобы каждый столбец был отдельным массивом для дальнейшей работы с ними.
Написал вот такой код:
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
private void открытьToolStripMenuItem_Click(object sender, EventArgs e)
        {
            OpenFileDialog OFD = new OpenFileDialog();
            OFD.DefaultExt = "*.txt";
            OFD.Filter = "TXT (*.txt*)|*.txt";
            OFD.Title = "Выберите документ для загрузки данных";
            if (OFD.ShowDialog() == DialogResult.OK)
            {
                MessageBox.Show(OFD.FileName);
            }
            string filename = OFD.FileName;
            string[] test = File.ReadAllLines(filename);
            int a = 0;
            string[] elements;
            decimal[] h = new decimal[test.Length];
            decimal[] V = new decimal[test.Length];
            decimal[] F = new decimal[test.Length];
            decimal[] t = new decimal[test.Length];
            for (a = 0; a < test.Length; a++)
            {
                elements = test[a].Replace(',','.').Split('\t');
                h[a] = Convert.ToDecimal(elements[0]);
                V[a] = Convert.ToDecimal(elements[1]);
                F[a] = Convert.ToDecimal(elements[2]);
                t[a] = Convert.ToDecimal(elements[3]);
При попытке запуска компилятор выдает исключение FormatException на строке
C#
1
 V[a] = Convert.ToDecimal(elements[1]);
и пишет
Необработанное исключение типа "System.FormatException" в mscorlib.dll

Дополнительные сведения: Входная строка имела неверный формат.
Прошу помочь и подсказать, что я делаю не так и как сделать правильно.
И еще вопрос. Правильно ли я делаю, что определяю массивы сразу во время открытия файла? Просто они в дальнейшем будут использоваться другими кнопками.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.05.2016, 10:31
Ответы с готовыми решениями:

Ввод данных и дальнейшая работа с ними
На ввод поступают данные в виде: слово1:слово2 слово3:слово4 слово5:слово6 ... (количество заранее не известно) Дальше...

Динамическое создание элементов и дальнейшая работа с ними
Добрый вечер. В моей программе есть набор элементов (простые кнопки), и при нажатии на них в моей рабочей зоне (tabel). Должны создаваться...

Поиск в файле нужных листов и дальнейшая работа с ними
Добрый вечер! Недавно занялась осваивать макросы и столкнулась со следующей проблемой: Нужно написать макрос, который бы копировал данные...

2
0 / 0 / 0
Регистрация: 16.05.2016
Сообщений: 2
16.05.2016, 10:46  [ТС]
Забыл прикрепить файл, из которого читаю данные.
Вложения
Тип файла: rar Массив данных1.rar (3.3 Кб, 3 просмотров)
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18288 / 14211 / 5368
Регистрация: 17.03.2014
Сообщений: 28,889
Записей в блоге: 1
16.05.2016, 13:29
noztail, во-первых, при пребразовании из строки следует явно указать культуру. Раз ты заменяешь запятую на точку, то можно использовать CultureInfo.InvariantCulture. Еще лучше убрать ненужный Replace и использовать культуру ru-RU. Во-вторых, в файле есть пустые строки и их нужно пропускать.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
string[] test = File.ReadAllLines(filename);
decimal[] h = new decimal[test.Length];
decimal[] V = new decimal[test.Length];
decimal[] F = new decimal[test.Length];
decimal[] t = new decimal[test.Length];
var culture = CultureInfo.GetCultureInfo("ru-RU");
for (int a = 0; a < test.Length; a++)
{
    if (string.IsNullOrWhiteSpace(test[a])) continue;
    
    string[] elements = test[a].Split('\t');
    h[a] = Convert.ToDecimal(elements[0], culture);
    V[a] = Convert.ToDecimal(elements[1], culture);
    F[a] = Convert.ToDecimal(elements[2], culture);
    t[a] = Convert.ToDecimal(elements[3], culture);
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.05.2016, 13:29
Помогаю со студенческими работами здесь

Чтение данных из файла и работа с ними
Может ли кто нибудь помочь? Нужно в Visual Studio 2010 написать программу, которая будет из файла читать определённые значения...

Чтение строк с файла и работа с ними
Есть файл. В нём строки. Требуется проверить существует ли файл. Сделал такой блок string FilesLines; try {...

Как считать данные из поля ввода и дальнейшая работа с ними
Мне нужно считать данные из поля (Несколько строк), а также из переключателя (Radiobutton) from tkinter import * root = Tk() ...

Чтение из файла и дальнейшая обработка данных
Начал потихоньку думать над решением практической задачи. Существует даталоггер. Он пишет на флешку данные с цифровых и аналоговых датчиков...

Работа с текстом из файла и дальнейшая его обработка
Здрасте! Недавно выдали задание для курсовой работы: - обеспечить возможность ввода текста из файла; - текст вводится либо до конца...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru