Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
KirillNSK
0 / 0 / 0
Регистрация: 29.07.2016
Сообщений: 58
1

Запись в файл txt построчно из <list>

30.12.2016, 15:50. Просмотров 671. Ответов 17
Метки нет (Все метки)

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
# include <iostream>
# include <list>
# include <string>
# include <fstream>
# include <cstdio>
 
using namespace std;
 
class Load
{
protected:
 
    list <string> Old;
    list <string> New;
    list <string> Write;
    string OldPack;
    string NewPack;
    string WritePack;
 
public:
    
    void LoadPack ()
    {
        ifstream Ol ("Pack.txt");
 
        if (Ol)
        {
            while (getline (Ol, OldPack))
                Old.push_back (OldPack);
            Ol.close ();
        }
        else
        
            cout << "Ошибка!\n";
 
        ifstream Nw ("Pack2.txt");
 
        if (Nw)
        {
            while (getline (Nw, NewPack))
                New.push_back (NewPack);
            Nw.close ();
        }
        else 
            
            cout << "Ошибка!\n";
    }
};
 
class DubScan : public Load 
{
public:
 
    string Name;
 
public:
 
    void Sort ()
    {
        Old.insert (Old.end (), New.begin (), New.end ()); 
 
        Old.sort ();
    
        Old.unique (); 
        
        FileEntry (); 
    }
 
    void FileEntry ()
    {
        ofstream Entr (Name);
            if (Entr)
            {
                for (int i = 0; i < Old.size(); i++)    
                    Entr << Write.at (i) << '\n';
                Entr.close ();
                
            }
            else
                cout << "Ошибка!\n";
    };
 
    DubScan (string h)
    {
        Name = h;
        LoadPack();
    }
    
};
 
int main ()
{
    setlocale (LC_ALL, "RUSSIAN");
 
    string h;
 
    cout << "Сверим 2 файла на наличие дублей" << endl;
    cout << "Одинаковые сотрем" << endl;
    cout << "Введем наименование файла записи:" << endl;
 
    cin >> h;
 
    DubScan Fl (h);
 
    Fl.Sort ();
    
    system ("pause");
    return 0;
}
Здравствуйте, помогите пожалуйста, как организовать построчную запись в файл, проблема в FileEntry (), мучаюсь давно уже. Списки такого вида:
Pack
teutrtipw
jakmclkdq
gnzzohrfm
qjqjgoiue
mdhdinslj

Pack2
testrtipw
jakmclkdq
gnzzohrfm
qjqjgoiue
mdhzinslj
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.12.2016, 15:50
Ответы с готовыми решениями:

Считывание из файла построчно и запись в файл построчно getline ()
# include &lt;iostream&gt; # include &lt;vector&gt; # include &lt;fstream&gt; # include...

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

Записать 200 случайных чисел в файл a.txt. В файл b.txt вывести четные, а в файл c.txt нечетные
Записать 200 случайных чисел в файл a.txt. В файл b.txt вывести четные, а в...

Запись в файл .txt . C++
Здравствуйте! Планировал записывать при каждом вызове функции в текст с новой...

Запись в файл txt
studBeg = GetStud(hDlg); out.open(&quot;output.txt&quot;, ios_base::app); ...

17
Renji
2123 / 1561 / 476
Регистрация: 05.06.2014
Сообщений: 4,523
30.12.2016, 15:56 2
at/[] чтоль не работает?
C++
1
2
for(auto pos=Write.begin();pos!=Write.end();++pos)
    cout<<pos->NewPack<<endl;
0
KirillNSK
0 / 0 / 0
Регистрация: 29.07.2016
Сообщений: 58
30.12.2016, 16:07  [ТС] 3
at/[] Не работает, Ваш вариант, почему-то тоже нет. В cout<<pos->NewPack, выдает error 2039
0
nd2
2838 / 2405 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
30.12.2016, 16:23 4
Цитата Сообщение от Renji Посмотреть сообщение
C++
1
2
for(auto pos=Write.begin(); pos!=Write.end();++pos)
      cout<<pos->NewPack<<endl;
Если так:
C++
1
2
for(auto pos = Write.begin(); pos != Write.end(); ++pos) 
       cout << *pos << endl;
0
KirillNSK
0 / 0 / 0
Регистрация: 29.07.2016
Сообщений: 58
30.12.2016, 16:28  [ТС] 5
Файл создаётся, но пустой, без выборки.
0
nd2
2838 / 2405 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
30.12.2016, 16:31 6
Код покажи. Пример был для вывода на консоль. Замени cout на файловый поток.
0
KirillNSK
0 / 0 / 0
Регистрация: 29.07.2016
Сообщений: 58
30.12.2016, 16:32  [ТС] 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
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
# include <iostream>
# include <list>
# include <string>
# include <fstream>
# include <cstdio>
 
using namespace std;
 
class Load
{
protected:
 
    list <string> Old;
    list <string> New;
    list <string> Write;
    string OldPack;
    string NewPack;
    string WritePack;
 
public:
    
    void LoadPack ()
    {
        ifstream Ol ("Pack.txt");
 
        if (Ol)
        {
            while (getline (Ol, OldPack))
                Old.push_back (OldPack);
            Ol.close ();
        }
        else
        
            cout << "Ошибка!\n";
 
        ifstream Nw ("Pack2.txt");
 
        if (Nw)
        {
            while (getline (Nw, NewPack))
                New.push_back (NewPack);
            Nw.close ();
        }
        else 
            
            cout << "Ошибка!\n";
    }
};
 
class DubScan : public Load 
{
public:
 
    string Name;
 
public:
 
    void Sort ()
    {
        Old.insert (Old.end (), New.begin (), New.end ()); 
 
        Old.sort ();
    
        Old.unique (); 
        
        FileEntry (); 
    }
 
    void FileEntry ()
    {
        ofstream Entr (Name);
            if (Entr)
            {
                for (int i = 0; i < Old.size(); i++)    
                    Entr << Write.at (i) << '\n';
                Entr.close ();
                
            }
            else
                cout << "Ошибка!\n";
    };
 
    DubScan (string h)
    {
        Name = h;
        LoadPack();
    }
    
};
 
int main ()
{
    setlocale (LC_ALL, "RUSSIAN");
 
    string h;
 
    cout << "Сверим 2 файла на наличие дублей" << endl;
    cout << "Одинаковые сотрем" << endl;
    cout << "Введем наименование файла записи:" << endl;
 
    cin >> h;
 
    DubScan Fl (h);
 
    Fl.Sort ();
    
    system ("pause");
    return 0;
}
0
nd2
2838 / 2405 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
30.12.2016, 16:35 8
И где что исправлено, по примеру кода в 4 посте?
0
KirillNSK
0 / 0 / 0
Регистрация: 29.07.2016
Сообщений: 58
30.12.2016, 16:37  [ТС] 9
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
# include <iostream>
# include <list>
# include <string>
# include <fstream>
# include <cstdio>
 
using namespace std;
 
class Load
{
protected:
 
    list <string> Old;
    list <string> New;
    list <string> Write;
    string OldPack;
    string NewPack;
    string WritePack;
 
public:
    
    void LoadPack ()
    {
        ifstream Ol ("Pack.txt");
 
        if (Ol)
        {
            while (getline (Ol, OldPack))
                Old.push_back (OldPack);
            Ol.close ();
        }
        else
        
            cout << "Ошибка!\n";
 
        ifstream Nw ("Pack2.txt");
 
        if (Nw)
        {
            while (getline (Nw, NewPack))
                New.push_back (NewPack);
            Nw.close ();
        }
        else 
            
            cout << "Ошибка!\n";
    }
};
 
class DubScan : public Load // DubScan наследует от Load
{
public:
 
    string Name;
 
public:
 
