我想从我data.txt
文件中存储的某些文字中删除最后一行("%12345")
任何人都可以告诉我如何实现我想要的目标。抱歉,我还没有任何代码。如果你给了我一些例子,我真的很感激。
data.txt中:
Lorem Ipsum只是印刷和排版行业的虚拟文本。 自16世纪以来,Lorem Ipsum一直是业界标准的虚拟文本, 当一个不知名的prindfdtersd拿了一个类型的厨房并乱扰它制作一个类型标本 书。它不仅存在了五个世纪,而且还延伸到了电子领域 排版,基本保持不变。它在20世纪60年代随着时代的推广而普及 发布包含Lorem Ipsum段落的Letraset表,最近发布了桌面版 出版软件如Aldus PageMaker,包括Lorem Ipsum的版本 %12345
#include <iostream.h>
#include <fstream.h>
main()
{
char search[500];
ifstream inFile;
ofstream outFile;
inFile.open("data.txt");
while(!inFile.eof())
{
inFile.getline(search,500);
outFile.open("data.txt");
outFile.seekp(0,ios::end); //Seek to the end of text file
//I don't know what to do here to delete last line????
outFile.close();
}
inFile.close();
return 0;
}
答案 0 :(得分:0)
如果您希望代码100%可移植,那么您可以做的就是阅读所有文本,然后逐行复制,而不是最后一行。如果真实文件与问题中的示例一样小,那么您可以选择使用它。
如果文件很大并且你不关心绝对的可移植性,你可以很容易地从最后寻找到4千字节的点,并从那里开始阅读。当您确定最后一行的起始位置时,使用特定于平台的方法将文件截断到该点(Windows上的SetEndOfFile,寻找正确的点并在UNIX上执行零长度写入等)。
就你所拥有的代码而言,至少如果你试图用一个相当现代的C ++编译器来做这件事,你可能需要抛弃那些代码并重新开始。我知道这听起来很苛刻,我真的很抱歉,但在这种情况下,这是真的。让我们从标题开始 - <iostream.h>
和<fstream.h>
自二十世纪九十年代中期以来已经过时了。大多数现代编译器都会在此基础上完全拒绝代码。
从那里开始,用于读取数据的代码几乎在所有方面都存在致命缺陷。您正在使用的std::getline
形式在技术上仍然包含在C ++中,但它经常被用来注意,它已经过了十年。您几乎总是希望表单采用std::string
参数。您的循环条件(while(!inFile.eof())
)也完全被破坏 - 它几乎无法正常工作。
至于我是如何做到的,我可能会对这个一般订单做点什么:
read a line into `prev_line`
while (read a line into `current_line`) {
write out prev_line
prev_line = current_line
}