从文件中删除从开始的前几行该如何操作?

软件和网站开发以及相关技术探讨
回复
weihua2008
帖子: 448
注册时间: 2008-07-10 15:08

从文件中删除从开始的前几行该如何操作?

#1

帖子 weihua2008 » 2009-07-10 10:33

???
头像
kwarph
帖子: 51
注册时间: 2006-06-19 19:19
联系:

Re: 从文件中删除从开始的前几行该如何操作?

#2

帖子 kwarph » 2009-07-10 12:07

没有很直接的办法,下面的代码你看看

代码: 全选

#include <iostream>
#include <fstream>
#include <list>
#include <ctime>
#include <vector>
using namespace std;

int main() {
    ifstream fin("testfile.txt");
    if (!fin) {
        cerr << "error" << endl;
        return 1;
    }

    string line;
    vector<string> lines;
    while (getline(fin, line)) {
        lines.push_back(line);
    }
    fin.close();

    ofstream fout("testfile.txt");
    if (!fout) {
        cerr << "error" << endl;
        return 1;
    }

    int skiplines = 5;
    if (lines.size() <= skiplines) {
        fout << "";
        fout.close();
        return 0;
    }

    for (size_t i = skiplines - 1; i < lines.size(); ++i) {
        fout << lines[i] << endl;
    }
    fout.close();
}
Tiger Cheng
昆山轩辕IT培训中心
C++培训讲师
邮件:kwarph@gmail.com
主页:http://www.xuanyuan-soft.cn
poet
帖子: 2841
注册时间: 2006-09-11 22:47

Re: 从文件中删除从开始的前几行该如何操作?

#3

帖子 poet » 2009-07-10 12:15

删除 file 文件前三行:

cat file |sed 1,3d
头像
xhy
帖子: 3916
注册时间: 2005-12-28 1:16
系统: Ubuntu 12.10 X64
来自: 火星

Re: 从文件中删除从开始的前几行该如何操作?

#4

帖子 xhy » 2009-07-10 12:53

稍微修改了下2楼的代码

代码: 全选

#include <iostream>
#include <fstream>
using namespace std;

int main() {
    int skiplines = 5;
    ifstream fin("testfile.txt");
    if (!fin) {
        cerr << "error" << endl;
        return 1;
    }
    ofstream fout("testfile.txt");
    if (!fout) {
        cerr << "error" << endl;
        return 1;
    }
    string line;
    int cur=0;
    while (getline(fin, line)) {
        if (cur++>=skiplines)
            fout << line<< endl;
    }
    fin.close();
    fout.close();
}
目前负债150多万
weihua2008
帖子: 448
注册时间: 2008-07-10 15:08

Re: 从文件中删除从开始的前几行该如何操作?

#5

帖子 weihua2008 » 2009-07-10 14:39

谢谢
但是4楼的结果不对哈
是不是只是删除内容的
还得结合2楼的?
上次由 weihua2008 在 2009-07-10 14:45,总共编辑 1 次。
weihua2008
帖子: 448
注册时间: 2008-07-10 15:08

Re: 从文件中删除从开始的前几行该如何操作?

#6

帖子 weihua2008 » 2009-07-10 14:41

shell命令就免了,这个我感觉不太适用嵌套到的c++程序中
是不是另有高见
头像
xhy
帖子: 3916
注册时间: 2005-12-28 1:16
系统: Ubuntu 12.10 X64
来自: 火星

Re: 从文件中删除从开始的前几行该如何操作?

#7

帖子 xhy » 2009-07-10 14:49

weihua2008 写了:谢谢
但是4楼的结果不对哈
是不是只是删除内容的
还得结合2楼的?
搞反了,刚才那个是保留前5行
目前负债150多万
weihua2008
帖子: 448
注册时间: 2008-07-10 15:08

Re: 从文件中删除从开始的前几行该如何操作?

#8

帖子 weihua2008 » 2009-07-10 14:54

还有一点疑问就是我的文件若是有几百M,或者更大,几个G的话这种方法还有效没有
容器还能承的下吗,是不是与我的内存的大小有关系,我的是两G 的内存
也就是操作的文件最大不能超过两G
这 只是一个极端的假设不要见怪
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

Re: 从文件中删除从开始的前几行该如何操作?

#9

帖子 BigSnake.NET » 2009-07-10 19:06

#include <iostream>
#include <fstream>
using namespace std;

int main() {
int skiplines = 5;
ifstream fin("testfile.txt");
if (!fin) {
cerr << "error" << endl;
return 1;
}
ofstream fout("testfile.txt");
if (!fout) {
cerr << "error" << endl;
return 1;
}
string line;
for (int i = 0;i < skiplines;++ i)
getline(fin, line);
while (getline(fin, line)) {
fout << line<< endl;
}
fin.close();
fout.close();
}
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
回复