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

Чтение из файла

24.12.2016, 22:24. Показов 1646. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Имеется текстовый файл, в котором информация о клиенте записывается в строчку через пробел, т.е.: "Тургенев Иван Сергеевич Гвардейская 1 2 23553", как прочитать файл и каждый набор символов до пробела записать в специально созданную переменную (surname=Тургенев, name=Иван и т.п.), используя streamreader?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.12.2016, 22:24
Ответы с готовыми решениями:

Чтение чисел из файла. Чтение после конца потока невозможно
Товарищи, помогите. В Pascal'e я не силен, так что не бейте меня ногами, но есть задача: написать...

Как заменить чтение строки из консоли на чтение текстового файла?
основное задание: найти частоту суффикса (например, "ing") в текстовом документе. в...

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

Чтение заголовка PCX файла и чтение растровых данных PCX файла
Привет форумчане! Столкнулся с такой проблемой. Нужно считать заголовок PCX файла и растровые...

12
418 / 316 / 241
Регистрация: 29.05.2010
Сообщений: 796
Записей в блоге: 1
24.12.2016, 22:44 2
Лучший ответ Сообщение было отмечено felix_felicis как решение

Решение

felix_felicis,
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
using System;
using System.IO;
 
namespace ConsoleApplication4
{
 
    class Program
    {
        static void Main(string[] args)
        {
            string s1 = "Тургенев Иван Сергеевич Гвардейская 1 2 23553";
            string s2 = "Иванов Дмитрий Сергеевич Ленина 4 5 2353";
            string s3 = "Тургенев Иван Сергеевич Любая 7 7 1234";
            File.WriteAllLines("file.txt",new string[] {s1,s2,s3});
 
            using (StreamReader reader=File.OpenText("file.txt"))
            {
                while (!reader.EndOfStream)
                {
                    var str = reader.ReadLine();
                    string[] arguments = str.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
 
                    var res = new { surname = arguments[0], name = arguments[1], thirdname = arguments[2] };
                    Console.WriteLine(res.surname+" "+res.name+" "+res.thirdname);
 
                    Console.WriteLine(arguments[3]);
                    Console.WriteLine(arguments[4]);
                    Console.WriteLine(arguments[5]);
                    Console.WriteLine(arguments[6]);
                    Console.WriteLine(new string('*',6));
                }
               
            }
 
        }
        
 
        }
   
    }
1
1 / 1 / 0
Регистрация: 20.06.2016
Сообщений: 29
24.12.2016, 22:56  [ТС] 3
kypiwindy, а эта строчка для чего нужна, и неизвестно же сколько клиентов в файле записано
Цитата Сообщение от kypiwindy Посмотреть сообщение
File.WriteAllLines("file.txt",new string[] {s1,s2,s3});
0
418 / 316 / 241
Регистрация: 29.05.2010
Сообщений: 796
Записей в блоге: 1
24.12.2016, 22:59 4
felix_felicis, я сам записал файл, чтобы не вводить ручками. Вы можете удалить все до Using и просто читать файл
0
1 / 1 / 0
Регистрация: 20.06.2016
Сообщений: 29
25.12.2016, 03:01  [ТС] 5
kypiwindy, а чем можно заменить var, не подскажете?
0
26 / 26 / 13
Регистрация: 01.07.2016
Сообщений: 105
25.12.2016, 03:52 6
kypiwindy, felix_felicis, А не проще ли будет использовать двумерный массив?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int i = 0;
string strs = 
{
   {"Тургенев","Иван","Сергеевич","Гвардейская","1","2","23553"},
   {"Иванов","Дмитрий","Сергеевич","Ленина","4","5","2353"},
   //...
}
//...
while(!reader.EndOfStream)
{
   string string_from_file = reader.ReadLine();
   strs[i++,0] = string_from_file.Split(' ');
}
//strs[0,0] = Тургенев
//strs[0,6] = 23553
//strs[1,0] = Иванов
//strs[1,6] = 2353
0
309 / 317 / 119
Регистрация: 29.10.2011
Сообщений: 1,006
25.12.2016, 11:46 7
Цитата Сообщение от SasukeSagara Посмотреть сообщение
kypiwindy, felix_felicis, А не проще ли будет использовать двумерный массив?
Нет)
Проще создать класс, который описывает человека
0
26 / 26 / 13
Регистрация: 01.07.2016
Сообщений: 105
25.12.2016, 17:45 8
sldp, Нет, не проще.
Здесь функцию ввода вывода можно автоматизировать счетчиком.
И программисту не придется писать огромный кусок кода для этого.
Просто сравни тело цикла у kypiwindy:
Цитата Сообщение от kypiwindy Посмотреть сообщение
C#
1
2
3
4
5
6
7
8
9
var str = reader.ReadLine();
 string[] arguments = str.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
var res = new { surname = arguments[0], name = arguments[1], thirdname = arguments[2] };
Console.WriteLine(res.surname+" "+res.name+" "+res.thirdname);
Console.WriteLine(arguments[3]);
Console.WriteLine(arguments[4]);
Console.WriteLine(arguments[5]);
Console.WriteLine(arguments[6]);
Console.WriteLine(new string('*',6));
с моим:
Цитата Сообщение от SasukeSagara Посмотреть сообщение
C#
1
2
string string_from_file = reader.ReadLine();
strs[i++,0] = string_from_file.Split(' ');
0
418 / 316 / 241
Регистрация: 29.05.2010
Сообщений: 796
Записей в блоге: 1
25.12.2016, 18:01 9
SasukeSagara, почему вы пристали к тому как я пишу файл?
Если вам удобно то можете хранить строки хоть в массиве x*y*z, мне удобно хранить каждую строку в массиве.
2)Почему этот велосипед с анонимным типом? Потому что автор написал в задании
Цитата Сообщение от felix_felicis Посмотреть сообщение
специально созданную переменную (surname=Тургенев, name=Иван и т.п.)
и я решил что анонимный тип подойдет. Хотя правильно было бы создать структуру или класс.
3)
Цитата Сообщение от SasukeSagara Посмотреть сообщение
string strs =
{
* *{"Тургенев","Иван","Сергеевич","Гвардейская","1","2","23553"},
* *{"Иванов","Дмитрий","Сергеевич","Ленина","4","5","2353"},
* *//...
}
и
Цитата Сообщение от SasukeSagara Посмотреть сообщение
strs[i++,0] = string_from_file.Split(' ');
бред.
Строка равная массиву, а потом пишем в строку(массив)
0
309 / 317 / 119
Регистрация: 29.10.2011
Сообщений: 1,006
25.12.2016, 19:02 10
SasukeSagara, Меньше - не значит лучше.
Создать класс для хранения человека правильнее и лучше:
1) читаемость
2) расширяемость
3) поскольку это учебное задание, то оно должна давать профит в плане обучения. И данный вариант приучает вас к прелестям ООП

Создаем модель данных
Кликните здесь для просмотра всего текста
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
class Adress
{
    public string Street { get; set; }
    public string Building { get; set; }
    public string Apartment { get; set; }
    public string Index { get; set; }
 
    public override string ToString()
    {
        return $"{Street} {Building} {Apartment} {Index}";
    }
}
 
class Person
{
    public string Name { get; set; }
    public string FamilyName { get; set; }
    public Adress Adress { get; set; }
 
    public override string ToString()
    {
        return $"{Name} {FamilyName} {Adress}";
    }
}

А дальше как угодно с ней работаем
Например:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var arr = new[]
{
    new Person()
    {
        Name = "Иван",
        FamilyName = "Тургенев",
        Adress = new Adress() { Street = "Гвардейская", Building = "1", Apartment = "2", Index = "23553" }
    },
    new Person()
    {
        Name = "Дмитрий",
        FamilyName = "Иванов",
        Adress = new Adress() { Street = "Ленина", Building = "4", Apartment = "5", Index = "2353" }
    }
};
 
File.WriteAllLines("text.txt", arr.Select(s => s.ToString()));

Сразу понятно что и где
0
26 / 26 / 13
Регистрация: 01.07.2016
Сообщений: 105
25.12.2016, 19:26 11
sldp, Не нужно мне объяснять как работают классы, спасибо
Я к тому, что менее затратное по времени разработки - мой вариант.
На коленке с тлф отписал, я считаю что юзать можно.
kypiwindy, Нет, не бред. Почитай выше.
0
309 / 317 / 119
Регистрация: 29.10.2011
Сообщений: 1,006
25.12.2016, 19:33 12
SasukeSagara, Я объяснялся не как с классами работать, а что написание программы начинается с модели данных
0
26 / 26 / 13
Регистрация: 01.07.2016
Сообщений: 105
25.12.2016, 19:40 13
sldp, Хорошо, я не спорю =)

Не по теме:

Да, согласен, так правильнее.
Но не быстрее)

0
25.12.2016, 19:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.12.2016, 19:40
Помогаю со студенческими работами здесь

Чтение бинарного файла - чтение первых 9 байт
Есть код, который читает первые 9 байт бинарного файла(заголовок записи) void...

Переделать в коде чтение из файла в чтение с клавиатуры
Переделайте что бы текст считывался с клавиатуры, а не с файла! Буду благодарен за помощь! //файл...

Чтение файла CSV и чтение из Table View
Здравствуйте, задача считать столбцы и строки excel в TextEdit. Прошу помощи в реализиции. ...

Чтение из файла. Повторное чтение файла
Добрый день. Необходимо реализовать в программе функцию повторного чтения данных из файла, в случае...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru