DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: jeff1314
今日帖子: 0
在线用户: 5
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 sdzzb (一刀) ▲▲▲▲▲ -
普通会员
2018/9/2 22:40:05
标题:
较大文本文件数据处理 浏览:1715
加入我的收藏
楼主: 有一个文本文件数据,文件大小900M左右,每一行数据格式都是一样的,有没有快速的方法读取每一行数据,然后处理。
----------------------------------------------
-
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
2018/9/2 23:06:33
1楼: 读取只能按常规方法读。
比如映射到内存里,比如自己做一个大小是系统页大小倍数的内存空间去读。

另外,所谓的处理就看你是什么意思了。
----------------------------------------------
--
作者:
男 sdzzb (一刀) ▲▲▲▲▲ -
普通会员
2018/9/3 6:35:35
2楼: 处理可能是显示某几列数据或者将其中的几列单独提取到一个文件
注:txt每一列格式为用空格或/Tab分割的几个参数,就形成了行和列
----------------------------------------------
-
作者:
男 dbyoung (dbyoung) ★☆☆☆☆ -
普通会员
2018/9/3 8:03:57
3楼: 既然格式一样,导入数据库,处理起来岂不是很方便?
----------------------------------------------
武汉天气不好
作者:
男 pankangkang (aaaa) ★☆☆☆☆ -
普通会员
2018/9/3 11:22:15
4楼: stream 处理吧
总归是要一行一行循环下去的 再快的算法也要 N 次
----------------------------------------------
-
作者:
男 luckyrandom (luckyrandom) ★☆☆☆☆ -
普通会员
2018/9/3 12:08:15
5楼: 导到数据库里处理是正道,不用折腾
----------------------------------------------
SQL SERVER DBA QQ:315054403 曾经的Delphier  缘在上海
作者:
男 wr960204 (武稀松) ★☆☆☆☆ -
盒子活跃会员
2018/9/3 12:39:30
6楼: 快速是个相对概念,你的快是指1分钟内处理完成还是1秒钟内处理完成。
你的处理是怎么处理的?
----------------------------------------------
武稀松http://www.raysoftware.cn
作者:
男 forjoylee (天地无缘) ★☆☆☆☆ -
普通会员
2018/9/3 14:16:28
7楼: 数据量很大,如果不需要过滤特定行,可以使用虚拟加载这类技术,按需加载,因为你不可能同时把这么多数据显示出来。在相应事件(比如TListView.OnData)里定位到特定行,并记录已读取过的每一行数据在文件中的偏移量。

如果只是经过处理后,选择性写入另外一个文件,那就简单了,用TextFile每次读取一行循环就行了。

纯文本文件没有任何索引信息,只能逐行读取,无法取巧的。只能说用TStringList加载,然后内部用另外一个StringList的DelimitedText进行分割肯定是很慢的,消耗内存也大。内存足够,不在乎就无所谓了。
----------------------------------------------
这家伙很懒,什么都没有留下。
作者:
男 wac1104 (火鸟) ★☆☆☆☆ -
普通会员
2018/9/3 20:43:33
8楼: 我写的一个SuperCSV专门处理CSV的工具, 支持筛选 打开超过10G以上的巨大CSV文件(采用分页方式)
此帖子包含附件:wac1104_201893204332.zip 大小:825.1K
----------------------------------------------
火鸟
作者:
男 sdzzb (一刀) ▲▲▲▲▲ -
普通会员
2018/9/3 21:44:53
9楼: @wac1104 
用了下,数据只能提取两千行,后面的就没有了,我的数据有8w行,每行有400列。
不过能否说下具体实现,可以借鉴一下
----------------------------------------------
-
作者:
男 wac1104 (火鸟) ★☆☆☆☆ -
普通会员
2018/9/4 7:29:54
10楼: @sdzzb 可以 翻页的
另外可以导出 ,导出就是全部的
----------------------------------------------
火鸟
作者:
男 hz_2009 (盒子) ★☆☆☆☆ -
普通会员
2018/9/4 10:03:40
11楼: 数据库最快,其他都不快。900M的文本,读出来都很慢
----------------------------------------------
-
作者:
男 zhangshelly (雪莱) ★☆☆☆☆ -
盒子活跃会员
2018/9/4 10:38:37
12楼: 鸟哥做专用文件,自已定专用格式,比通用数据库快
----------------------------------------------
-
作者:
男 ningj123 (123(真的很菜呀)) ★☆☆☆☆ -
普通会员
2018/9/4 14:37:52
13楼: 可以考虑用elasticsearc
----------------------------------------------
-
作者:
男 zhangpuqing (pupu) ★☆☆☆☆ -
普通会员
2018/9/4 14:55:54
14楼: 900M文件不算大呀。导入到数据库里操作是方便了,但时间也长,如果不是专门的数据库需求可以用直接读文件的方法。
----------------------------------------------
-
作者:
男 hdcopy (hdcopy) ★☆☆☆☆ -
普通会员
2018/9/4 15:09:28
15楼: 关键还是看文件内容还有要干什么。
比如每行长度固定,要处理的数据行内位置固定,数据需要逐行处理,
那不断seek,read可能很好。
但如果需要处理的操作稍微有点要求,导入数据库处理几乎是绝对的首选。
----------------------------------------------
-
作者:
男 abcjingtong (jingtong) ★☆☆☆☆ -
普通会员
2018/9/4 15:44:09
16楼: 只能根据数据特点做相应的处理了,用指针移位操作还是相对比较快的。
----------------------------------------------
18114532@qq.com
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
2018/9/5 16:17:28
17楼: 居然有人说数据库最快的。。。
----------------------------------------------
--
作者:
男 nevergrief (孤独骑士) ★☆☆☆☆ -
盒子活跃会员
2018/9/5 16:30:26
18楼: 数据库当然是最快的,我同意。我也是最近才认识到这个思路,如果数据比较规范,一定要转换成数据库,不但速度快,而且为所欲为,因为SQL就是你的菜,否则你要写出无数个高效率的文本函数,才能提供SQL的一部分功能。
----------------------------------------------
只有偏执狂才能生存!
作者:
男 wac1104 (火鸟) ★☆☆☆☆ -
普通会员
2018/9/5 20:09:02
19楼: 快是相对的,看你做什么,某些时候文本确实比数据库快,越通用性能越低,越专性能越高。如果只考虑只读情形。确实文本可以做的比数据库快很多。(在数据库不加索引情形下)
----------------------------------------------
火鸟
作者:
男 heise888 (heise888) ▲▲▲▲△ -
普通会员
2018/9/5 22:29:19
20楼: 数据量大还是用文本读取方式快,看dev的searchlist的DEMO用文本加载30几万条数据也就是1到2秒的时间,
----------------------------------------------
-
作者:
男 kinneng (kinneng) ★☆☆☆☆ -
盒子活跃会员
2018/9/6 5:26:53
21楼: 经过数据库是不可能比直接读数据快的了,建议额外生成一个索引表,
用固定格式记住每行,每列的起始位置,关键词等等。
----------------------------------------------
声明:本人不在论坛询问任何编程问题,请不要将我的帖子当成问题来回答。炒股一天,编程三年,不浪费时间了。 经常在外面,没空,不要找我..
作者:
男 forjoylee (天地无缘) ★☆☆☆☆ -
普通会员
2018/9/7 8:54:16
22楼: 900M读取也很快的,每次读10M。你要一个一个字符读检查是不是换行那肯定慢……
----------------------------------------------
这家伙很懒,什么都没有留下。
作者:
男 roadrunner (roadrunner) ★☆☆☆☆ -
盒子活跃会员
2018/9/7 9:11:28
23楼: 实际上, 一个一个字符读检查是不是换行也不会慢到哪去......
一个一个字符做加法拼字符串那才是慢的原因...

现代操作系统的优化, 不管你是一个一个字符读取还是64K一块一块地读取, 性能差距不过是在10%以内.... 会拖慢性能的只会是你自己的代码
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2018/9/7 9:38:50
24楼: 一堆老黄历。
delphi 的 string 变量,也是有改进的。
----------------------------------------------
(C)(P)Flying Wang
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行78.97949毫秒 RSS