Как перевести строку при извлечении данных из файла?

#c

#c

Вопрос:

Мне нужно взять данные из файла, а затем сохранить их в строке, после сохранения в строке я хочу поместить данные в тот же файл, откуда я получаю эти данные.ПРОБЛЕМА в том, что при извлечении данных не определяется моя новая строка. Давайте посмотрим пример.

У меня есть файл «check.txt » в котором данные выглядят следующим образом: ABC новая строка DEF новая строка XYZ новая строка

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

Как я могу добавить обратно в формате номер 1?

Вот код, который я пробовал:

 #include<iostream>
#include<fstream>
using namespace std;

void abc()
{
    ifstream fin("check.txt");
    string line,line1;
    while (fin)
    {
        getline(fin,line);
        line1.append(line.begin(),line.end());

}
fin.close();

    ofstream fout;
    fout.open("check.txt");
    while (fout)
    {
    {

        fout<<line1<<endl;
    //  fout<<"done"<<endl;
        cout<<"done"<<endl;
    }
    break;
}
fout.close();
}
int main()
{
    abc();
}

  

Ответ №1:

Билай.

Попробуйте это:

Пока ваша программа получает каждую строку, запишите ее в stringstream, используя тот же цикл:

 void abc()
{
    ifstream fin("check.txt");

    string line;
    stringstream out;
    while (fin)
    {
        getline(fin, line);
        out << line << 'n'; //use character 'n' instead of endl, to avoid flushing the stream every loop.
    }
    fin.close();

    ofstream fout;
    fout.open("check.txt");
    fout << out.str();
    fout.close();
}
  

Комментарии:

1. Зачем использовать endl ? Вам не нужно очищать выходные данные на каждой итерации цикла.

2. функция getline восстанавливает строку без символа новой строки, в этом проблема этого ответа. endl вставляет символ новой строки в stringstream но, как вы сказали, endl сбрасывает строку в строковый буфер и делает ее (программу) менее эффективной, чем использование 'n' . Я изменю свой ответ. Спасибо за замечание.

Ответ №2:

Когда getline считывает строку, он отбрасывает символ новой строки. Вам нужно будет повторно вставить символы новой строки при добавлении line к line1 .

Комментарии:

1. Возникает вопрос, как это вставить?

2. @Bilal line1 = line 'n'; ?