Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как считать данные из файла? нужно считать переменные разных типов 
V
    Опции темы
takedo
Дата 21.9.2009, 08:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 1.6.2005

Репутация: нет
Всего: 3



Здравствуйте.
Столкнулся вот с какой вроде бы и тривиальной проблемой: не могу понять как мне считать данные из текстового файла smile .
Вормат данных вроде бы прост, например, вот такой хотя бы:
Код

массив 1
1.2 3.4 2 -7
массив 2
1 2 3.4 5

Это в общем то таблицы, а не массивы. Но у себя в программе я их задал переменными и хотел их проиницализировать из программы, чтобы не писать 800 переменных вручную(они уже 1 раз написаны были - так зачем ещё). Но понял, что не знаю как сделать такую вещь с помощью банальной функции Read. Ведь мне же надо не только символы считать, но и привести их числа к определенному типу так сказать. В МСДН нашел возможность считывать с помощью ReadLine, а потом наверное можно организовать поток из считанной строки - но! Дальше то мне опять нужно будет получить из строки несколько значений! Как это делается проще? Подскажите пожалуйста


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
Roha
Дата 21.9.2009, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 14.12.2006

Репутация: 1
Всего: 1



Проще, по-моему, хранить это все в XML.

Цитата

Это в общем то таблицы, а не массив

Для таблиц например метод WriteXml\ReadXml в DataTable
PM MAIL   Вверх
takedo
Дата 21.9.2009, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 1.6.2005

Репутация: нет
Всего: 3



да нет, это не такие таблицы... Это были просто таблицы в книге. Они уже набраны в текстовом файле, теперь бы их считать


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
diadiavova
Дата 21.9.2009, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 18
Всего: 142



Считываешь файл построчно, вызываешь функцию Split(делишь по пробелам), далее у числовых типов есть статические методы Parse и  TryParse при помощи которых текст переводится в соответствующий числовой формат.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
takedo
Дата 21.9.2009, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 1.6.2005

Репутация: нет
Всего: 3



так уже и сделал, но как то сложновато - думал проще можно.


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
Heinzz
Дата 21.9.2009, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 12.12.2008
Где: .net

Репутация: 3
Всего: 9



Длинно, но с регексами
Код

 Dictionary<int, List<double>> dict = new Dictionary<int,List<double>>();
            string file = File.ReadAllText(@"C:\doc.txt",Encoding.Default);
            string pattern = @"^массив (\d).$\n(-?\d+\.?\d?)\s(-?\d+\.?\d?)\s(-?\d+\.?\d?)\s(-?\d+\.?\d?)";
            for (Match m = Regex.Match(file,pattern,RegexOptions.Multiline); m.Success; m = m.NextMatch())
            {
                List<double> list = new List<double>();
                for (int i = 2; i < m.Groups.Count; i++)
                {
                    list.Add(double.Parse((m.Groups[i].ToString()).Replace('.',',')));
                }
                dict.Add(int.Parse(m.Groups[1].ToString()), list);
            }

            //Все готово, будем словарь использовать использовать
            for (int i=1;i<=dict.Count;i++)
            {
                Console.WriteLine("В массиве№" + i + "находятся");
                List<double> list = dict[i];
                foreach (double d in list)
                {
                    Console.WriteLine("\t"+d);
                }
            }
            Console.ReadKey();




--------------------
user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0978 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.