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

Записать в созданный файл все строки из файла add.txt - C++

Восстановить пароль Регистрация
 
frontez
4 / 4 / 0
Регистрация: 26.04.2013
Сообщений: 120
04.06.2014, 03:06     Записать в созданный файл все строки из файла add.txt #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
#include <iostream>
#include <fstream>
#include <string>
#include <Windows.h>
#include <clocale>
#include <sstream> //  заголовочный файл с классами, функциями и переменными для организации работы со строками
 
using namespace std;
 
int main() // определение главной функции
{
    //пример4 запись первой строки, считываемой из файла add.txt, в файл, указанный пользователем
    string a;
    ofstream fout; // определение обьекта fout для вывода данных в файл
    ifstream fin; // определение обьекта fin для ввода данных из файла
    fin.open ("add.txt");
    getline(fin, a);
    fin.close();
    setlocale (0, "");
    char с[100];
    cout << "Введите имя файла для записи" << endl;
    string name1;
    cin >> name1;
    string c = name1 + ".txt";
    fout.open (c.c_str());
    fout << a;
    fout.close();
    system ("pause");
}
В данном примере программа записывает первую строку с файла add.txt в файл, который я создаю.

Как сделать так чтобы изменив программу:
1) Записать в созданный файл все строки из файла add.txt
2) Записать в созданный файл допустим 4ую и 6ую строки из 9 строк из файла add.txt ( построчно )
3) Записать в созданный файл 2ое слово с первой строки и 4ое слово с пятой строки (9 строк по 6 слов) из файла add.txt ( в одну строку )

PS VS 2010
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2014, 03:06     Записать в созданный файл все строки из файла add.txt
Посмотрите здесь:

C++ Записать в выходной файл все строки входного файла
C++ В папке К2 создайте файл t3.txt, в который перепишите вначале текст из файла t1.txt, а затем из t2.txt
C++ взять готовый файл с набором чисел, в нем найти максимальное значение и записать во второй созданный файл
Дан входной текстовый файл, строка S (вводится с клавиатуры). Записать в выходной файл все строки входного файла, содержащие в качестве фрагмента стро C++
C++ Записать в файл g все четные числа файла f, а в файл n-все нечетные
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
uglyPinokkio
325 / 228 / 41
Регистрация: 30.05.2014
Сообщений: 682
04.06.2014, 06:32     Записать в созданный файл все строки из файла add.txt #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
#include <iostream>
#include <fstream>
#include <string>
#include <Windows.h>
#include <clocale>
#include <sstream> //  заголовочный файл с классами, функциями и переменными для организации работы со строками
 
using namespace std;
 
int main() // определение главной функции
{
   //пример4 запись первой строки, считываемой из файла add.txt, в файл, указанный пользователем
   string a;
   ofstream fout; // определение обьекта fout для вывода данных в файл
   ifstream fin; // определение обьекта fin для ввода данных из файла
   fin.open ("add.txt");
   if(fin.is_open())
   {
      string name1;
      cout << "Введите имя файла для записи" << endl;
      cin >> name1;
      if(name1.find(".txt")==string::npos)
      {
         name1 += ".txt";
      }
      fout.open (name1.c_str());
      if(fout.is_open())
      {
         while(getline(fin, a))
         {
         fout << a << endl;
         }
         fout.close();
      }
      else
      {
         cout << "Can't open output file" << endl;               
      }
      fin.close();
   }
   else
   {
      cout << "Can't open input file" << endl;      
   }
   system ("pause");
}
Дальше надеюсь понятно.
frontez
4 / 4 / 0
Регистрация: 26.04.2013
Сообщений: 120
04.06.2014, 06:57  [ТС]     Записать в созданный файл все строки из файла add.txt #3
uglyPinokkio, спасибо конечно, что if-ы проставил, но то, что я сделал в своем примере понимаю, лучше бы подсказал что-нибудь по тем вопросам, которые я выше написал.

Добавлено через 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
#include <iostream>
#include <fstream>
#include <string>
#include <Windows.h>
#include <clocale>
#include <sstream> //  заголовочный файл с классами, функциями и переменными для организации работы со строками
 
using namespace std;
 
int main() // определение главной функции
{
    //пример4 запись первой строки, считываемой из файла add.txt, в файл, указанный пользователем
    string a;
    ofstream fout; // определение обьекта fout для вывода данных в файл
    ifstream fin; // определение обьекта fin для ввода данных из файла
    fin.open ("add.txt");
    getline(fin, a);
    fin.close();
    setlocale (0, "");
    char с[100];
    cout << "Введите имя файла для записи" << endl;
    string name1;
    cin >> name1;
    string c = name1 + ".txt";
    fout.open (c.c_str());
    fout << a;
    fout.close();
    system ("pause");
}
 
 
/*{
    //пример3 построчное чтение из файла и вывод в окно
    string a;
    ofstream fout; // определение обьекта fout для вывода данных в файл
    ifstream fin; // определение обьекта fin для ввода данных из файла
    fin.open ("add.txt");
    while (getline (fin, a))  // пока чтение возможно
    cout << a << endl;// символ новой строки при чтении из файла теряется поэтому при выводе в консольное окно нужен endl или ‘\n’
    fin.close();
    system("pause");
}*/
 
 
/*{
    //пример2  запись в файл add.txt фразы Hello World, чтение из файла первой строки (до конца строки) и вывод в окно
    setlocale(0,"");
    ofstream fout; // определение обьекта fout для вывода данных в файл
    ifstream fin; // определение обьекта fin для ввода данных из файла
    string a;
    fout.open ("add.txt");
    fout << "Привет World! awdawdawdawdawdawdwa kwa ";
    fout.close();
    fin.open ("add.txt");
    getline(fin, a); // getline – читает строку из файла до символа перевода строки char(10)
    fin.close();
    cout << a << endl;
    system("pause");
}*/
 
/*{ 
    //пример1
   ifstream input_file("add.txt"); 
   char one[256], two[256], three [256],awe[256] ; 
   input_file.getline(one, sizeof(one)) ; 
   input_file.getline(two, sizeof(two)); 
   input_file.getline(three, sizeof(three)) ; 
   input_file.getline(awe, sizeof(awe)) ; 
   cout << one << endl; 
   cout << two << endl; 
   cout << three << endl; 
   cout << awe << endl; 
   system("pause");
}
*/
uglyPinokkio
325 / 228 / 41
Регистрация: 30.05.2014
Сообщений: 682
04.06.2014, 07:15     Записать в созданный файл все строки из файла add.txt #4
Цитата Сообщение от frontez Посмотреть сообщение
спасибо конечно, что if-ы проставил, но то, что я сделал в своем примере понимаю, лучше бы подсказал что-нибудь по тем вопросам, которые я выше написал
Ну видимо не очень понимаешь. Потому что после моих if-ов он таки копирует все строки исходного файла, а это вроде как и был первый вопрос? Сделать из этого копирование
Цитата Сообщение от frontez Посмотреть сообщение
допустим 4ую и 6ую строки из 9 строк
на мой взгляд тривиально.
Как разбить строку по разделителю показать?
frontez
4 / 4 / 0
Регистрация: 26.04.2013
Сообщений: 120
04.06.2014, 07:39  [ТС]     Записать в созданный файл все строки из файла add.txt #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
#include <iostream>
#include <fstream>
#include <string>
#include <Windows.h>
#include <clocale>
#include <sstream> //  заголовочный файл с классами, функциями и переменными для организации работы со строками
 
using namespace std;
 
int main() // определение главной функции
{
    //пример5 запись всех строк, считываемой из файла add.txt, в файл, указанный пользователем
    string a;
    setlocale (0, "");
    ofstream fout; // определение обьекта fout для вывода данных в файл
    ifstream fin; // определение обьекта fin для ввода данных из файла
    fin.open ("add.txt");
    char с[100];
    cout << "Введите имя файла для записи" << endl;
    string name1;
    cin >> name1;
    string c = name1 + ".txt";
    fout.open (c.c_str(), ios::app);
    while (!fin.eof()){
        getline(fin, a);
        fout << a <<"\n";
    }
    fin.close();
    fout.close();
    system ("pause");
}
1-ый пункт сделал, остальные не получаются
uglyPinokkio
325 / 228 / 41
Регистрация: 30.05.2014
Сообщений: 682
04.06.2014, 08:05     Записать в созданный файл все строки из файла add.txt #6
Цитата Сообщение от frontez Посмотреть сообщение
остальные не получаются
C++
1
2
3
4
5
6
7
8
9
10
int line_no=0;
 
