6 / 6 / 5
Регистрация: 19.10.2013
Сообщений: 359
1

Построчная запись в файл

09.12.2016, 00:29. Показов 5227. Ответов 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
// First.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <fstream>
#include <sstream>
#include <locale.h>
#include <windows.h>
using namespace std;
void create_file()
{
    ofstream file_for_writing;
    file_for_writing.open("file_w.txt");
    const int n = 80;
    int str_num = 0;
    char ch1[n];
    char sp[] = " ";
//  cout << "Сколько строк вы желаете ввести? " << endl;
//  cin >> str_num;
    cout << "Введите, пожалуйста, текст: " << endl;
//  cin.getline(ch1, n);
    
    for (; ; )
    {
        /*
        cin.get(ch1);
        if (ch1 == '\n') continue;
        else if (ch1 == ' ') break;
        */
        cin.getline(ch1, n);
 
        if (ch1[n-1] == '\n') continue;
        else if ( ! ch1[0] ) break;
        file_for_writing << endl << ch1;
        
    //  cin.getline(sp, n);
 
    }
    
    
    system("pause");
//  cin.getline(ch1, n);
 
    cout << "Введенный текст:" << endl << ch1;
 
    //
    //while (strlen(ch1))
    //{
    //  file_for_writing << ch1;
    //}
    
}
void handle_file()
{
    cout << "Меняем местами первую и последнюю буквы в словах: " << endl;
    string s;
    ifstream ifs("file_w.txt");
    ofstream ofs;
    ofs.open("handled.txt");
    if (ifs.is_open())
    {
        s.assign((istreambuf_iterator<char>(ifs.rdbuf())), istreambuf_iterator<char>());
        cout << "Оригинальный текст:" << endl;
        cout << endl;
        cout << s << endl;
        cout << endl;
        ifs.close();
    }
    
    stringstream ss(s);
    cout << endl;
    cout << endl;
    cout << "Обработанный текст:" << endl;
    cout << endl;
    while (ss >> s) {
        char chs[80];
        swap(s.back(), s.front());
        strcpy(chs, s.c_str());
            cout << endl << chs;
            ofs << endl << chs;
    }
}
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    setlocale(0, "RUS");
    create_file();
    system("cls");
    handle_file();
    _getch();
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.12.2016, 00:29
Ответы с готовыми решениями:

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

Построчная запись в файл
что делать если в текстовом файле получается запись данных на одной строке постоянно?? например...

Построчная запись в файл из DataGridView
Добрый день. Пишу код с помощью с#. Программа должна вписывать в файл определенный текст. Вот мой...

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

9
nd2
3431 / 2810 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
09.12.2016, 01:13 2
Цитата Сообщение от Aecttann Посмотреть сообщение
if (ch1[n-1] == '\n') continue;
Что здесь проверяется? Знаешь, что getline() извелекает '\n' из потока и отбрасывает?
0
6 / 6 / 5
Регистрация: 19.10.2013
Сообщений: 359
09.12.2016, 01:20  [ТС] 3
nd2, если нажат ентер - перевести на новую строку и продолжить ввод

Добавлено через 5 минут
нет, не знал
и как тогда после swap() получить текст в результирующем файле таким же, каким я его ввел?
0
nd2
3431 / 2810 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
09.12.2016, 01:28 4
Цитата Сообщение от Aecttann Посмотреть сообщение
и как тогда, после swap() получить текст в результирующем файле таким же, каким я его ввел?
Нужно не весь текст из файла помещать в строковый поток, а каждую строку, затем извлекать по словам, обрабатывать слова, затем записывать обработанную строку в файл, и так все строки из файла.

Добавлено через 3 минуты
Цитата Сообщение от Aecttann Посмотреть сообщение
C++
1
strcpy(chs, s.c_str());
Это лишнее: string-и также записываются в файл, как и Си-строки.
1
6 / 6 / 5
Регистрация: 19.10.2013
Сообщений: 359
09.12.2016, 19:14  [ТС] 5
Цитата Сообщение от nd2 Посмотреть сообщение
Нужно не весь текст из файла помещать в строковый поток, а каждую строку, затем извлекать по словам, обрабатывать слова, затем записывать обработанную строку в файл, и так все строки из файла.
а как это делать?

