[英]How to edit a text file with C++
如何在C ++中編輯文本文件的特定行? 假設我要打開一個文件,然后將焦點或指針或其任何內容更改為第17行第20列。這樣,我可以在第17行第20列之后編輯文本。
我試過了,但是沒用。
ofstream txtFile("textFile.txt");
fseek(txtFile, 17, 20);
txtFile << "New stuff to enter at this point (overwrites old not insert)";
我該怎么做呢?
fseek
不是在尋找行數,而是在尋找字節數。 您所指令的程序不是將指針定位在文件第17行的第20列,而是定位在文件的17 + 20 =第37個字節。
函數的第一個參數是原點,即從原點開始計數的字節數,第二個參數是偏移量。
請參閱fseek
的參考 。
我不知道有任何庫可以對C ++中的行和列進行字節定位。 您可能需要使用更高級別的函數並逐行解析行(例如,如果您使用的是C ++解決方案,請使用getline
)。
使用fputs,就像在這里一樣 。 為了識別換行符,您必須遍歷內容並計算換行符(即在Linux上為'\\ n')。 您可以使用getc獲得當前指向的字符。
實現此目的的一種方法是編寫一個函數,該函數返回給定行開始處的字節位置,如下所示:
#include <stdio.h>
int getRowPos(int row,FILE* fp){
int pos=1,lines=1,currChr;
do{
currChr=getc(fp);
if(currChr=='\n')
lines++;
}while(lines<row && currChr!=EOF && ++pos);
return pos;
}
然后,使用fseek
可以轉到getRowPos
返回的位置加上列號(即行上的字節數),然后使用fputs寫入所需的內容,如下所示:
int row=wanted row
int col=wanted column
FILE * pFile;
//Open file for read and write
pFile = fopen ( "myfile.txt" , "rb+" );
int rowPos=getRowPos(row,pFile);
fseek ( pFile , rowPos+colPos , SEEK_SET );
fputs ( "my new content" , pFile );
fclose ( pFile );
如果您知道行的寬度,例如n寬,則可以在調用getc
之前添加一個lseek
跳過n個字節。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.