社区
C语言
帖子详情
文件匹配替换问题
gaslinux
2010-06-26 12:39:32
有两个文件,1.txt和2.txt.分别有多列,每列用"|"分开,现在要将1.txt第3列的值去匹配2.txt的第2列,如果匹配成功,将2.txt中的第四列的值替换1.txt第三列的值,都没有排序,数据量都在100万行左右,请教有没有好的算法?
...全文
176
22
打赏
收藏
文件匹配替换问题
有两个文件,1.txt和2.txt.分别有多列,每列用"|"分开,现在要将1.txt第3列的值去匹配2.txt的第2列,如果匹配成功,将2.txt中的第四列的值替换1.txt第三列的值,都没有排序,数据量都在100万行左右,请教有没有好的算法?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
22 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
honemay
2010-06-28
打赏
举报
回复
LZ这个问题还是很有技术含量啊
如果不用数据库让我做的话
我只会每次从2个文件里读1000行数据到2个结构体数组中,然后成对的比对数据,再把每一行比对后的结果写入到一个新的文件中
这样效果会很差,算是最笨的办法吧!!
bobo364
2010-06-28
打赏
举报
回复
100万行都要匹配的话,都赶上自己设计一个数据库了
wanglu1990
2010-06-28
打赏
举报
回复
帮群主宣传一下qq群
资深C/C++ qq群:30268419 主要研究算法,数据结构,嵌入式
验证:请说一下是在csdn看到的.
赵4老师
2010-06-28
打赏
举报
回复
perl
数据库
sharco
2010-06-28
打赏
举报
回复
数据量比较大,建议先读到内存,然后进行处理,具体处理就是一些字符窜的处理
YY_006
2010-06-28
打赏
举报
回复
看不懂啊。。。。。。。。。。。。。。。
gaslinux
2010-06-28
打赏
举报
回复
感谢大家的回复,我最后把2.txt的第二列和第四列全部读到内存中,建立hash表,没有像cattycat说得那样保存行号或记录位置去定位了,多费了点内存,速度还是很快的,普通的服务器处理起来也就10几秒(没有具体测时间,估计的)。
yiruirui0507
2010-06-27
打赏
举报
回复
这个得把2.txt的第二列全部读到内存中,建立hash表,能快速和1.txt的第3列匹配,最好能有个保存行号或记录位置的。因为文件很大,用内存映射文件方式处理,hash表中有记录的位置的话,定位会快一点。
我感觉这个实现起来难度大,复杂。放到数据库里,文件导入数据库, 关联取值后重新导出,这个方法不错,支持一下。
另外楼主的这种情况不知道用WORD是不是更实惠容易点呢?你把文件转换正DOC,如果你说的列里面放的都是一些数字,简单字符的话,个人感觉EXCEL里面的好多函数也是个不错的选择。
wibnmo
2010-06-27
打赏
举报
回复
能否讲讲具体是怎么个过程。
楼主是在做什么项目么?用这么大的数据量。给说说吧。
[Quote=引用 9 楼 cattycat 的回复:]
这个得把2.txt的第二列全部读到内存中,建立hash表,能快速和1.txt的第3列匹配,最好能有个保存行号或记录位置的。因为文件很大,用内存映射文件方式处理,hash表中有记录的位置的话,定位会快一点。
[/Quote]
huanmie_09
2010-06-27
打赏
举报
回复
[Quote=引用 11 楼 shen_wei 的回复:]
引用 9 楼 cattycat 的回复:
这个得把2.txt的第二列全部读到内存中,建立hash表,能快速和1.txt的第3列匹配,最好能有个保存行号或记录位置的。因为文件很大,用内存映射文件方式处理,hash表中有记录的位置的话,定位会快一点。
这个也是一种方法,读内容到数据库中,这样你可以用sql语句来做了,不知道效率会怎么样
[/Quote]
100万的数据,对数据库来说是小菜一碟.
huanmie_09
2010-06-27
打赏
举报
回复
[Quote=引用 5 楼 mymtom 的回复:]
放到数据库里比较简单
[/Quote]
+1
将文件导入数据库, 关联取值后重新导出.
liutengfeigo
2010-06-26
打赏
举报
回复
这个,,你等高人吧
shen_wei
2010-06-26
打赏
举报
回复
[Quote=引用 9 楼 cattycat 的回复:]
这个得把2.txt的第二列全部读到内存中,建立hash表,能快速和1.txt的第3列匹配,最好能有个保存行号或记录位置的。因为文件很大,用内存映射文件方式处理,hash表中有记录的位置的话,定位会快一点。
[/Quote]
这个也是一种方法,读内容到数据库中,这样你可以用sql语句来做了,不知道效率会怎么样
shangyangi
2010-06-26
打赏
举报
回复
来学习的!
cattycat
2010-06-26
打赏
举报
回复
这个得把2.txt的第二列全部读到内存中,建立hash表,能快速和1.txt的第3列匹配,最好能有个保存行号或记录位置的。因为文件很大,用内存映射文件方式处理,hash表中有记录的位置的话,定位会快一点。
CVA4508M
2010-06-26
打赏
举报
回复
用sed + awk
很好解决
gaslinux
2010-06-26
打赏
举报
回复
[Quote=引用 3 楼 cattycat 的回复:]
只匹配没一行还是100万行都匹配?如果是后者那太麻烦了。
[/Quote]
1.txt第3列的值去匹配2.txt的第2列,就是1.txt每处理一行,都要拿第3列去匹配2.txt的第2列,当然2.txt的第2列每一个值都是唯一的。
周靖峰
2010-06-26
打赏
举报
回复
不会,静等高手
mymtom
2010-06-26
打赏
举报
回复
放到数据库里比较简单
AlanBruce
2010-06-26
打赏
举报
回复
算法并不是很麻烦
关键是如何优化你代码的效率
加载更多回复(2)
c语言
替换
文件
中的字符,(C语言)
文件
内容
替换
-
替换
字符串(移动
文件
指针)...
然后再删除原
文件
或者其他方法,这种生成临时
文件
的方法虽然能够将功能实现,但是进行
文件
的操作过多,而且还要生成一个
文件
,比较麻烦,今天就利用移动
文件
指针的方式对
匹配
的
文件
内容进行
替换
。解决方案首先我们...
还在傻瓜式
替换
?VsCode正则
匹配
替换
你学会了吗?
你可能觉得就这么几行,自己改能花多长时间,No,一切皆可代码,我们看看怎么用正则
匹配
替换
! 如果你还没有用过VsCode的话,强烈建议安装一个(微软可没给我广告费) 使用VsCode新建
文件
,将上面的文字复制到
文件
中, ...
awk 操作两个
文件
内容之
匹配
替换
先上代码 awk '(NR==FNR){a[$1]=$2;next} ($2 in a){$5=a[$2];...以上代码的意思是处理第一个
文件
时先将
文件
1的第一列和第二列存在数组里,处理第二个
文件
时将第五列
替换
成数组中的相对应的值 ...
linux下sed正则表达式
匹配
批量
替换
文件
中的内容
sed命令介绍 sed是一种流编辑器,它是文本处理中非常有用的工具,能够完美的...接着处理下一行,这样不断重复,直到
文件
末尾。
文件
内容并没有改变,除非你使用重定向存储输出。sed主要用来自动编辑一个或多个
文件
...
sed正则表达式
匹配
批量
替换
文件
中的内容
**sed命令介绍** sed是一种流编辑器,它是文本处理中非常有用的工具,能够完美的配合正则...sed主要用来自动编辑一个或多个
文件
,简化对
文件
的反复操作,编写转换程序等。 **基本语法** sed的命令格式:sed [options]
C语言
69,381
社区成员
243,073
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章