Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
luigration
2 / 2 / 0
Регистрация: 04.01.2013
Сообщений: 159
#1

Файловые потоки - C++

21.05.2014, 23:42. Просмотров 873. Ответов 11
Метки нет (Все метки)

Структура
C++ (Qt)
1
2
3
4
5
6
7
8
9
enum status {Boss=1, Manager};
 
struct Worker
      {
           
            string Name;
            int Year;
            status Status;
      };
записана в файл. Пользователь вводит номер строки, которую нужно редактировать. Редактируем,перезаписываем файл. Не могу понять, как реализовать это дело.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.05.2014, 23:42     Файловые потоки
Посмотрите здесь:

Файловые потоки - C++
Компилятор ругается при создании экземпляра класса ofstream. Среда разработки - Visual C++ 2008. Выдает error C2079: 'fileout' uses...

файловые потоки - C++
Помогите найти ошибку! Программа из книги Дейтелов!Не понимаю что я пропустил .. ------ Построение начато: проект: potok,...

Файловые потоки - C++
Для каждого автобуса автопарка укажите его номер, маршрут, фамилию и инициалы шофера, время в пути. Предусмотреть поиск по фамилии шофера.

Файловые потоки в Си и С++ - C++
Вот код. Нужно использовать чтение из файла и запись в файл, такое же как и в языке СИ (без использования библиотек которых нет в СИ). Я...

Файловые потоки - C++
1 задача) Дан текстовый файл. Напечатать все строки, в которых имеется хотя бы один пробел. 2 задача) Дан файл f, элементами которого...

Файловые указатели. Потоки - C++
Вот какой вопрос у меня появился. Пусть есть 2 указателя, связанных с одним и тем же файлом открытым в режиме read. Если я считываю...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.05.2014, 23:52     Файловые потоки #2
Цитата Сообщение от luigration Посмотреть сообщение
записана в файл.
Как записана?
luigration
2 / 2 / 0
Регистрация: 04.01.2013
Сообщений: 159
22.05.2014, 20:43  [ТС]     Файловые потоки #3
Цитата Сообщение от alsav22 Посмотреть сообщение
Как записана?
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 ifstream in;
      ofstream out;
 
      in.open("work.txt", ios::in);
      out.open("work.txt", ios::app|ios::out);
      
      if(!out)
      {
        cout << "error";
      }
 
      out << "Name\t\tYear\t\tStatus" << endl << endl;
      for(int i(0); i<N; i++)
        {
            out << emp[i].Name << "\t\t" << emp[i].Year << "\t\t";
 
            switch(emp[i].Status)
            {
            case 1: out << "Boss\n"; break;
            case 2: out << "Manager\n"; break;
            
            }
            out << endl;
        }
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.05.2014, 21:02     Файловые потоки #4
Вот это в файл не нужно записывать:
C++
1
out << "Name\t\tYear\t\tStatus" << endl << endl;
В 23 строке out << endl лишний.
Цитата Сообщение от luigration Посмотреть сообщение
Пользователь вводит номер строки, которую нужно редактировать. Редактируем,перезаписываем файл. Не могу понять, как реализовать это дело.
Читаете данные из файла в массив структур (используя оператор >>), находите нужную, редактируете, открываете файл для записи (без ios::app), записываете массив в файл.
luigration
2 / 2 / 0
Регистрация: 04.01.2013
Сообщений: 159
22.05.2014, 21:10  [ТС]     Файловые потоки #5
Цитата Сообщение от alsav22 Посмотреть сообщение
Вот это в файл не нужно записывать:
C++
1
out << "Name\t\tYear\t\tStatus" << endl << endl;
В 23 строке out << endl лишний.

Читаете данные из файла в массив структур (используя оператор >>), находите нужную, редактируете, открываете файл для записи (без ios::app), записываете массив в файл.
Не лишний. Иначе все в строку будет.

Добавлено через 40 секунд

Я прекрасно понимаю, что нужно считать, найти строку, перезаписать, но КАК?
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.05.2014, 21:16     Файловые потоки #6
Цитата Сообщение от luigration Посмотреть сообщение
Не лишний. Иначе все в строку будет.
Это разве не переход на новую строку ('\n'):
C++
1
case 1: out << "Boss\n";
Цитата Сообщение от luigration Посмотреть сообщение
Я прекрасно понимаю, что нужно считать, найти строку, перезаписать, но КАК?
Что КАК?

Добавлено через 4 минуты
Как найти? По индексу в массиве. Как считать? Как записываете, только чтение. Как записать? Как у вас в коде.
luigration
2 / 2 / 0
Регистрация: 04.01.2013
Сообщений: 159
22.05.2014, 21:28  [ТС]     Файловые потоки #7
Цитата Сообщение от alsav22 Посмотреть сообщение
Это разве не переход на новую строку ('\n'):
C++
1
case 1: out << "Boss\n";
Что КАК?

Добавлено через 4 минуты
Как найти? По индексу в массиве. Как считать? Как записываете, только чтение. Как записать? Как у вас в коде.
Один человек - одна строка.
Не понимаю, как ходить по строкам, как перезаписать одну строку или структуру с новой строкой.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.05.2014, 21:35     Файловые потоки #8
Цитата Сообщение от luigration Посмотреть сообщение
Один человек - одна строка.
Один человек - одна структура (она же - строка в файле).
Цитата Сообщение от luigration Посмотреть сообщение
Не понимаю, как ходить по строкам,
По индексам, в массиве структур.
Цитата Сообщение от luigration Посмотреть сообщение
как перезаписать одну строку или структуру с новой строкой.
Ваш код, в цикле for(), на каждой итерации, в файл записывается одна структура (она же - строка в файле) из массива структур emp.
luigration
2 / 2 / 0
Регистрация: 04.01.2013
Сообщений: 159
22.05.2014, 21:48  [ТС]     Файловые потоки #9
Цитата Сообщение от alsav22 Посмотреть сообщение
Один человек - одна структура (она же - строка в файле).

По индексам, в массиве структур.

Ваш код, в цикле for(), на каждой итерации, в файл записывается одна структура (она же - строка в файле) из массива структур emp.
Да со структурой проблем нет. Как в файле ходить по строкам? Как считывать? Как изменять?
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.05.2014, 22:00     Файловые потоки #10
Цитата Сообщение от luigration Посмотреть сообщение
Как в файле ходить по строкам?
Не нужно там ходить, в массиве структур, когда считаете файл, будете ходить(по индексам).
Цитата Сообщение от luigration Посмотреть сообщение
Как считывать?
Цитата Сообщение от alsav22 Посмотреть сообщение
Как записываете, только чтение.
Цитата Сообщение от alsav22 Посмотреть сообщение
Читаете данные из файла в массив структур (используя оператор >>)
Цитата Сообщение от luigration Посмотреть сообщение
Как изменять?
Находите в массиве нужную структуру, переписываете нужное поле (или все поля) структуры.

Добавлено через 48 секунд
Последний пост. Надоело из пустого в порожнее переливать...
luigration
2 / 2 / 0
Регистрация: 04.01.2013
Сообщений: 159
22.05.2014, 22:21  [ТС]     Файловые потоки #11
Цитата Сообщение от alsav22 Посмотреть сообщение
Не нужно там ходить, в массиве структур, когда считаете файл, будете ходить(по индексам).




Находите в массиве нужную структуру, переписываете нужное поле (или все поля) структуры.

Добавлено через 48 секунд
Последний пост. Надоело из пустого в порожнее переливать...
Понту тогда записывать в файл? Задача-то на работу с файлами. Это как-то через функции seekp, seekq делается.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.05.2014, 22:32     Файловые потоки
Еще ссылки по теме:

Бинарные файловые потоки - C++
Существует ли стандартный вариант? Как обозван тип такого потока для записи? Для чтения? Чтоб бинарники писать операторами типа so&lt;&lt;d; (so...

Файловые потоки и функции - C++
Скажите пожалуйста, как передать файловый поток в функцию?

Бинарные файловые потоки - C++
Нужно написать две функции, одна из них сохраняет перечень в бинарный файл, другая считает данные из этого же бинарного файла. Читал про...

Файловые потоки данных - C++
Помогите, пожалуйста! Надо написать программу, которая считывает из файла строки и сохраняет их в другой файл в обратном порядке. Я...


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

Или воспользуйтесь поиском по форуму:
Avazart
Эксперт С++
7122 / 5299 / 273
Регистрация: 10.12.2010
Сообщений: 23,453
Записей в блоге: 17
22.05.2014, 22:32     Файловые потоки #12
Цитата Сообщение от luigration Посмотреть сообщение
Это как-то через функции seekp, seekq делается.
Делается...
Только в двоичном режиме открытие файла и структура не должна использовать string и другие "сложные" типы.

Т.е структура должна выглядеть приблизительно так
C++
1
2
3
4
5
6
struct Worker
{           
    char Name[256];
    int Year;
    int Status;
};
Читать/записывать через:

http://www.cplusplus.com/reference/i.../read/?kw=read
http://www.cplusplus.com/reference/o...rite/?kw=write

Если размер структуры фиксирован и всегда известен, всегда можно перейти к N-записи в файле = N* sizeof(Worker).

Одно "но" - при записи в двоичном режиме - файл становится не читабельным для человека (если откроете в блокноте ничего не поймете)
Yandex
Объявления
22.05.2014, 22:32     Файловые потоки
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru