社区
C语言
帖子详情
操作文件,给个思路
painAndhappy
2005-06-09 12:27:15
两个文件:主文件和数据文件.
把两个文件中,KEY匹配的数据抽出,然后放入另外一个文件.
希望各位能给个思路,包括变量的定义与函数的分割.
...全文
296
18
打赏
收藏
操作文件,给个思路
两个文件:主文件和数据文件. 把两个文件中,KEY匹配的数据抽出,然后放入另外一个文件. 希望各位能给个思路,包括变量的定义与函数的分割.
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用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
打赏
举报
回复
描述太模糊
杂项的基本解题
思路
(1)——
文件
操作
隐写、图片隐写
文件
操作
隐写 图片隐写 压缩
文件
处理 流量取证技术
文件
基本类型的识别 一、kail 下 file
文件
名 原理就是识别
文件
文件
头 比如这个软件: 二、WinHex 通过winhex分析能得到16进制和ascii, flag可能就在右边ascii区头部或尾部。 三、
文件
头残缺、错误 只告诉说是一个data
文件
; 这时要进行修复:编辑
文件
头区域修改为正确的方式 。
文件
分离
操作
一、...
大
文件
操作
思路
-切分
现在我们来考虑内存不足以放下所有的内容的情况。对于不足以放下所有的内容来说,我们的
思路
基本为将大的内容划分为小的部分,然后再去小的部分去进行去重。由于我们主要的内存限制在比如HashSet这种数据结构里,这里又牵扯到了OS是如何对底层的
文件
进行读取
操作
的。简单来说,他是可以不去一次性读取
文件
内容的。所以我们可以对
文件
内容进行分片。那么我们的
思路
就变成了将大
文件
通过分片算法划分为小
文件
,然后对。
原子
文件
操作
,不错的
思路
.AtomicFileOutputStream
每次变更. 先新增一个temp
文件
. close时,再将
文件
替换. 确保只有一个线程在更改. public AtomicFileOutputStream(File f) throws FileNotFoundException { // Code unfortunately must be duplicated below since we can't assign //
IO流:
文件
操作
的核心逻辑与实践
思路
打开流的过程,本质是程序与
文件
系统建立连接,此时需要明确
文件
的路径与
操作
模式(读、写、追加等),路径的合法性、
文件
的存在性都会直接影响流的创建结果。而数据
操作
阶段,无论是读取
文件
内容到程序,还是将程序数据写入
文件
,都是通过流的读写方法完成数据的“搬运”——读取是从
文件
向程序传输数据,写入则是反向传输,这一过程的效率,与流的缓冲机制密切相关。从本质上看,IO流实现
文件
操作
的逻辑,是将复杂的
文件
系统交互抽象为简单的流
操作
,通过统一的接口让开发者无需关注底层
文件
系统的差异,只需聚焦于数据的传输逻辑。
SpringBoot
文件
操作
整合
思路
文件
上传后,不仅可以保存在部署应用的服务器,也可以保存在阿里云,华为云obs,本文主要分享 SpringBoot 整合这三种不同
文件
存储服务器的
思路
C语言
70,040
社区成员
243,237
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章