如何使用C++; 如何编辑C++中的文本文件的特定行?假设我想打开一个文件,并将焦点或指针或其调用的任何内容更改为第17行第20列。这样我就可以编辑第17行第20列之后的文本
我试过这个,但没用如何使用C++; 如何编辑C++中的文本文件的特定行?假设我想打开一个文件,并将焦点或指针或其调用的任何内容更改为第17行第20列。这样我就可以编辑第17行第20列之后的文本,c++,text-files,fstream,C++,Text Files,Fstream,我试过这个,但没用 ofstream txtFile("textFile.txt"); fseek(txtFile, 17, 20); txtFile << "New stuff to enter at this point (overwrites old not insert)"; 流txtFile(“textFile.txt”)的; fseek(txtFile,17,20); txtFilefseek不是在寻找计数行,而是在寻找字节。您指示程序的不是将指针定位在第17行的第20
ofstream txtFile("textFile.txt");
fseek(txtFile, 17, 20);
txtFile << "New stuff to enter at this point (overwrites old not insert)";
流txtFile(“textFile.txt”)的;
fseek(txtFile,17,20);
txtFilefseek
不是在寻找计数行,而是在寻找字节。您指示程序的不是将指针定位在第17行的第20列,而是定位在文件的第17+20=37字节
函数的第一个参数是原点,即从原点开始计算的字节数,第二个参数是偏移量
请参阅fseek的
<>我不知道有任何库可以在C++中对行和列进行字节定位。您可能需要使用更高级的函数并逐行解析(例如,如果使用C++解决方案,则使用<代码> GETLION<代码>。使用FPATS,就像它完成了一样。为了识别新行,您必须循环内容并计算新行字符(即linux上的“\n”)。您可以使用获取当前指向的角色
实现这一点的一种方法是编写一个函数,返回给定行开始位置的字节位置,如下所示:
#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;
}
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宽,你可以添加一个lseek
,在调用getc
之前跳过n个字节。这并不能满足OP的要求,正如我的回答所指出的。我添加了有关计算换行符的信息。它应该是有效的——而且在你有固定宽度的线条的情况下,它会比你建议的阅读整条线条要好。我很高兴删除反对票。我真的很讨厌把它们放在那里,真的。在您的示例中,首先从字节0开始,行在字节6,blah在字节11等等。您可以看到:fseek
命令不理解任何行、句子和单词。那么字节计数是否受前面字符数的影响?如果第16行有6000个字符,它会改变第17行第20列的字节数吗?@JoshI:会的。有6000人。看看我的另一篇评论,它给我的计划带来了麻烦。。。哈感谢您的澄清。这个问题有一个简单的解决方案-在下面的示例中实现。