操作文件,给个思路

painAndhappy 2005-06-09 12:27:15
两个文件:主文件和数据文件.
把两个文件中,KEY匹配的数据抽出,然后放入另外一个文件.
希望各位能给个思路,包括变量的定义与函数的分割.
...全文
229 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
painAndhappy 2005-06-12
  • 打赏
  • 举报
回复
非常感谢大家的帮助!
dinner3000 2005-06-10
  • 打赏
  • 举报
回复
楼上的搞什么飞机?
painAndhappy 2005-06-10
  • 打赏
  • 举报
回复
TO : garfunkle(摇滚下的蛋)
谢谢回答!对于输入(主文件及数据文件)和输出,使用的都是文本文件.
方法应该是可行的.但是,如果这样的话,因为每次都要遍历数据文件,效率可能比较低.
51365133 2005-06-10
  • 打赏
  • 举报
回复
#include "stdio.h"
#include "stdlib.h"

int main()
{
FILE *fp;
char *str="i love c and c++";
if((fp=fopen("d:\\data.txt","w"))==NULL)
{
printf("cannot open file\n");
exit(0);
}
fwrite(str,sizeof(str),sizeof(str),fp);
fclose(fp);
system("pause");
return 0;
}
dinner3000 2005-06-10
  • 打赏
  • 举报
回复
主文件
ID1 ID2 NAME
===================
001 0001 zhao
002 0002 qian
003 0003 sun
004 0004 li

数据文件
ID1 ID2 AGE TEL
==============================
001 0001 11 11111111 ------>数据A
001 0002 12 12121212 ------>数据B
003 0003 33 33333333 ------>数据C

上述数据中,KEY为ID1和ID2,则"数据A"和"数据C"因为能在主文件中找到对应的KEY,所以抽出,
放入另外一个文件.

基本就是这么一个东东.


=====================================================================================
具体实现:

要从数据文件中匹配到:
001 0001 zhao
awk -F"\t" '{ if ( $1=="001" && $2=="0001" ) { print; } }' 数据文件 >> 导出文件
|
+---以tab为列分隔符
可以用shell或者C++程序动态生成上面的语句
dinner3000 2005-06-10
  • 打赏
  • 举报
回复
unix下的话,建议用脚本,速度不比C++慢,而且比较灵活,你可以参考一下AWK,和SORT的用法,结合管道,应该很容易实现你说的功能,前一阵,由于工作需要用上述方法实现了类似文本型数据库操作的程序
darkwanderer 2005-06-10
  • 打赏
  • 举报
回复
我在作的一个东西跟楼主的要求有些相关性,我把我的想法说一下,如果对楼主有帮助就最好了。

对于文件的每一个记录而言,需要记录下所有的字段的值,以方便以后的比较和复制字段的值等操作。为了有普适性,建立如下的结构体:
struct RECORD_INFO {
int item_cnt;
char *item_list[MAX];
char work_buf[LENG];
};
从文件里读一行数据,放入work_buf中,然后写一个函数(主要是过滤空格和TAB之类的),将该条记录的每个字段在work_buf中的地址记录下来,依次放入item_list中,如此,通过item_list就可以方便的检索到每条记录的各个字段的值了。

由于不知道你的两个文件之间的ID的依赖关系,所以做最一般的处理:
首先,把主文件的所有记录进行逐条读取,通过上面所进行的操作,可以把ID都取出来,放在一个存放主文件ID的结构体数组里。然后开始读数据文件,对于每一条记录,取到其ID,与已经读取的主文件ID逐条比较,如果符合,取出要取的字段的值,如此循环。

思路如上,程序我就不提供了。:)
painAndhappy 2005-06-10
  • 打赏
  • 举报
回复
自己再顶一下.
garfunklett 2005-06-10
  • 打赏
  • 举报
回复
首先 写一个 一次读一条记录的函数(主文件和数据库文件如果格式不同的话 就分别写)

然后 建立 两个叫做temp1 temp2 的struct 一个用来存当前的主文件记录 一个用来存当前数据库文件

然后

打开主文件;
打开用来输出的文件;

读主文件一条记录到struct temp1;

while(主文件还有内容)
{
打开数据库文件;
读一条数据库文件到temp2;
while(数据库文件还有内容)
{
if(temp1&temp2中的 id1 和 id2相等)
输出此条记录到输出文件;
读一条数据库文件记录到temp2;
}
读一条主文件记录到temp1;
}

是这个意思么?使用的文件么? 还是使用数据库了?
garfunklett 2005-06-10
  • 打赏
  • 举报
回复
不知道你的一条 是不是就是一行 反正肯定有一定的格式
painAndhappy 2005-06-09
  • 打赏
  • 举报
回复
To:dinner3000(dinner3000)
是UNIX编程

jixingzhong(瞌睡虫)
正如5420(薰衣草)所说的,数据条数预先无法得知。
而如果每次对应与数据文件的一条数据,都要重新去读一遍主文件进行遍历的话,效率就太低了。
5420 2005-06-09
  • 打赏
  • 举报
回复
楼上的行不能,如你所说建立两个结构体,但是结构体内元素个数从何得知,楼主只是举了个例子,但是是特殊情况,可是写出来的程序要有通用性!
jixingzhong 2005-06-09
  • 打赏
  • 举报
回复
建立两个结构体,依次对应主文件和数据文件,(结构提和文件的内容要呼应!!)

循环读取数据,并且比较两个结构体的KEY项,

相等时,将对应于数据文件的结构体中的非KEY项的内容写入新建的一个文件。


直到文件结素,数据抽取完毕。
dinner3000 2005-06-09
  • 打赏
  • 举报
回复
你是unix编程还是windows?
tian_su 2005-06-09
  • 打赏
  • 举报
回复
学习
关注
painAndhappy 2005-06-09
  • 打赏
  • 举报
回复
自己顶一下.
painAndhappy 2005-06-09
  • 打赏
  • 举报
回复
比如说

主文件
ID1 ID2 NAME
===================
001 0001 zhao
002 0002 qian
003 0003 sun
004 0004 li

数据文件
ID1 ID2 AGE TEL
==============================
001 0001 11 11111111 ------>数据A
001 0002 12 12121212 ------>数据B
003 0003 33 33333333 ------>数据C

上述数据中,KEY为ID1和ID2,则"数据A"和"数据C"因为能在主文件中找到对应的KEY,所以抽出,
放入另外一个文件.

基本就是这么一个东东.
zhousqy 2005-06-09
  • 打赏
  • 举报
回复
描述太模糊

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