Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
DimaAvatar
0 / 0 / 0
Регистрация: 05.02.2014
Сообщений: 141
#1

Повторное открытие файла - C++

29.05.2016, 19:20. Просмотров 827. Ответов 59
Метки нет (Все метки)

пишу очередную учебную программу, и возник вопрос вопросов.
я открываю текстовый файл откуда построчно читаю фалы и считаю строки в которых встречается "wire" по кол-ву таких строк выделяю память в динамическом массиве и готовлюсь снова открыть файл и произвести запись в массив структур. проблема во втором открытие файла. компилируется все ок, но не срабатывает что то.

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
45
46
47
#include <iostream>
#include <cstring>
#include <fstream>
 
using namespace std;
 
 
int main () {
 
    int local_count = 0;
    int count = -1;
    string str;
    ifstream file;
 
    file.open("/home/dima/QT_CPP/for_st/goods.txt");//здесь указать свой путь к файлу
    if (!file){
        cout<<"<База данных не обнаружена проверьте верность указания пути\n";
    } else {
        while (file){
            file>>str;
            if (strstr(str.c_str(),"wire")){
                ++count;
               // cout<<str<<"\n";
            }
        }
    }
    file.close();
 
 
    //my_wire *array_wire_store = new my_wire[count];// выделяем память под необходимое кол-во товарных позиций
 
    file.open("/home/dima/QT_CPP/for_st/goods.txt");//здесь указать свой путь к файлу
    if (!file){
        cout<<"<База данных не обнаружена проверьте верность указания пути\n";
    } else {
        while (file){
            cout<<"test";
            file>>str;
            if (strstr(str.c_str(),"wire")){
                //pars_file(str,local_count);
            }
        }
 
    }
    file.close();
 
}
в строке 38 у меня cout<<"test; это так я произвожу отладку ))) так вот этот тест у меня не выводится в консоль, из чего я делаю вывод, что второй раз файл по какой то причине не открывается. Идеи? Спасибо, братья )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.05.2016, 19:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Повторное открытие файла (C++):

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

Повторное чтение файла - C++
Привет, у меня есть файл с несколькими строками, я беру одну строку - проверяю на условие какое-то, если она подходит по условию - пишу в...

Почему после считывания матрицы из файла начинается повторное считывание? - C++
Здравствуйте. ПРоблема такова, считывает размер матрицы и саму матрицу, после успешного считвания начинает по новой её считывать, хотя...

Записать в файл g, компоненты файла f, исключив повторное вхождения чисел - C++
Дан файл f, компоненты которого являются целыми числами. Записать в файл g, компоненты файла f, исключив повторное вхождения чисел

как может корректно выполняющийся оператор >> (чтение из текстового файла) негативно влиять на открытие другого файла? - C++
Друзья! Создадим два текстовых файла, f_0.txt и f_1.txt и что-нибудь в них запизаем, например в первый запихаем 1234 а во второй 5678 и...

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

59
kolya8920
8 / 8 / 2
Регистрация: 14.05.2010
Сообщений: 133
Завершенные тесты: 1
29.05.2016, 19:33 #2
Все правильно. Программа зацикливается в первом while.
0
Unknownx
29.05.2016, 19:35
  #3

Не по теме:

Цитата Сообщение от DimaAvatar Посмотреть сообщение
while (file){
- while(!file.eof()) хотябы

0
DimaAvatar
0 / 0 / 0
Регистрация: 05.02.2014
Сообщений: 141
29.05.2016, 19:39  [ТС] #4
kolya8920, эм? а почему она зацикливается? вроде нет. while (file) - доходит до последней строки и выходит из цикла. Нет?

Добавлено через 1 минуту
Unknownx, Спасибо, увы, но и Ваш вариант не исправил ситуацию ((
0
Renji
2014 / 1382 / 312
Регистрация: 05.06.2014
Сообщений: 3,946
29.05.2016, 19:39 #5
Все работает. Но на всякий случай впилите cout<<endl в конец (сбросит буфер вывода).
0
kolya8920
8 / 8 / 2
Регистрация: 14.05.2010
Сообщений: 133
Завершенные тесты: 1
29.05.2016, 19:39 #6
Смотри пост выше. У тебя получается, что цикл продолжается пока файл открыт. А должен продолжаться пока не встретится конец файла.
0
Renji
2014 / 1382 / 312
Регистрация: 05.06.2014
Сообщений: 3,946
29.05.2016, 19:40 #7
Цитата Сообщение от kolya8920 Посмотреть сообщение
Смотри пост выше. У тебя получается, что цикл продолжается пока файл открыт.
Нет, этот цикл продолжается пока поток не вывесит флаг ошибки "дык нечего же больше читать, начальник!".
0
DimaAvatar
0 / 0 / 0
Регистрация: 05.02.2014
Сообщений: 141
29.05.2016, 19:42  [ТС] #8
Renji, а впилить куда? в первый while? после него? после file.close()
вообще то я уже всяко попробовал ))) увы... то же самое.
0
Hikari
Хитрая блондиночка $)
1450 / 957 / 285
Регистрация: 21.12.2015
Сообщений: 3,785
29.05.2016, 19:43 #9
Цитата Сообщение от DimaAvatar Посмотреть сообщение
откуда построчно читаю фалы
Я может не в свое дело лезу, но не лучше было бы тебе использовать бинарный файл с структурированными данными?
0
DimaAvatar
0 / 0 / 0
Регистрация: 05.02.2014
Сообщений: 141
29.05.2016, 19:45  [ТС] #10
Hikari, эм, я уверен, что лучше ))) только я пока не знаю что такое бинарный файл с структурными данными, но сейчас пошукаю что это есть такое )))
просто эм.. подобный вариант открытия файлов я использовал уже несколько раз и оно всегда работало... пока не понадобилось открыть его больше одного раза. Но все равно спасибо )
0
Renji
2014 / 1382 / 312
Регистрация: 05.06.2014
Сообщений: 3,946
29.05.2016, 19:45 #11
Цитата Сообщение от DimaAvatar Посмотреть сообщение
Renji, а впилить куда?
В конец программы.
Алсо, if(str.find("wire")!=std::string::npos) в 21 строчке и getline(file,str) в 20-й.
0
Unknownx
Заблокирован
29.05.2016, 19:50 #12
DimaAvatar, прикрепи свой файл
Цитата Сообщение от DimaAvatar Посмотреть сообщение
goods.txt
, гляну как там
Цитата Сообщение от DimaAvatar Посмотреть сообщение
Спасибо, увы, но и Ваш вариант не исправил ситуацию ((
не исправляет ситуацию
0
DimaAvatar
0 / 0 / 0
Регистрация: 05.02.2014
Сообщений: 141
29.05.2016, 19:52  [ТС] #13
Renji,
getline(file,str) в 20-й. и бббинго )))
спасибо )
0
DimaAvatar
0 / 0 / 0
Регистрация: 05.02.2014
Сообщений: 141
29.05.2016, 19:54  [ТС] #14
Unknownx, Да, был бы благодарен
0
Вложения
Тип файла: txt goods.txt (152 байт, 1 просмотров)
Unknownx
Заблокирован
29.05.2016, 20:21 #15
DimaAvatar,
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
#include <string>
#include <fstream>
#include <sstream>
#include <iostream>
using namespace std;
 
 
int main(){
    string str;
    fstream file;
    file.open("goods.txt");
    if (!file.is_open()){
        cout<<"<Error open\n";
    } else {
        while (!file.eof()){
            file>>str;
            if (strstr(str.c_str(),"wire")){
                //++count;
                cout<<str<<"\n";
            }
        }
    }
    file.close();
    file.clear();//без сброса флагов ошибок рабоать не будет
 
    file.open("goods.txt");
    if (!file.is_open()){
        cout<<"<Error open\n";
    } else {
        while (!file.eof()){
            file>>str;
            if (strstr(str.c_str(),"wire")){
                //++count;
                cout<<str<<"\n";
            }
        }
    }
    return 0;
}
Добавлено через 1 минуту
Цитата Сообщение от Unknownx Посмотреть сообщение
file.clear();//без сброса флагов ошибок рабоать не будет
после close для повтороного использования вызывай ещё метод clear. Далее
Цитата Сообщение от DimaAvatar Посмотреть сообщение
if (!file){
- роверка должна быть такой
Цитата Сообщение от Unknownx Посмотреть сообщение
if (!file.is_open()){
Добавлено через 19 секунд
Цитата Сообщение от Unknownx Посмотреть сообщение
while (!file.eof()){
- как я и говорил изначально
0
29.05.2016, 20:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2016, 20:21
Привет! Вот еще темы с ответами:

Открытие файла - C++
Здравствуйте, интересует вопрос, можно ли сделать так, чтобы программа открывала нужный файл (наприм. картинку), если можно то как?

Открытие файла на C++ - C++
Здравствуйте. Появился вопрос, если, допустим, писать батник, то для открытия файла нужно писать start (или open) &quot;Путь к файлу&quot;... А...

Открытие файла. - C++
Простите, а возможно ли сделать так: допустим я задаю вопрос в консоли: хотите открыть такой-то файл? если да - то он соответственно...

открытие файла - C++
ifstream is; cout&lt;&lt;endl&lt;&lt;&quot;Name file: &quot;; cin&gt;&gt;name; is.open(name, ios::binary); if(!is.is_open()) { ...


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

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

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