реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Текстовые файлы в С++., Многократный просмотр.
Serhiy_UA
сообщение Jun 2 2014, 08:16
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112



Кто подскажет, по С++ с консольным приложением, например, в Dev-C++.

Есть текстовый файл, который считывается до конца с некой обработкой.
Нужно повторить считывание этого же файла с самого начала, но уже для следующей обработки по результатам предыдущей.
Но второй раз считывание этого файла уже не получается, а получается только раз.
Нарезки из кода такие:
#include <fstream>
. . . .
ifstream fin("f.txt ");
. . . .
while (fin.getline(buff, 50)) { . . . . };
. . . .
fin.clear();
fin.seekg(0,std::ios::beg);


То есть последние два оператора должны как бы позволить просмотреть файл с самого начала еще раз аналогичным while (), но этого не происходит.
А закрытие и открытие файла по ходу программы:
fin.close();
ifstream fin("f.txt ");

тоже не помогло, сообщает здесь на ошибку типа "redeclaretion".

Что делать? Файл нужно просмотреть несколько раз...
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jun 2 2014, 08:42
Сообщение #2


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Код
using namespace std;

#include <iostream>
#include <fstream>

int main()
{
    char     buff[81];
    ifstream fin("in.txt");

    for (int i=0; i<3; ++i)
    {
        while (fin.getline(buff, sizeof(buff)))
            cout << "buff: " << buff << endl;

        fin.clear();                              // If the eofbit flag is set before the call, the function seekg fails (sets failbit and returns).
        fin.seekg(0,std::ios::beg);
    }
}


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
andrewlekar
сообщение Jun 2 2014, 13:40
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163



Я, честно говоря, не понял, что имел в виду demiurg_spb. Наверное, что у него всё работает как надо.
Я могу подсказать по поводу версии с закрытием.
Сделайте так:

Код
fin.close();
ifstream fin2("f.txt ");
while (fin2.getline(buff, 50)) { . . . . };
Go to the top of the page
 
+Quote Post
Serhiy_UA
сообщение Jun 3 2014, 01:56
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112



к demiurg_spb и andrewlekar
Спасибо за помощь и советы!
Разобрался, все получилось.

Может, еще подскажете...
В качестве учебной задачи самому себе, с целью освоения С++, поставил разработку программы ассемблирования в машинные коды для собственного небольшого 8-разрядного софт-процессора в ПЛИС. Есть ли статьи или литература по вопросам ассемблирования? Имею некоторые познания из учебного курса по сканеру с ассемблера, но давно это было…
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jun 3 2014, 04:05
Сообщение #5


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(andrewlekar @ Jun 2 2014, 21:50) *
Я, честно говоря, не понял, что имел в виду demiurg_spb. Наверное, что у него всё работает как надо.

Смысл в строке комментария:
Цитата
If the eofbit flag is set before the call, the function seekg fails (sets failbit and returns)
Функция seekg не работает, если установлен флаг eofbit, а он как раз и установлен, т.к. мы дошли до конца файла.
Чтобы очистить этот флаг нужно использовать предварительно clear(), что я и отразил в примере.

Цитата(Serhiy_UA @ Jun 3 2014, 10:06) *
Спасибо за помощь и советы!
Пожалуйста!
Цитата
Может, еще подскажете...
Нет не смогу подсказать - не в моей компетенции...


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
skyv
сообщение Jun 3 2014, 05:57
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 181
Регистрация: 26-07-10
Пользователь №: 58 606



Цитата(Serhiy_UA @ Jun 3 2014, 09:06) *
Может, еще подскажете...
В качестве учебной задачи самому себе, с целью освоения С++, поставил разработку программы ассемблирования в машинные коды для собственного небольшого 8-разрядного софт-процессора в ПЛИС. Есть ли статьи или литература по вопросам ассемблирования? Имею некоторые познания из учебного курса по сканеру с ассемблера, но давно это было…


В книге Перельройзена (название позабыл) есть пример построения 8-ми разрядного ядра на VHDL.
Go to the top of the page
 
+Quote Post
andrewlekar
сообщение Jun 3 2014, 06:02
Сообщение #7


Знающий
****

Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163



Цитата
Чтобы очистить этот флаг нужно использовать предварительно clear(), что я и отразил в примере.

Так clear() и в первоначальном коде был.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jun 3 2014, 10:37
Сообщение #8


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(andrewlekar @ Jun 3 2014, 14:12) *
Так clear() и в первоначальном коде был.
Там не код, а его участки...
Я же привёл целиком рабочую программу, читающую 3 раза подряд один и тот же файл.
И эту программу я проверил на работоспособность прежде чем публиковать.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 22:04
Рейтинг@Mail.ru


Страница сгенерированна за 0.0142 секунд с 7
ELECTRONIX ©2004-2016