使用fstream从文本文件中删除最后一行

时间:2015-09-08 17:09:21

标签: c++ text fstream

我想从我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;
}

1 个答案:

答案 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
}