    void Sort ()
    {
        Old.insert (Old.end (), New.begin (), New.end ()); // Объединяет два списка в один 
 
        Old.sort (); //Сортирует списки, т-к unique работает только с отсортированными списками
    
        Old.unique (); // Ищет уникальные элементы
        
        FileEntry (); // Вызываем функцию записи в файл
    }
 
    void FileEntry ()
    {
        ofstream Entr (Name);
            if (Entr)
            {
                for(auto pos = Write.begin(); pos != Write.end(); ++pos) 
                    cout << *pos << endl;;
                Entr.close ();
                
            }
            else
                cout << "Ошибка!\n";
    };
 
    DubScan (string h)
    {
        Name = h;
        LoadPack();
    }
    
};
 
int main ()
{
    setlocale (LC_ALL, "RUSSIAN");
 
    string h;
 
    cout << "Сверим 2 файла на наличие дублей" << endl;
    cout << "Одинаковые сотрем" << endl;
    cout << "Введем наименование файла записи:" << endl;
 
    cin >> h;
 
    DubScan Fl (h);
 
    Fl.Sort ();
    
    system ("pause");
    return 0;
}
0
nd2
2838 / 2405 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
30.12.2016, 16:40 10
Лучший ответ Сообщение было отмечено KirillNSK как решение

Решение

Цитата Сообщение от KirillNSK Посмотреть сообщение
C++
1
cout << *pos << endl;;
Цитата Сообщение от nd2 Посмотреть сообщение
Пример был для вывода на консоль. Замени cout на файловый поток.
...
1
KirillNSK
0 / 0 / 0
Регистрация: 29.07.2016
Сообщений: 58
30.12.2016, 16:50  [ТС] 11
Похоже я туп как пробка, но у меня ничего не получается.
0
nd2
2838 / 2405 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
30.12.2016, 16:52 12
Если так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    void FileEntry ()
    {
            ofstream Entr (Name);
            if (Entr)
            {
                for(auto pos = Write.begin(); pos != Write.end(); ++pos) 
                    Entr << *pos << endl;
                Entr.close ();
                
            }
            else
                cout << "Ошибка!\n";
    };
0
KirillNSK
0 / 0 / 0
Регистрация: 29.07.2016
Сообщений: 58
30.12.2016, 16:54  [ТС] 13
Разобрался, спасибо
0
nd2
2838 / 2405 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
30.12.2016, 16:55 14
А где у тебя Write заполняется?
0
KirillNSK
0 / 0 / 0
Регистрация: 29.07.2016
Сообщений: 58
30.12.2016, 16:56  [ТС] 15
Только вместо Write писал Old
C++
1
2
3
4
5
6
7
if (Entr)
            {
                for(auto pos = Old.begin(); pos != Old.end(); ++pos) 
                    Entr << *pos << endl;;
                Entr.close ();
                
            }
0
nd2
2838 / 2405 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
30.12.2016, 16:58 16
Цитата Сообщение от KirillNSK Посмотреть сообщение
Только вместо Write писал Old
С Old понятно.
0
KirillNSK
0 / 0 / 0
Регистрация: 29.07.2016
Сообщений: 58
30.12.2016, 17:02  [ТС] 17
Спасибо, а с Write - как?

Добавлено через 2 минуты
Большое спасибо ещё раз, форум очень помогает.
0
nd2
2838 / 2405 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
30.12.2016, 17:04 18
Цитата Сообщение от KirillNSK Посмотреть сообщение
а с Write - как?
Так же, только его заполнить сначала нужно.
0
30.12.2016, 17:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.12.2016, 17:04

Запись данных в файл txt
записываю через for(int i=0;i&lt;l;i++) f&lt;&lt;a.fio&lt;&lt;&quot; &quot;&lt;&lt;a.nomer&lt;&lt;&quot;...

Зависает запись в txt - файл
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;time.h&gt; #include &lt;conio.h&gt;...

Чтение/запись из/в файл .txt
Имеется файл названный stses формата txt, и вот его содержание: 3 Loyed 4...


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

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

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