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

Работа с текстовыми файлами си++ - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.93
Alex_Skripa
17 / 17 / 1
Регистрация: 16.09.2013
Сообщений: 126
26.10.2013, 14:52     Работа с текстовыми файлами си++ #1
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#include "stdafx.h"
#include <iostream>
#include <string>
#include <string.h>
#include <math.h>
#include <fstream>
#include <windows.h>
using namespace std;
 
void train()
{
    fstream f;
    string word,check,pre;
    bool t;
    do
    {
        label:cout <<"\nДля выхода из обучения введите ""0""";
        t=false;
        cout <<"\nВведите новое слово --> ";cin >>word;
        if (word!="0")
        {
           f.open("D:\\cловарь.txt");
           if (f)
           {
               while (!f.eof())
               {
                   f >>check;
                   if (check==word) t=true; 
               }
           }
           else cout <<"\nСоздайте словарь!";
           f.close();
           if (t)
           {
               cout <<"\nДанное слово уже присутствует в словаре!!!Попробуйте другое слово!!!";
               goto label;
           }
           else
           {
               f.open("D:\\cловарь.txt",ios::app);
               f <<word<<"\n";
               /*cout <<word.length()<<"\n";
               cout <<"Первая буква----->"<<word[1]<<"\n";*/
               f.close();
           }
           }
    }
    while(word!="0");
}
 
void words()
{
    fstream f1,f;
    string word,check;
    int i,j,k;
    bool *t;
    cout <<"\nВведите ключевое слово\n";
    cin >>word;
    t=new bool [word.length()];
    f1.open("D:\\Результаты.txt");
    f1 <<"Ваше ключевое слово-------->"<<word;
    f1 <<"\nСоставленные слова:";
    f1.close();
    [COLOR="Red"]f.open("D:\\словарь.txt");
    if (f)[/COLOR]
    {
         while (!f.eof())
               {
                   f >>check;
                   if(check.length()<=word.length())
                   {
                       for(i=0;i<word.length();i++)
                           t[i]=false;
                       k=0;
                       for(i=0;i<check.length();i++)
                           for(j=0;j<word.length();j++)
                           {
                               if ((check[i]==word[j])&&(!t))
                               {
                                   k++;
                                   t[j]=true;
                                   break;
                               }
                           }
                       if (k==check.length())
                       {
                           f1.open("D:\\Результаты.txt",ios::app);
                           f1 <<"\n--->"<<check;
                           f1.close();
                       }
                   }
               }
    }
    else cout <<"\nФайл словарь не найден!!! Для создания запустите обучение...";
    f.close();
}
 
int main()
{
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251);
    int mode;
    cout <<"Выберите режим работы программы:";
    cout <<"\nРежим обучения--------------------->0";
    cout <<"\nРежим составления слов-------->Другое\n";
    cin >>mode;
    if (mode==0) train();
    else words();
    getchar();
    getchar();
    return 0;
}
не могу разобраться почему не работает выделенный фрагмент. Возникает ошибка при открытие файла... Хотя предыдущая функция спокойно открывает и дополняет файл, подскажите в чем проблемка
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2013, 14:52     Работа с текстовыми файлами си++
Посмотрите здесь:

C++ Работа с текстовыми файлами
Работа с текстовыми файлами C++
Работа с текстовыми файлами C++
Работа с текстовыми файлами C++
C++ Работа с текстовыми файлами
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
2ima
☆ Форумчанин(FSC)☆
 Аватар для 2ima
909 / 288 / 9
Регистрация: 28.04.2013
Сообщений: 2,324
Записей в блоге: 10
Завершенные тесты: 1
26.10.2013, 15:34     Работа с текстовыми файлами си++ #2
Цитата Сообщение от Alex_Skripa Посмотреть сообщение
f1.open("D:\\Результаты.txt");
А это работает?
Alex_Skripa
17 / 17 / 1
Регистрация: 16.09.2013
Сообщений: 126
27.10.2013, 10:16  [ТС]     Работа с текстовыми файлами си++ #3
Цитата Сообщение от FSC Посмотреть сообщение
А это работает?
Нет но я исправил описание переменной на ofstream f1; и заработало, интересно что в функции train() все работает нормально...

Добавлено через 36 минут
f.open()так и не работает изменял тип, метод открытия и все равно не открывает не могу разобраться, HELP)
2ima
☆ Форумчанин(FSC)☆
 Аватар для 2ima
909 / 288 / 9
Регистрация: 28.04.2013
Сообщений: 2,324
Записей в блоге: 10
Завершенные тесты: 1
27.10.2013, 12:14     Работа с текстовыми файлами си++ #4
Цитата Сообщение от Alex_Skripa Посмотреть сообщение
while (!f.eof())
точно "!"? Это ж знак "не"!
Shtirliz72
200 / 160 / 38
Регистрация: 25.10.2013
Сообщений: 527
27.10.2013, 12:26     Работа с текстовыми файлами си++ #5
Код читать просто невозможно. Оформи его нормально.
2ima
☆ Форумчанин(FSC)☆
 Аватар для 2ima
909 / 288 / 9
Регистрация: 28.04.2013
Сообщений: 2,324
Записей в блоге: 10
Завершенные тесты: 1
27.10.2013, 12:28     Работа с текстовыми файлами си++ #6
C++
1
2
3
4
5
6
7
8
f.open("D:\\словарь.txt");
if (f)
{
while ({!}f.eof())
{
f >>check;
if(check.length()<=word.length())
{
{}-выделение неясности
Alex_Skripa
17 / 17 / 1
Регистрация: 16.09.2013
Сообщений: 126
27.10.2013, 14:36  [ТС]     Работа с текстовыми файлами си++ #7
Цитата Сообщение от FSC Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
f.open("D:\\словарь.txt");
if (f)
{
while ({!}f.eof())
{
f >>check;
if(check.length()<=word.length())
{
{}-выделение неясности
Проверка на окончание файла {Пока не конец файла делаем} это по русски)
И я не понимаю причем здесь это он тупо не открывает файл значение переменной f равно 0

Добавлено через 2 минуты
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include "stdafx.h"
#include <iostream>
#include <string>
#include <string.h>
#include <math.h>
#include <fstream>
#include <windows.h>
using namespace std;
 
void train()
{
    fstream f;
    string word,check;
    bool t;
    do
    {
        label:cout <<"\nДля выхода из обучения введите ""0""";
        t=false;
        cout <<"\nВведите новое слово --> ";cin >>word;
        if (word!="0")
        {
           f.open("D:\\cловарь.txt");
           if (f)
           {
               while (!f.eof())
               {
                   f >>check;
                   if (check==word) t=true; 
               }
           }
           else cout <<"\nСоздайте словарь!";
           f.close();
           if (t)
           {
               cout <<"\nДанное слово уже присутствует в словаре!!!Попробуйте другое слово!!!";
               goto label;
           }
           else
           {
               f.open("D:\\cловарь.txt",ios::app);
               f <<word<<"\n";
               f.close();
           }
           }
    }
    while(word!="0");
}
 
void words()
{
    ofstream f;
    ifstream slovar;
    string word;
    cout <<"Введите ключевое слово:-------->  ";
    cin >>word;
    f.open("D:\\Результаты.txt");
    cout <<f<<"\n";
    f <<"Ключевое слово------------->"<<word;
    f <<"\nСоставленные слова:";
    f.close();
    slovar.open("D:\\словарь.txt",ios::in);
    cout <<"\n"<<slovar;
    slovar.close();
}
 
int main()
{
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251);
    int mode;
    cout <<"Выберите режим работы программы:";
    cout <<"\nРежим обучения--------------------->0";
    cout <<"\nРежим составления слов-------->Другое\n";
    cin >>mode;
    if (mode==0) train();
    else    words();
    getchar();
    getchar();
    return 0;
}
так я думаю читаемо) я просто не вкурсе был про тег с++ кода
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.10.2013, 15:47     Работа с текстовыми файлами си++ #8
В 22 строке не открывает?

Добавлено через 4 минуты
Файл существует и находится в корне диска D?
Alex_Skripa
17 / 17 / 1
Регистрация: 16.09.2013
Сообщений: 126
27.10.2013, 17:24  [ТС]     Работа с текстовыми файлами си++ #9
Цитата Сообщение от alsav22 Посмотреть сообщение
В 22 строке не открывает?

Добавлено через 4 минуты
Файл существует и находится в корне диска D?
Не в строке 61, и да файл существует и находится на диске D:\\словарь.txt
Спасибо за внимание я нашел решение, вот рабочий код если вдруг кому пригодится "находит слова из словаря которые можно составить из ключевого слова":
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include "stdafx.h"
#include <iostream>
#include <string>
#include <string.h>
#include <math.h>
#include <fstream>
#include <windows.h>
using namespace std;
 
void words()
{
    ofstream f1;
    ifstream f;
    string word,check;
    int i,j,k;
    bool *pos;
    cout <<"\nВведите ключевое слово\n";
    cin >>word;
    pos=new bool [word.length()];
    f1.open("D:\\Результаты.txt");
    f1 <<"Ваше ключевое слово-------->"<<word;
    f1 <<"\nСоставленные слова:";
    f1.close();
    f.open("D:\\slovar.txt",ios::in);
    if (f)
    {
        while (!f.eof())
        {
            f >>check;
            if(check.length()<=word.length())
            {
                for(i=0;i<word.length();i++)
                {
                    pos[i]=false;
                }
                k=0;
                for(i=0;i<check.length();i++)
                {
                    for(j=0;j<word.length();j++)
                    {
                        if ((check[i]==word[j])&&(!pos[j]))
                        {
                            k++;
                            pos[j]=true;
                            break;
                         }
                     }
                }
                cout <<"Значение переменной K=="<<k<<"\n";
                if (k==check.length())
                {
                    f1.open("D:\\Результаты.txt",ios::app);
                    f1 <<"\n--->"<<check;
                    f1.close();
                }
            }
        }
    }
    else cout <<"\nФайл словарь не найден!!! Для создания запустите обучение...";
f.close();
delete(pos);
}
 
 
void train()
{
    fstream f;
    string word,check;
    bool t;
    do
    {
        label:cout <<"\nДля выхода из обучения введите ""0""";
        t=false;
        cout <<"\nВведите новое слово --> ";cin >>word;
        if (word!="0")
        {
           f.open("D:\\slovar.txt");
           if (f)
           {
               while (!f.eof())
               {
                   f >>check;
                   if (check==word) t=true; 
               }
           }
           else cout <<"\nСоздайте словарь!";
           f.close();
           if (t)
           {
               cout <<"\nДанное слово уже присутствует в словаре!!!Попробуйте другое слово!!!";
               goto label;
           }
           else
           {
               f.open("D:\\slovar.txt",ios::app);
               f <<word<<"\n";
               f.close();
           }
           }
    }
    while(word!="0");
}
 
int main()
{
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251);
    int mode;
    cout <<"Выберите режим работы программы:";
    cout <<"\nРежим обучения--------------------->0";
    cout <<"\nРежим составления слов-------->Другое\n";
    cin >>mode;
    if (mode==0) train();
    else    words();
    getchar();
    getchar();
    return 0;
}
Да и еще кто мне объяснит решение нашлось таким образом имя файла я сделал на англ. языке и все заработало почему?????? В функции train() все работало и с русским названием, и файл Результаты.txt назван по русски и никаких проблем что это за заговор???)
alsav если можете объясните пожалуйста если не сложно. Заранее благодарен.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.10.2013, 17:48     Работа с текстовыми файлами си++ #10
Среда какая? ОС?

Добавлено через 9 минут
Может дело не в английском названии (раз в других местах рабтало)? Может при написании имени файла, например, английская буква вместо русской проскочила? Или что-то подобное. Я бы, для проверки, взял название файла из той части кода, где работает с русским названием и скопипастил в то - где не работает.
Alex_Skripa
17 / 17 / 1
Регистрация: 16.09.2013
Сообщений: 126
27.10.2013, 17:53  [ТС]     Работа с текстовыми файлами си++ #11
Цитата Сообщение от alsav22 Посмотреть сообщение
Среда какая? ОС?
ОС 7ка, среда Microsoft Visual Studio 2010
Ну все как у обычного смертного) я начинающий 2ой курс только, у преподов спрашивать толку 0 сами некрена не знают вот как то так...

Добавлено через 4 минуты
Цитата Сообщение от alsav22 Посмотреть сообщение
Среда какая? ОС?

Добавлено через 9 минут
Может дело не в английском названии (раз в других местах рабтало)? Может при написании имени файла, например, английская буква вместо русской проскочила? Или что-то подобное. Я бы, для проверки, взял название файла из той части кода, где работает с русским названием и скопипастил в то - где не работает.
Пробовал ) не получалось, пробовал даже другое название давать тупо из одной буквы и ничего, я много чего пробовал и даже задавать переменную типа FILE у второго файла, я не понимаю в чем тут было дело)
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.10.2013, 17:53     Работа с текстовыми файлами си++ #12
Цитата Сообщение от Alex_Skripa Посмотреть сообщение
среда Microsoft Visual Studio 2010
Студия нормально воспринимает русские символы в путях, поэтому из-за этого не может быть. Расширения файлов в ОС видны?
Alex_Skripa
17 / 17 / 1
Регистрация: 16.09.2013
Сообщений: 126
27.10.2013, 17:56  [ТС]     Работа с текстовыми файлами си++ #13
Цитата Сообщение от alsav22 Посмотреть сообщение
Студия нормально воспринимает русские символы в путях, поэтому из-за этого не может быть. Расширения файлов в ОС видны?
нет не видны, да я понимаю что воспринимает нормально русские символы, но все таки не работало я 3 дня себе голову ломал, и назвать англ. буквами даже в голову не приходило, от отчаяния назвал))
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.10.2013, 18:09     Работа с текстовыми файлами си++ #14
У вас в превом посте код один, потом другой, потом третий, поэтому сейчас уже трудно будет понять, почему не работало. По второму коду вы написали, что не открывется в 61 строке. Но там нет проверки на открытие. Откуда видели? Если расширения не видны, когда имя файла пишите, то пишите так: словарь, или так: словарь.txt ?
Alex_Skripa
17 / 17 / 1
Регистрация: 16.09.2013
Сообщений: 126
27.10.2013, 18:17  [ТС]     Работа с текстовыми файлами си++ #15
Цитата Сообщение от alsav22 Посмотреть сообщение
У вас в превом посте код один, потом другой, потом третий, поэтому сейчас уже трудно будет понять, почему не работало. По второму коду вы написали, что не открывется в 61 строке. Но там нет проверки на открытие. Откуда видели? Если расширения не видны, когда имя файла пишите, то пишите так: словарь, или так: словарь.txt ?
62 строка вывод переменной , там если ошибка при открытии возвращает 0 в противном случае другое, это код для теста как будет работать, а как нет. Первоначальный код извиняюсь я нуб поэтому не оформил,) называл словарь.txt,
причем в функции train() такое название работало, в отличие от функции words(). И я копипастил название из рабочего места в не рабочее.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.10.2013, 18:21     Работа с текстовыми файлами си++ #16
Цитата Сообщение от Alex_Skripa Посмотреть сообщение
называл словарь.txt
Если расширения не видно, то нужно (имеется ввиду, при ручном создании, в папке проекта) называть просто словарь, расширение система добавляет. Иначе получается такое название файла: словарь.txt.txt. В папке проекта файл должен выглядиет как: словарь (без расширения, раз они не вдины).
Alex_Skripa
17 / 17 / 1
Регистрация: 16.09.2013
Сообщений: 126
27.10.2013, 18:52  [ТС]     Работа с текстовыми файлами си++ #17
Цитата Сообщение от alsav22 Посмотреть сообщение
Если расширения не видно, то нужно (имеется ввиду, при ручном создании, в папке проекта) называть просто словарь, расширение система добавляет. Иначе получается такое название файла: словарь.txt.txt. В папке проекта файл должен выглядиет как: словарь (без расширения, раз они не вдины).
Я сума сойду щас) Результаты.txt то норм воспринимает, но спасибо за инфу буду знать, и да еще сейчас создал новый проект в него вставил весь код, тот же, заменил английское название на русское и работает,,,, это кошмар, теперь беру старый проект проделываю то-же самое, и.... не работает, это дурдом какой то... Я реально не понимаю в чем тут проблема.

