2016-03-10 75 views
0

是否可以使用cpp代碼編輯文件中的文本。已經有相關的問題,但它不能解決我的問題。請幫助我。 我已經給出了一個粗略的代碼行。 通過該文件查找()並嘗試用該字符串中的新字符串替換內容直到行尾。 我需要放置「hello」字符串,並且必須是行尾。使用cpp代碼編輯文件而不創建新文件

一樣,如果我們已經new.txt作爲

ABCDEFGHIJKLMNOPQRST

如果我想要的文件內容被改變

ABCDEHELLO

我收到文件內容

ABCDHELLOJKLMNOPQRST

fstream file("new.txt",fstream::in|fstream::out); 
file.open(); 
while(getline(file,str)) 
{ 
    if(value==strstr()) 
    { 
    file.seekp(pos); 
    str.erase(pos,len);//len specifies the value till end of str 
    str.replace(pos,6,"hello"); 
    char *d=new char[str.length()+1]; 
    strcpy(d,str.c_str()); 
    file.write(d,strlen(d)); 
    delete [] d; 

    } 
} 

如果我可以將文件內容複製到字符串中,操作它,然後複製到新文件,然後就可以了。

是否可以更改同一文件中的內容。如果這麼好心地幫助我,我感到很震驚。如果替換字符串比實際存在的字符串長,那麼這會起作用,但是如果替換字符串小於實際存在的字符串,那麼我無法做到這一點。

+0

爲什麼不字符串,而不是字符? – Joel

+0

以字符串形式訪問它,但是單獨使用write()它會以char *形式發送* – Sathiya

+3

但是,您正在使用文件流。我不介意C++和C中的混合,但如果我選擇C++ ......我使用C++。 – Joel

回答

0

如果你的情況只是文件中的一行,你可以在兩個階段輕鬆分開I/O進程。閱讀文件並獲取文本的位置。然後關閉該文件並重新打開,然後寫出所需的字符串。需要注意的是,如果你有一條線,這將工作文件中 檢查下面的代碼

std::string value = "GFGHHFGHH"; 
std::string str; 
std::fstream file("new.txt", std::ios::in); 
std::size_t found; 
while (file >> str) 
{ 
    found = str.find(value); 
    if (found != std::string::npos) 
    { 
     str.erase(value.length()); 
     str.replace(found, 6, "hello"); 
    } 
} 
file.close(); 
file.open("new.txt", std::ios::out); 
file << str; 
file.close(); 
0

可以使用系統調用sed的做到這一點:

string s="sed -i s/hey/ho/g file0102.txt"; 
system(s.c_str()); 
相關問題