Добавлено через 1 час 51 минуту
Так ничего не выводит и не записывает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    swap(s.back(), s.front());
    if (ifs.is_open())
    {
        while (getline(ifs, s))
        {
            
            ofs << s << endl;
        }
//      ofs.close();
    }
    else
    {
        cout << "Can't open output file" << endl;
    }
Добавлено через 21 минуту
C++
1
2
3
4
5
6
7
    swap(s.back(), s.front());
    char ch[80];
    while (!ifs.eof())
    {
        ifs.getline(ch, 80);
        cout <<ch;
    }
и так тоже

Добавлено через 10 минут
должно же работать, что не так?
алгоритм на форуме и нашел
C++
1
2
3
4
5
6
7
    swap(s.back(), s.front());
    if(ifs)
        while (getline(ifs, s))
    {
        cout << s;
        ofs <<s; 
    }
Добавлено через 6 минут
и снова я вернулся к тому, что слова записываются в результирующий файл по одному в строку (ну или сплошной строкой, в зависимости от наличия символа следующей строки)
C++
1
2
3
4
5
6
7
8
    while(ss>>s)
    swap(s.back(), s.front());
    for (size_t k = 0; k < s.length(); ++k)
    {
        
        cout << s;
        ofs << s << "\n";
    }
Добавлено через 4 часа 31 минуту
nd2, подскажете?
0
nd2
3431 / 2810 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
09.12.2016, 19:29 6
Лучший ответ Сообщение было отмечено Aecttann как решение

Решение

Для примера:
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
    ifstream ifs("ifs.txt");
    if (ifs)
    {
        cout << ifs.rdbuf() << endl << endl; // входной файл
        ifs.clear();
        ifs.seekg(0);
        
        ofstream ofs("ofs.txt");
        string str;
        stringstream ss;
        while (getline(ifs, str))
        {
            ss << str;
            str.clear();
            string s;
            while (ss >> s)
            {
                swap(s.back(), s.front());
                str.append(s);
                if (!ss.eof())
                    str.push_back(' ');
                
            }
            ofs << str << endl;
            ss.clear();
            ss.str("");
        }
        ifs.close();
        ofs.close();
 
        ifs.open("ofs.txt");
        cout << ifs.rdbuf() << endl << endl; // выходной файл
        ifs.close();
    }
    else
        cout << "Error opening file!" << endl;
Миниатюры
Построчная запись в файл  
1
6 / 6 / 5
Регистрация: 19.10.2013
Сообщений: 359
09.12.2016, 19:37  [ТС] 7
заходит почему-то только сюда:
C++
1
2
else
        cout << "Error opening file!" << endl;
0
nd2
3431 / 2810 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
09.12.2016, 19:39 8
Цитата Сообщение от Aecttann Посмотреть сообщение
заходит почему-то только сюда:
Название файла у тебя, наверное, другое.
1
6 / 6 / 5
Регистрация: 19.10.2013
Сообщений: 359
09.12.2016, 19:42  [ТС] 9
написал старые названия, файлы обновились, все работает, но почему-то не хочет создавать новые файлы в каталоге проекта

Добавлено через 2 минуты
спасибо, nd2
0
nd2
3431 / 2810 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
09.12.2016, 19:47 10
Цитата Сообщение от Aecttann Посмотреть сообщение
но почему-то не хочет создавать новые файлы в каталоге проекта
Если для записи, то будет создавать. Если для чтения, то уже должен быть.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.12.2016, 19:47
Помогаю со студенческими работами здесь

Построчная запись из List в файл
У меня проблемы с работой с файлами и поэтому это вызывает у меня трудности. У меня уже есть...

Построчная запись из List в файл (GUI)
У меня проблемы с работой с файлами и поэтому это вызывает у меня трудности. У меня уже есть...

Построчная запись в txt файл из разных потоков
Есть 4 потока (threads), мне нужно данные от них записать в тхт файл(построчно). Как это сделать ?...

Построчная запись в текстовый файл, полученной погоды
Вот код для получения погоды на сегодня и на 5 дней вперед (каждые 3 часа). import pyowm ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru