2012-02-29 3 views
4

Я хочу заменить строку текста в файле, но я не знаю, как это работает.Заменить строку в текстовом файле

У меня есть это:

ofstream outfile("text.txt"); 
ifstream infile("text.txt"); 

infile >> replace whit other text; 

Любые ответы на это?

Я скучаю сказать, для добавления текста в некоторых строках в файле ...

Примера

infile.add(text, line); 

ли C++ есть функции для этого?

+2

См., Если это поможет: http://stackoverflow.com/questions/4499095/replace-line-in-a-file-c – Pramod

+1

Это домашнее задание? Если это так, пометьте его, иначе я бы предложил язык сценариев, например perl или python, или просто используя 'sed'. –

+0

Нет, нет для домашней работы, для некоторых работ ... – Warkanlock

ответ

3

Нужно указать seek на правильную строку/символ/позицию в файле, а затем на-write. Нет никакой функции для поиска и замены как таковой (о которой я знаю).

+0

Ммм да, поиск и поиск infile.seekg (20 * i, ios :: beg); infile.read (cad, 20); Нет? – Warkanlock

+9

Это не сработает, если заменяющий текст не соответствует точному размеру в байтах, чем тот, который он заменяет. – zwol

3

Единственный способ заменить текст в файле или добавить строки в середине файла - это переписать весь файл с точки первой модификации. Вы не можете «сделать пространство» в середине файла для новых строк.

надежный способ сделать это, чтобы скопировать содержимое файла в новый файл, делая изменения, как вы идете, а затем использовать rename перезаписать старый файл с новым.

6

Боюсь, что вам, вероятно, придется переписать весь файл. Вот как можно это сделать:

#include <iostream> 
#include <fstream> 

using namespace std; 

int main() 
{ 
    string strReplace = "HELLO"; 
    string strNew = "GOODBYE"; 
    ifstream filein("filein.txt"); //File to read from 
    ofstream fileout("fileout.txt"); //Temporary file 
    if(!filein || !fileout) 
    { 
     cout << "Error opening files!" << endl; 
     return 1; 
    } 

    string strTemp; 
    //bool found = false; 
    while(filein >> strTemp) 
    { 
     if(strTemp == strReplace){ 
      strTemp = strNew; 
      //found = true; 
     } 
     strTemp += "\n"; 
     fileout << strTemp; 
     //if(found) break; 
    } 
    return 0; 
} 

ввода-файла:

ONE 
TWO 
THREE 
HELLO 
SEVEN 

выходного файла:

ONE 
TWO 
THREE 
GOODBYE 
SEVEN 

Просто раскомментируйте строки комментариев, если вы только хотите, чтобы заменить первый случай. Кроме того, я забыл, в конце добавить код, который удалит filein.txt и переименует fileout.txt в filein.txt.

+2

Вы можете избежать потенциального выделения (и сохранить строку), заменив 'strTemp + =" \ n "; fileout << strTemp; 'с' fileout << strTemp << '\ n'; '. – ildjarn

Смежные вопросы