while(getline(fin, a))
{
    if(line_no==4 || line_no==6)
   {
       fout << a << endl;
   }
   line_no++;
}
Это второй вопрос?

Добавлено через 22 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
   unsigned delim_pos;
   std::vector<string> lines;
   while((delim_pos=line.rfind(','))!=string::npos)
   {
      lines.insert(lines.begin(),line.substr(delim_pos+1));
      line.erase(delim_pos);
      
   }
   if(line.size())
   {
      lines.insert(lines.begin(),line);
   }
Вот так можно разобрать строку по разделителям.
frontez
4 / 4 / 0
Регистрация: 26.04.2013
Сообщений: 120
04.06.2014, 08:48  [ТС]     Записать в созданный файл все строки из файла add.txt #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
#include <iostream>
#include <fstream>
#include <string>
#include <Windows.h>
#include <clocale>
#include <sstream> //  заголовочный файл с классами, функциями и переменными для организации работы со строками
 
using namespace std;
 
int main() // определение главной функции
{
    //пример 6 запись 4ой и 6ой строки из 9 строк из файла add.txt ( построчно )
    string a;
    setlocale (0, "");
    ofstream fout; // определение обьекта fout для вывода данных в файл
    ifstream fin; // определение обьекта fin для ввода данных из файла
    fin.open ("add.txt");
    char с[100];
    cout << "Введите имя файла для записи" << endl;
    string name1;
    cin >> name1;
    string c = name1 + ".txt";
    fout.open (c.c_str(), ios::app);
    int line_no=1;
    while(getline(fin, a))
    {
        if(line_no==4 || line_no==6)
        {
            fout << a << endl;
        }
        line_no++;
    }
    fin.close();
    fout.close();
    system ("pause");
}
2-ой пункт разобрал, спасибо uglyPinokkio , а вот 3-ий можно без векторов (не сталкивался с таким) и с комментариями?
uglyPinokkio
325 / 228 / 41
Регистрация: 30.05.2014
Сообщений: 682
04.06.2014, 09:02     Записать в созданный файл все строки из файла add.txt #8
Цитата Сообщение от frontez Посмотреть сообщение
а вот 3-ий можно без векторов (не сталкивался с таким) и с комментариями?
Без векторов можно через строковый поток:

C++
1
2
3
4
5
6
7
   
   std::stringstream delim_parser(line);
   std::string line_part;
   while(getline(delim_parser,line_part,','))   
   {
//тут проверяем номер подстроки и чего-то там делаем.
   }
Но первый вариант легче переделывается на разбиение по нескольким разделителям.

В первом логика такова:
ищем разделитель начиная с конца строки.
Если находится, часть строки от разделителя и до конца копируем в начало (для сохранения порядка слов) вектора. После чего исходную строку обрезаем до найденного разделителя.
Если разделителей в исходной строке больше нет, остаток копируем опять таки в вектор.
Вектор - динамический массив, настоятельно рекомендую .
Достать из него строку с нужным номером:
C++
1
2
if(lines.size()>1)
   string line = lines[1];
frontez
4 / 4 / 0
Регистрация: 26.04.2013
Сообщений: 120
05.06.2014, 03:38  [ТС]     Записать в созданный файл все строки из файла add.txt #9
3-ий пункт тоже выполнил

C++ (Qt)
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
#include <iostream>
#include <fstream>
#include <string>
#include <Windows.h>
#include <clocale>
#include <sstream> //  заголовочный файл с классами, функциями и переменными для организации работы со строками
 
using namespace std;
 
int main() // определение главной функции
{
    //пример 6 запись 4ой и 6ой строки из 9 строк из файла add.txt ( построчно )
    string a;
    setlocale (0, "");
    ofstream fout; // определение обьекта fout для вывода данных в файл
    ifstream fin; // определение обьекта fin для ввода данных из файла
    fin.open ("add.txt");
    char с[100];
    cout << "Введите имя файла для записи" << endl;
    string name1;
    cin >> name1;
    string c = name1 + ".txt";
    fout.open (c.c_str(), ios::app);
    int line_no=1;
    int n;
    string probel (" ");
    string sohr;
    size_t nachaloSlova[100]; 
    size_t konecSlova[100]; 
    while(getline(fin, a))
    {
        if(line_no==1) //смотрим первую строку
        {   
            cout<<"Введите номер слова в первой строке, которое хотите вывести на экран:\n";
            cin>>n;
            for (int i=1;i<n+1;i++)
            {
                nachaloSlova[0]=a.find(probel)+1;
                konecSlova[0] = a.find(probel,nachaloSlova[0]);
                nachaloSlova[i]=konecSlova[i-1]+1;
                konecSlova[i] = a.find(probel,nachaloSlova[i]);
            }
            sohr=a.substr(nachaloSlova[n-1],konecSlova[n-1]-nachaloSlova[n-1]);
            fout << sohr << endl;
 
        }
        if(line_no==5) //смотрим пятую строку
        {   
            cout<<"Введите номер слова в пятой строке, которое хотите вывести на экран:\n";
            cin>>n;
            for (int i=1;i<n+1;i++)
            {
                nachaloSlova[0]=a.find(probel)+1;
                konecSlova[0] = a.find(probel,nachaloSlova[0]);
                nachaloSlova[i]=konecSlova[i-1]+1;
                konecSlova[i] = a.find(probel,nachaloSlova[i]);
            }
            sohr=a.substr(nachaloSlova[n-1],konecSlova[n-1]-nachaloSlova[n-1]);
            fout << sohr << endl;
 
        }
        line_no++;
    }
    fin.close();
    fout.close();
    system ("pause");
}
Содержимое add.txt:
Код
 marat artur rinat edik 
 ruslan sergey vadim roman 
 ramil ilsur azat zinnur 
 ilgiz jenya sasha fanis 
 lesha rushat ilnur dima 
 oleg vladimir ivan mickle
PS в начале и в конце каждой строки пробел

На выходе получил:

Код
artur
dima
Добавлено через 1 минуту
Может кто-нибудь подскажет способ покороче?

Добавлено через 6 часов 45 минут
обновлено

Добавлено через 26 минут
uglyPinokkio , можешь отправить примеры работы с потоками данных которые берутся из файла?
Допустим чтобы в дальнейшем можно еще было выполнять над ними операции добавления, изменения, удаления

Добавлено через 1 час 35 минут
Вдруг понадобится кому нибудь:

Программа считает количество строк в файле add.txt выводит на экран и записывает в новый указанный пользователем файл.

C++ (Qt)
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
#include <iostream>
#include <fstream>
#include <string>
#include <Windows.h>
#include <clocale>
#include <sstream> //  заголовочный файл с классами, функциями и переменными для организации работы со строками
 
using namespace std;
 
int main() // определение главной функции
{
    //пример 8 Программа считает количество строк в файле add.txt выводит на экран и записывает в новый указанный пользователем файл.
    string a;
    setlocale (0, "");
    ofstream fout; // определение обьекта fout для вывода данных в файл
    ifstream fin; // определение обьекта fin для ввода данных из файла
    fin.open ("add.txt");
    char с[100];
    cout << "Введите имя файла для записи" << endl;
    string name1;
    cin >> name1;
    string c = name1 + ".txt";
    fout.open (c.c_str(), ios::app);
    int line_nomer=0;
    int n;
    string probel (" ");
    string sohr;
    //size_t nachaloSlova[100]; 
    //size_t konecSlova[100]; 
    while(getline(fin, a))
    {
        //cout<<"Строка в файле add.txt = "<<line_nomer<<"\n"; //вывод на экран
        //fout<<"Строка в файле add.txt = "<<line_nomer<<"\n"; //запись во второй файл
        line_nomer++;
    }
    cout<<"Количество строк в файле add.txt = "<<line_nomer<<"\n"; //вывод на экран
    fout<<"Количество строк в файле add.txt = "<<line_nomer<<"\n"; //запись во второй файл
    fin.close();
    fout.close();
    system ("pause");
}
Добавлено через 7 часов 33 минуты
Актуально
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.06.2014, 06:29     Записать в созданный файл все строки из файла add.txt
Еще ссылки по теме:

C++ Считать 10 целых чисел с файла 1.txt и записать в файл 2.txt максимальный элемент и его индекс
Все четные числа из файла записать во второй файл, а нечетные — в третий файл C++
C++ Записать в text3.txt строки, которые есть и в text1.txt, и в text2.txt

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

Или воспользуйтесь поиском по форуму:
uglyPinokkio
325 / 228 / 41
Регистрация: 30.05.2014
Сообщений: 682
05.06.2014, 06:29     Записать в созданный файл все строки из файла add.txt #10
Цитата Сообщение от frontez Посмотреть сообщение
можешь отправить примеры работы с потоками данных которые берутся из файла?
Допустим чтобы в дальнейшем можно еще было выполнять над ними операции добавления, изменения, удаления
В простейшем случае - читаешь весь массив в память, выполняешь требуемые действия и сохраняешь обратно.
Вот кому-то показывал сортировку вектора структур, там есть сериализация вектора структур в файл и обратно:

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
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <clocale>
#include <algorithm>
#include <sstream>
 
using namespace std;
 
struct ppl_age
{
  std::string name;
  int age;
};
 
std::ostream& operator<< (std::ostream& stream, const ppl_age& age_rec)
{
   stream<<age_rec.name;
   stream<<" ";
   stream<<age_rec.age;
   return stream;
}
 
std::istream& operator>> (std::istream& stream, ppl_age& age_rec)
{
   stream>>age_rec.name;
   stream>>age_rec.age;
   return stream;
}
 
bool createTestFile()
{
   std::vector<ppl_age> age_records;
   ppl_age new_age_rec;
   new_age_rec.name = "btest";
   new_age_rec.age = 10;
   age_records.push_back(new_age_rec);
   new_age_rec.name = "btest";
   new_age_rec.age = 20;
   age_records.push_back(new_age_rec);
   new_age_rec.name = "atest";
   new_age_rec.age = 20;
   age_records.push_back(new_age_rec);
   ofstream fout;
   fout.open("ppl.txt");
   if(fout.is_open())
   {
      for(unsigned age_cnt = 0; age_cnt<age_records.size();age_cnt++)
      {
         fout << age_records[age_cnt] << endl;
      }
      fout.close();
   }
   else
   {
      cout << "Can't open output file" << endl;               
      return false;
   }   
   return true;
}
 
bool isFirstGreater(const ppl_age& first, const ppl_age&  second)
{
   if(first.age > second.age) 
      return true;
   if(first.age == second.age)
      return first.name<second.name;
   return false;
}
 
int main()
{
   createTestFile();
   std::vector<ppl_age> age_records;
   ifstream fin;
   fin.open ("ppl.txt");
   if(fin.is_open())
   {
      while(true)
      {
         ppl_age new_age_rec;
         fin>>new_age_rec;
         if(fin.good())
            age_records.push_back(new_age_rec);
         else
            break;
      }
      fin.close();
   }
   std::sort(age_records.begin(),age_records.end(),isFirstGreater);
   for(unsigned age_cnt = 0; age_cnt<age_records.size();age_cnt++)
   {
      cout << age_records[age_cnt] << endl;
   }
   system ("pause");
   return 0;
}
Оно правда обломится на имени с пробелом к примеру, но тут сорри, дальше сами
Yandex
Объявления
05.06.2014, 06:29     Записать в созданный файл все строки из файла add.txt
Ответ Создать тему
Опции темы

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