Добавлено через 24 минуты
Возможно ли что проект криво компилировался???
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.10.2013, 18:59     Работа с текстовыми файлами си++ #18
Цитата Сообщение от Alex_Skripa Посмотреть сообщение
Результаты.txt то норм воспринимает
Этот файл у вас из кода создавался, а не вручную. В папке он, наверное, выглядит как просто: Результаты, а не Рузультаты.txt ?

Добавлено через 3 минуты
Старый проект (который не хочет работать) выложите, я у себя попробую.
Alex_Skripa
17 / 17 / 1
Регистрация: 16.09.2013
Сообщений: 126
27.10.2013, 19:09  [ТС]     Работа с текстовыми файлами си++ #19
так он ничем не отличается, от последнего все один в один просто копи паст в новый проект...
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#include "stdafx.h"
#include <iostream>
#include <string>
#include <string.h>
#include <math.h>
#include <fstream>
#include <windows.h>
using namespace std;
 
void words()
{
    ofstream f1;
    ifstream f;
    string word,check;
    int i,j,k;
    bool *pos;
    cout <<"\nВведите ключевое слово\n";
    cin >>word;
    pos=new bool [word.length()];
    f1.open("D:\\Результаты.txt");
    f1 <<"Ваше ключевое слово-------->"<<word;
    f1 <<"\nСоставленные слова:";
    f1.close();
    f.open("D:\\словарь.txt",ios::in);
    if (f)
    {
        while (!f.eof())
        {
            f >>check;
            if(check.length()<=word.length())
            {
                for(i=0;i<word.length();i++)
                {
                    pos[i]=false;
                }
                k=0;
                for(i=0;i<check.length();i++)
                {
                    for(j=0;j<word.length();j++)
                    {
                        if ((check[i]==word[j])&&(!pos[j]))
                        {
                            k++;
                            pos[j]=true;
                            break;
                         }
                     }
                }
                if (k==check.length())
                {
                    f1.open("D:\\Результаты.txt",ios::app);
                    f1 <<"\n--->"<<check;
                    f1.close();
                }
            }
        }
    }
    else cout <<"\nФайл словарь не найден!!! Для создания запустите обучение...";
f.close();
delete(pos);
}
 
 
void train()
{
    fstream f;
    string word,check;
    bool t;
    do
    {
        label:cout <<"\nДля выхода из обучения введите ""0""";
        t=false;
        cout <<"\nВведите новое слово --> ";cin >>word;
        if (word!="0")
        {
           f.open("D:\\словарь.txt");
           if (f)
           {
               while (!f.eof())
               {
                   f >>check;
                   if (check==word) t=true; 
               }
           }
           else cout <<"\nСоздайте словарь!";
           f.close();
           if (t)
           {
               cout <<"\nДанное слово уже присутствует в словаре!!!Попробуйте другое слово!!!";
               goto label;
           }
           else
           {
               f.open("D:\\словарь.txt",ios::app);
               f <<word<<"\n";
               f.close();
           }
           }
    }
    while(word!="0");
}
 
int main()
{
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251);
    int mode;
    cout <<"Выберите режим работы программы:";
    cout <<"\nРежим обучения--------------------->0";
    cout <<"\nРежим составления слов-------->Другое\n";
    cin >>mode;
    if (mode==0) train();
    else    words();
    getchar();
    getchar();
    return 0;
}
один в один., малость подправлен, а так первый пост там первоначальный текст, я у себя его с психу снес уже, подправлено там следующее 78 строка в проверке я к переменной t обращаюсь без указания индекса там нужно
C++
1
if (check[i]==word[j])&&(!t[j])
вот остальное все то же.
Да и еще я поменял местами функции, но вы можете с первого поста взять первоначальный код и заюзать у себя, и я думаю он будет работать, а по какой причине он мне 3 дня голову шатал я не понимаю до сих пор, и наверно не пойму никогда)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.10.2013, 19:20     Работа с текстовыми файлами си++
Еще ссылки по теме:

C++ Работа с текстовыми файлами
C++ Работа с текстовыми файлами
C++ Работа с текстовыми файлами

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.10.2013, 19:20     Работа с текстовыми файлами си++ #20
Не текст кода, а весь проект (папку).
Yandex
Объявления
27.10.2013, 19:20     Работа с текстовыми файлами си++
Ответ Создать тему
Опции темы

Текущее время: 11:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru