用c/c++定位删除一行的问题。
用c/c++定位删除一行的问题。
问题背景:
所需数据相当大。a与b文件均为一组文件(a1,a2…,b1,b2…),a文件有最大数据行数(如5000),以行的形式,从a文件中读取数据,将a中不能处理的数据放在b文件中,然后单独对b。
b文件中依旧对数据进行处理,如果已经处理成功,则将该条(该行)数据删除,如果失败则继续保留该数据。
问题情况:
在没有动手编的时候,觉得是个很容易的问题,但是后来发现,c/c++提供的函数,并没有指定删除一行数据的库函数。
网上说了一些方法如先定位在要删除的数据位置,然后将后面的数据覆盖在这个位置。
这样做有3个问题:
一是,seekp()函数可以定位,然后用f.write(s, strlen(s));但是具体要怎样将后面的数据保存并写到这个位置呢? 后面的数据可能有几千行,而且是有‘\n‘的字符的。
二是,如有10条数据,那么这时候要将第二条删除,那么就将第三条往后的7条数据,都覆盖过来,那么之前的最后一条,即第十条数据并没有什么来给它覆盖了?那要怎么去掉原来的第十条?
三是,这样做它的速度问题呢?几千行每处理成功一次,就要将数据整体往前挪,频繁做这个动作效率肯定不高。
那么有没有其他的好方法呢??
另外,还有一条路,就是用数据库代替这个功能,
那么还会有下面的考虑:
一是数据库也存在保存成功和失败的问题;
二是频繁操作数据库会不会更没有效率呢?(与频繁操作文件读取相比)
说错了点,就是你要删除的那一行前面可以格式不一样,但是你每行要删除的数据格式的是一样
譬如说:如果你是删除日期时间你统一好格式,那么要删除的那行的字符数就是一样的啦
相关问答:
以前在VC里面建一个工程,都只用一个 .c 文件,昨天在一个工程里用了两个 .c文件了,遇到问题了,请大家指点。比如:
File1.c Fil ......
为什么C写的DLL文件C、PB能调用VB不能调用?
VB里为什么有的DLL直接通过引用可以使用?有的需要通过declare申明外部函数?这些DLL有什么差别?
1、为什么PB能通过DECLARE声明而VB不行?
2、如果这个dll中的 ......
最近突然想自己来实现一个五子棋程序,但不知道怎么开始,自己也没学画图形函数,能在控制台下直接写吗>>>?????
控制台?比图形界面更麻烦。
http://search.download.csdn.net/search/%E4%BA%94%E5%AD%90% ......
大家好!我是一位C爱好者,向大家请教下,C程序员可好找工作?公司用C干些什么?
无所谓好不好找工作,一般通信、系统、嵌入式、硬件方面用的多,而且由于C的底层特性,学会后在学其他的会比较容易
不管用什么语 ......