簡體   English   中英

如何使用C ++編輯文本文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM