Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Как считать данные из файла?


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

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

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

Автор: Roha 21.9.2009, 08:49
Проще, по-моему, хранить это все в XML.

Цитата

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

Для таблиц например метод WriteXml\ReadXml в DataTable

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

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

Автор: takedo 21.9.2009, 12:58
так уже и сделал, но как то сложновато - думал проще можно.

Автор: Heinzz 21.9.2009, 18:20
Длинно, но с регексами
Код

 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();


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)