2012-02-29 9 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

はい、seekgとseekp 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

関連する問題