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

Не записывается строка в файл - C++

26.02.2013, 16:51. Просмотров 560. Ответов 10
Метки нет (Все метки)

Не записывается строка в файл в чем может быть причина ?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
fstream f("work_mem.txt", ios::in | ios::out);//
        //---------------------------------------------------------
        if ( ! f.is_open() ){
        std::cerr << "Can't open file!" << std::endl;
        return 1;
         }
        //----------------------------------------------------------
 if (!f.eof())
               getline(f, str1); 
                  if ( str1.find(str) != std::string::npos )
                   cout <<"String exists in File "<< str1<<endl;
                 else 
                 memf<<str;
                 cout << "String added in file"<<endl;
                 f.close();
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.02.2013, 16:51
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Не записывается строка в файл (C++):

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

Почему не записывается строка в файл?
Как мне закодированную строку записать в файл? Подскажите, пожалуйста. В этой...

Строка не записывается в файл, если в ней присутствуют пробелы
Делаю записную книгу на с++ в консоли (Code::Block) Все отлично работает если...

Почему текстовая строка записывается с пробелами, а читается без?
Всем здравствуйте. std::ifstream in; std::ofstream out; void...

Записывается мусор в файл
Здравствуйте, есть следующий код для вывода дефолтных значений в файл: ...

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

10
Kill100
419 / 285 / 81
Регистрация: 11.12.2010
Сообщений: 1,195
Завершенные тесты: 1
26.02.2013, 16:59 #2
если не ошибаюсь то не
cout << строка
а
f<<строка
1
snake5129x
1 / 1 / 2
Регистрация: 29.09.2012
Сообщений: 52
26.02.2013, 19:06  [ТС] #3
Цитата Сообщение от Kill100 Посмотреть сообщение
если не ошибаюсь то не
cout << строка
а
f<<строка
не записывается пробовал

f<<str ;

может есть еще какие то идеи ?

Добавлено через 1 час 48 минут
ап...
0
The_bolT
70 / 70 / 12
Регистрация: 22.01.2013
Сообщений: 231
26.02.2013, 19:08 #4
А можно полный код увидеть?
1
snake5129x
1 / 1 / 2
Регистрация: 29.09.2012
Сообщений: 52
26.02.2013, 19:29  [ТС] #5
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
48
#include <iostream>
#include <string>
#include <fstream>
#include <stdio.h>
using namespace std;
 int main()
{
    ifstream in("rules.txt");//тут файл, который нужен
    //-------------------------------------------------
    if ( ! in.is_open() ){
        std::cerr << "Can't open file!" << std::endl;
        return 1;
    }
    //----------------------------------------------
    string str ,str1,str2;
    int locate; //положение позиции курсора 
    int cnt;
 
    if (!in.eof())
    getline(in,str);//считали первую строку
    in.close(); //закрыли входной файл
    
    int posIf = str.find("if");//определяем позиц 
    int posEnd = str.find("and");//определяем позиц 
    int posThen = str.find("then");//определяем позиц 
        str.resize(posEnd-1);//удаляем and в конце строки
        str.erase(posIf,3);//удаляем if в начале стр
        
        fstream memf("work_mem.txt", ios::in | ios::out);//файл памяти 
        //---------------------------------------------------------
        if ( ! memf.is_open() ){
        std::cerr << "Can't open file!" << std::endl;
        return 1;
         }
        //-----------------------------------------------------------
              if (!memf.eof())
               getline(memf, str1); 
                  if ( str1.find(str) != std::string::npos )
                   cout <<"String exists in MEMORY "<< str1<<endl;
                 else 
                 memf.close();
                 cout << "String added in file"<<endl;
                 memf<<str;
 
    system("PAUSE");
    return 0;
    
}
0
alsav22
5438 / 4833 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
26.02.2013, 19:37 #6
Добавлено через 3 минуты
В 41 строке закрываете фай. А открыть перед записью?

Добавлено через 2 минуты
И, наверное, скобок после else не хватает.
0
snake5129x
1 / 1 / 2
Регистрация: 29.09.2012
Сообщений: 52
26.02.2013, 20:13  [ТС] #7
Спасибо, но результут тот же )
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
48
49
50
51
52
#include <iostream>
#include <string>
#include <fstream>
#include <stdio.h>
using namespace std;
 int main()
{
    ifstream in("rules.txt");//ГІГіГІ ГґГ*éë, êîòîðûé Г*óæåГ*
    //-------------------------------------------------
    if ( ! in.is_open() ){
        std::cerr << "Can't open file!" << std::endl;
        return 1;
    }
    //----------------------------------------------
    string str ,str1,str2;
    int locate; //ïîëîæåГ*ГЁГҐ ïîçèöèè êóðñîðГ* 
    int cnt;
 
    if (!in.eof())
    getline(in,str);//Г±Г·ГЁГІГ*ëè ïåðâóþ ñòðîêó
    in.close(); //Г§Г*êðûëè âõîäГ*îé ГґГ*éë
    
    int posIf = str.find("if");//îïðåäåëÿåì ïîçèö 
    int posEnd = str.find("and");//îïðåäåëÿåì ïîçèö 
    int posThen = str.find("then");//îïðåäåëÿåì ïîçèö 
        str.resize(posEnd-1);//ГіГ¤Г*ëÿåì and Гў ГЄГ®Г*öå ñòðîêè
        str.erase(posIf,3);//ГіГ¤Г*ëÿåì if Гў Г*Г*Г·Г*ëå Г±ГІГ°
        
        fstream memf("work_mem.txt", ios::in | ios::out);//ГґГ*éë ГЇГ*ìÿòè 
        //---------------------------------------------------------
        if ( ! memf.is_open() ){
        std::cerr << "Can't open file!" << std::endl;
        return 1;
         }
        //-----------------------------------------------------------
              if (!memf.eof())
               getline(memf, str1); 
                  if ( str1.find(str) != std::string::npos )
                   cout <<"String exists in MEMORY "<< str1<<endl;
                 else {
                 memf << str;
                 cout << "String added in file"<<endl;
                 memf.close();
                 }
                    
                    
    cout<<str<<endl;
    
    system("PAUSE");
    return 0;
    
}
Если кратко то программа должна находить выражения между if else and и сверать есть ли они в файле work_mem.txt если нет то записывать их туда
0
alsav22
5438 / 4833 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
26.02.2013, 20:19 #8
После чтения из файла, закрыть его, и открыть для записи. В else заход есть? "String added in file" на экран выводит?
1
snake5129x
1 / 1 / 2
Регистрация: 29.09.2012
Сообщений: 52
26.02.2013, 20:42  [ТС] #9
Цитата Сообщение от alsav22 Посмотреть сообщение
После чтения из файла, закрыть его, и открыть для записи. В else заход есть? "String added in file" на экран выводит?
выводит , заход в else есть
0
alsav22
5438 / 4833 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
26.02.2013, 20:49 #10
В 6 посте я написал, что нет открытия файла для записи. Не нужно было переносить закрытие файла. Нужно было добавить открытие для записи.

Добавлено через 2 минуты
Если файл открыт для чтения и записи, то, для перехода от чтения к записи, нужно или закрыть файл и открыть для записи, или указать (seekp) куда записывать.
1
snake5129x
1 / 1 / 2
Регистрация: 29.09.2012
Сообщений: 52
26.02.2013, 21:18  [ТС] #11
Спасибо большое да вы правы, решил проблему добавив в код из этого поста тык
C++
1
2
if(fs.eof())
        fs.clear();
+ добавил seekp как вы сказали

Выкладываю готовый код может кому - то пригодится
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
48
49
50
51
52
53
54
55
#include <iostream>
#include <string>
#include <fstream>
#include <stdio.h>
using namespace std;
 int main()
{
    ifstream in("rules.txt");//ГІГіГІ ГґГ*éë, êîòîðûé Г*óæåГ*
    //-------------------------------------------------
    if ( ! in.is_open() ){
        std::cerr << "Can't open file!" << std::endl;
        return 1;
    }
    //----------------------------------------------
    string str ,str1,str2;
    int locate; //ïîëîæåГ*ГЁГҐ ïîçèöèè êóðñîðГ* 
    int cnt;
 
    if (!in.eof())
    getline(in,str);//Г±Г·ГЁГІГ*ëè ïåðâóþ ñòðîêó
    in.close(); //Г§Г*êðûëè âõîäГ*îé ГґГ*éë
    
    int posIf = str.find("if");//îïðåäåëÿåì ïîçèö 
    int posEnd = str.find("and");//îïðåäåëÿåì ïîçèö 
    int posThen = str.find("then");//îïðåäåëÿåì ïîçèö 
        str.resize(posEnd-1);//ГіГ¤Г*ëÿåì and Гў ГЄГ®Г*öå ñòðîêè
        str.erase(posIf,3);//ГіГ¤Г*ëÿåì if Гў Г*Г*Г·Г*ëå Г±ГІГ°
        
        fstream memf("work_mem.txt", ios::in | ios::out);//ГґГ*éë ГЇГ*ìÿòè 
        //---------------------------------------------------------
        if ( ! memf.is_open() ){
        std::cerr << "Can't open file!" << std::endl;
        return 1;
         }
        //-----------------------------------------------------------
              if (!memf.eof())
               getline(memf, str1); 
                if(memf.eof())
                  memf.clear();
                  if ( str1.find(str) != std::string::npos )
                   cout <<"String exists in MEMORY "<< str1<<endl;
                 else {
                 memf.seekp(memf.tellg());
                 memf << str;
                 cout << "String added in file"<<endl;
                 memf.close();
                 }
                    
                    
    cout<<str<<endl;
    
    system("PAUSE");
    return 0;
    
}
0
26.02.2013, 21:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2013, 21:18
Привет! Вот еще темы с решениями:

В файл записывается мусор
Добрый вечер! Почему при записи в бинарный файл, в файл записывается мусор и...

Информация не записывается в файл
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;conio.h&gt; #include &lt;string&gt;...

Результат не записывается в файл
Здравствуйте. Столкнулся с такой проблемой: после выполнения цикла (условия),...

Не записывается бинарный файл:(
Здравствуйте. Программа читает четыре числа типа double в текстовом файле и...


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

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

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