文件匹配替换问题

gaslinux 2010-06-26 12:39:32
有两个文件,1.txt和2.txt.分别有多列,每列用"|"分开,现在要将1.txt第3列的值去匹配2.txt的第2列,如果匹配成功,将2.txt中的第四列的值替换1.txt第三列的值,都没有排序,数据量都在100万行左右,请教有没有好的算法?
...全文
176 22 打赏 收藏 转发到动态 举报
写回复
用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)

69,381

社区成员

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

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