Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
luigration
2 / 2 / 1
Регистрация: 04.01.2013
Сообщений: 173
#1

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

21.05.2014, 23:42. Просмотров 929. Ответов 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;
      };
записана в файл. Пользователь вводит номер строки, которую нужно редактировать. Редактируем,перезаписываем файл. Не могу понять, как реализовать это дело.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.05.2014, 23:42
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Файловые потоки (C++):

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

Файловые потоки
Компилятор ругается при создании экземпляра класса ofstream. Среда разработки -...

Файловые потоки в Си и С++
Вот код. Нужно использовать чтение из файла и запись в файл, такое же как и в...

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

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

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

11
alsav22
5438 / 4833 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
21.05.2014, 23:52 #2
Цитата Сообщение от luigration Посмотреть сообщение
записана в файл.
Как записана?
0
luigration
2 / 2 / 1
Регистрация: 04.01.2013
Сообщений: 173
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;
        }
0
alsav22
5438 / 4833 / 831
Регистрация: 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), записываете массив в файл.
0
luigration
2 / 2 / 1
Регистрация: 04.01.2013
Сообщений: 173
22.05.2014, 21:10  [ТС] #5
Цитата Сообщение от alsav22 Посмотреть сообщение
Вот это в файл не нужно записывать:
C++
1
out << "Name\t\tYear\t\tStatus" << endl << endl;
В 23 строке out << endl лишний.

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

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

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

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

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

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

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

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




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

Добавлено через 48 секунд
Последний пост. Надоело из пустого в порожнее переливать...
Понту тогда записывать в файл? Задача-то на работу с файлами. Это как-то через функции seekp, seekq делается.
0
Avazart
Эксперт С++
7678 / 5587 / 542
Регистрация: 10.12.2010
Сообщений: 25,063
Записей в блоге: 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/istream/istream/read/?kw=read
http://www.cplusplus.com/reference/ostream/ostream/write/?kw=write

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

Одно "но" - при записи в двоичном режиме - файл становится не читабельным для человека (если откроете в блокноте ничего не поймете)
0
22.05.2014, 22:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.05.2014, 22:32
Привет! Вот еще темы с решениями:

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

Файловые указатели. Потоки
Вот какой вопрос у меня появился. Пусть есть 2 указателя, связанных с одним и...

Бинарные файловые потоки
Существует ли стандартный вариант? Как обозван тип такого потока для записи?...

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


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

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