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

Чтение данных из структурированного файла

10.01.2013, 10:34. Показов 2581. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. У меня есть программа которая находит периметр и площадь круга, треугольника, писал все через классы. Но я не могу написать код для того чтобы можно было прочитать информацию из файла вида
krug
7
treyg
4
4
6
pram
5
3

Всё это нужно написать с стандартном классе Program помогите пожалуйста. Заранее спасибо.
Вложения
Тип файла: rar ConsoleApplication1.rar (16.2 Кб, 10 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.01.2013, 10:34
Ответы с готовыми решениями:

Чтение структурированного файла
Здравствуйте, подскажите как лучше прочитать структурированный файл. Спасибо.

Занесение данных в массив из структурированного файла
Всем привет! Столкнулся со следующей проблемой... Есть файл, содержащий текст: 1 2 1 2 3 4 5 5 4 3 2 1 6 7 8 9 4 Требуется...

Запись и чтение данных из структурированного файла, поиск по строкам
Доброго времени суток Всем! Вот такая тема, допустим есть некий файл txt или другой какой то просто не знаю какой лучше Так вот есть...

22
174 / 174 / 57
Регистрация: 08.01.2013
Сообщений: 335
10.01.2013, 11:28
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Ну как - то так:
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            // создаем reader и открываем файл
            StreamReader sr = new StreamReader(@"c:\test.txt");
            // считываем весь текст из файла
            string text = sr.ReadToEnd();
            // закрываем поток
            sr.Close();
 
            //разбиваем строку
            string[] splitStr = text.Split(new Char[] { '\r', '\n' });
            // просматриваем полученный массив строк
            for (int i = 0; i < splitStr.Length; i++)
            {
                if (splitStr[i] == "krug") //ищем определяющее слово
                {
                    Kryg circle = new Kryg(Convert.ToInt32(splitStr[i+1])); //создаем новый объект класса
                }
                else if (splitStr[i] == "treyg") //ищем определяющее слово
                {
                    treyg triangle = new treyg(Convert.ToInt32(splitStr[i + 1]),  //создаем новый объект класса
                                               Convert.ToInt32(splitStr[i + 2]),
                                               Convert.ToInt32(splitStr[i + 3]));
                }
                else if (splitStr[i] == "pram") //ищем определяющее слово
                {
                    pram rectangle = new pram(Convert.ToInt32(splitStr[i + 1]),   //создаем новый объект класса
                                              Convert.ToInt32(splitStr[i + 2]));
                }
            }
 
        }
    }
}
Правда, как видите, никаких проверок на корректность заполнения файла я не писал, поэтому файл нужно внимательнее заполнять, чтобы после krug - следовало только одно численное значение, после treyg - три, после pram - два.
0
0 / 0 / 1
Регистрация: 21.02.2012
Сообщений: 52
10.01.2013, 12:17  [ТС]
Спасибо большое за код. Подскажите пожалуйста почему я не могу вывести то что у меня посчитало в консоль вот таким методом?
C#
1
2
foreach (Figure l in sr)
            Console.WriteLine(l.Vivod());
0
174 / 174 / 57
Регистрация: 08.01.2013
Сообщений: 335
10.01.2013, 12:31
sr - это экземпляр класса StreamReader, этот класс служит для работы с файлами, сам по себе этот экземпляр не содержит никакой информации из файла, а только методы и функции для работы с файлами.
Покажите код, где вы хотите вывести информацию.
0
0 / 0 / 1
Регистрация: 21.02.2012
Сообщений: 52
10.01.2013, 14:26  [ТС]
Извиняйте ввел вас в заблуждения. Я хочу спросить как вывести в консоль то что я посчитал в классах.
C#
1
List<Figure> fg = new List<Figure>();
0
192 / 192 / 29
Регистрация: 03.12.2009
Сообщений: 853
10.01.2013, 14:30
C#
1
2
3
4
foreach(var figure in fg)
{
  Console.WriteLine(figure.Vivod());
}
не?

Добавлено через 2 минуты
А вообще лучше в классе переопределить метод ToString() и тогда так
C#
1
2
3
4
foreach(var figure in fg)
{
  Console.WriteLine(figure.ToString());
}
1
0 / 0 / 1
Регистрация: 21.02.2012
Сообщений: 52
10.01.2013, 14:40  [ТС]
Так будет правильно?
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
28
29
30
31
32
33
34
35
36
37
38
39
40
class Program
    {
        static void Main(string[] args)
        {
            // создаем reader и открываем файл
            StreamReader sr = new StreamReader("test.txt");
            // считываем весь текст из файла
            string text = sr.ReadToEnd();
            // закрываем поток
            List<Figure> fg = new List<Figure>();
            sr.Close();
 
            //разбиваем строку
            string[] splitStr = text.Split(new Char[] { '\r', '\n' });
            // просматриваем полученный массив строк
            for (int i = 0; i < splitStr.Length; i++)
            {
                if (splitStr[i] == "krug") //ищем определяющее слово
                {
                    Kryg circle = new Kryg(Convert.ToInt32(splitStr[i + 1])); //создаем новый объект класса
                }
                if (splitStr[i] == "treyg") //ищем определяющее слово
                {
                    treyg triangle = new treyg(Convert.ToInt32(splitStr[i + 1]),  //создаем новый объект класса
                                               Convert.ToInt32(splitStr[i + 2]),
                                               Convert.ToInt32(splitStr[i + 3]));
                }
                if (splitStr[i] == "pram") //ищем определяющее слово
                {
                    pram rectangle = new pram(Convert.ToInt32(splitStr[i + 1]),   //создаем новый объект класса
                                              Convert.ToInt32(splitStr[i + 2]));
                }
                
            }
            sr.Close();
        foreach (var Figure in fg)
            Console.WriteLine(Figure.Vivod());
        }
    }
}
0
192 / 192 / 29
Регистрация: 03.12.2009
Сообщений: 853
10.01.2013, 14:46
Возможно, покажите класс Figure
0
0 / 0 / 1
Регистрация: 21.02.2012
Сообщений: 52
10.01.2013, 14:50  [ТС]
Класс Figure абстрактный.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    public abstract class Figure
    {
        public abstract double ploshad();
        public abstract double perimetr();
        public abstract string Vivod();
    }
}
Добавлено через 57 секунд
Класс для круга
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
28
29
30
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    class Kryg:Figure
    {
        int k;
        public Kryg(int p)
    {
        k = p;
    }
        public override double perimetr()
    {
        double x = 2 * k * 3.14;
        return x; 
    }
        public override double ploshad()
        {
            double x = 2 * k * k * 3.14;
            return x;
        }
        public override string Vivod()
        {
            return " " + ploshad() + " " + perimetr();
        }
    }
}
0
192 / 192 / 29
Регистрация: 03.12.2009
Сообщений: 853
10.01.2013, 14:57
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

C#
1
2
3
4
5
6
7
8
9
    public abstract class Figure
    {
        public abstract double ploshad();
        public abstract double perimetr();
        public override string ToString()
        {
            return " " + ploshad() + " " + perimetr();
        }
    }
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
28
29
30
31
32
33
34
35
36
37
38
39
40
class Program
    {
        static void Main(string[] args)
        {
            // создаем reader и открываем файл
            StreamReader sr = new StreamReader("test.txt");
            // считываем весь текст из файла
            string text = sr.ReadToEnd();
            // закрываем поток
            List<Figure> fg = new List<Figure>();
            sr.Close();
 
            //разбиваем строку
            string[] splitStr = text.Split(new Char[] { '\r', '\n' });
            // просматриваем полученный массив строк
            for (int i = 0; i < splitStr.Length; i++)
            {
                if (splitStr[i] == "krug") //ищем определяющее слово
                {
                    fg.Add(new Kryg(Convert.ToInt32(splitStr[i + 1]))); //создаем новый объект класса
                }
                if (splitStr[i] == "treyg") //ищем определяющее слово
                {
                    fg.Add(new treyg(Convert.ToInt32(splitStr[i + 1]),  //создаем новый объект класса
                                               Convert.ToInt32(splitStr[i + 2]),
                                               Convert.ToInt32(splitStr[i + 3])));
                }
                if (splitStr[i] == "pram") //ищем определяющее слово
                {
                    fg.Add(new pram(Convert.ToInt32(splitStr[i + 1]),   //создаем новый объект класса
                                              Convert.ToInt32(splitStr[i + 2])));
                }
                
            }
            sr.Close();
        foreach (var Figure in fg)
            Console.WriteLine(Figure.ToString());
        }
    }
}
Попробуйте так, должно работать
1
0 / 0 / 1
Регистрация: 21.02.2012
Сообщений: 52
10.01.2013, 15:04  [ТС]
Спасибо.
C#
1
Console.WriteLine(Figure.ToString());
Почему ToString() а не Vivod()?
0
192 / 192 / 29
Регистрация: 03.12.2009
Сообщений: 853
10.01.2013, 15:07
Так правильнее. Все так делают
2
174 / 174 / 57
Регистрация: 08.01.2013
Сообщений: 335
10.01.2013, 15:14
Цитата Сообщение от da1z Посмотреть сообщение
Так правильнее. Все так делают
это только если ему по заданию не написано придумать свой метод вывода))
0
0 / 0 / 1
Регистрация: 21.02.2012
Сообщений: 52
10.01.2013, 15:17  [ТС]
C#
1
2
3
4
5
6
7
8
9
10
public abstract class Figure
    {
        public abstract double ploshad();
        public abstract double perimetr();
        public abstract  string Tostring()
        {
            return " " + ploshad() + " " + perimetr();
        }
    }
}
Пишет что так делать нельзя.
Кликните здесь для просмотра всего текста
ошибка CS0500: "ConsoleApplication1.Figure.Tostring ()" не может объявить тело, т.к. помечен модификатором abstract
0
174 / 174 / 57
Регистрация: 08.01.2013
Сообщений: 335
10.01.2013, 15:25
Насколько я помню, в абстрактных классах методы только описываются, но не реализуются, поэтому
C#
1
2
3
4
 public abstract  string Tostring()
        {
            return " " + ploshad() + " " + perimetr();
        }
мне кажется неверным. Вы только описываете методы в классе Figure, а реализовывать их нужно в классах наследниках. Поправьте меня если я не прав...
0
192 / 192 / 29
Регистрация: 03.12.2009
Сообщений: 853
10.01.2013, 15:29
Цитата Сообщение от da1z Посмотреть сообщение
C#
1
2
3
4
5
6
7
8
9
public abstract class Figure 
{ 
  public abstract double ploshad();
  public abstract double perimetr();
  public override string ToString() 
  { 
    return " " + ploshad() + " " + perimetr(); 
  } 
}
я же написал
1
0 / 0 / 1
Регистрация: 21.02.2012
Сообщений: 52
10.01.2013, 16:11  [ТС]
Сейчас задам очень глупый вопрос. Почему когда я ввожу в файл
Kryg
5

Мне ничего не выдает?
0
174 / 174 / 57
Регистрация: 08.01.2013
Сообщений: 335
10.01.2013, 16:31
потому что вы вводите Kryg, а программа ищет krug Я делал именно те слова которые вы привели в примере файла))
0
0 / 0 / 1
Регистрация: 21.02.2012
Сообщений: 52
10.01.2013, 16:41  [ТС]
Это я здесь отпечатался в файле ввожу kryg.
0
174 / 174 / 57
Регистрация: 08.01.2013
Сообщений: 335
10.01.2013, 16:46
krug а не kryg А на будущее, давайте более осмысленные имена переменным
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.01.2013, 16:46
Помогаю со студенческими работами здесь

Чтение структурированного файла
Собственно сабж. Не знаю как реализовать - есть несколько dat файлов, разделённых на блоки по n байт, а структура этих блоков описывается в...

Вывод данных из структурированного файла
помогите как вывести данные из файла в таблицу следующим образом strana | stolica | valuta россия москва рубль и тд... чтоб...

Считывание данных из структурированного файла
Всем добрый день. Возник такой вопрос. Имеется файл, в котором записаны числа примерно так: 0.1 'тра-та-та 0.00125 'тра-та-та 5...

Считывание структурированного файла
Здравствуйте, написал программу с помощью которой должны считываться данные типа Reading из файла mydata.txt в вектор mod_points; Но на...

Чтение файла, чтение названия папки где находится файл, запись данных на PHP
Допустим у нас есть структура с папками типа Large -&gt; Vehicles -&gt; Firetruck_0 В этой папке лежит файл формата .dat Что нужно сделать? ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера 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. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru