TC官方合作论坛

标题: 求解超大纯文本读取方案,请大神提点一二 [打印本页]

作者: renchin10025    时间: 2014-7-6 23:15
标题: 求解超大纯文本读取方案,请大神提点一二
本帖最后由 renchin10025 于 2014-7-7 08:42 编辑

程序设计要求依行读取超过500W行的纯文本,每读取一行则赋值给变量,使用后再读取下一行

500行的文件大小大约100多M。如果程序开始时不卡死,程序也不占太多内存就更好了。

请问有办法实现吗?大神们请指教一二,新人真心求教。。。





作者: chentaotest    时间: 2014-7-7 11:12
每读一行赋给变量,得多少万个变量啊,要想不卡死就多线程吧,自己多尝试
作者: 小西    时间: 2014-7-7 11:45
100多M的文本,没有试过.
这里有一个思路,你自己测试一下看看:
用线程开启一个功能.
功能里是用  文件.读文件() 读出这个文本
然后用 "\r\n" 当分割标志,将读出的文本,分成一个以每行为一个单位的数组.
这样就达到了,一行对应一个变量.只是这个变量是一个数组成员.
你试一下.看成不成.主要是看读的时候,会不会卡很久.
作者: csbadmin    时间: 2014-7-7 12:19
用读文件直接读不出来,可以用读一行试下.
  1. 空间 啊
  2. //默认空间
  3. 线程句柄 = 0
  4. //开始按钮_点击操作
  5. 功能 开始_点击()
  6.     路径 = 浏览框.获得("浏览框0")
  7.     如果(!文件.是否存在(路径))
  8.         返回 假
  9.     如果结束
  10.     如果(路径 == "" )
  11.         返回 假
  12.     如果结束
  13.     如果(线程句柄 == 0)
  14.         线程.开启("啊.我的线程",路径)
  15.     否则
  16.         线程.关闭(线程句柄)
  17.     如果结束
  18. 功能结束
  19. 功能 我的线程(路径)
  20.     变量 文本数组,大小,文件句柄
  21.     开始时间 = 系统.获取毫秒()
  22.     //文本 = 文件.读文件(路径)
  23.     文件句柄 = 文件.打开(路径)
  24.     循环(真)
  25.         文本 = 文件.读一行(文件句柄)
  26.         调试输出(文本)
  27.         //辅助.等待(10)
  28.         如果(文本=="")
  29.             跳出
  30.         如果结束
  31.     循环结束
  32.     文件.关闭(文件句柄)
  33.     用时 = 系统.获取毫秒() - 开始时间
  34.     调试输出(用时)
  35. 功能结束
  36. //退出按钮_点击操作
  37. 功能 退出_点击()
  38.    
  39.     辅助.退出()
  40. 功能结束

  41. 空间结束
复制代码

作者: renchin10025    时间: 2014-7-9 23:28
chentaotest 发表于 2014-7-7 11:12
每读一行赋给变量,得多少万个变量啊,要想不卡死就多线程吧,自己多尝试 ...

是的。。所以想找个一边运行。一边读取的方案。可是自己没想到。所以来求助大神们帮忙
作者: renchin10025    时间: 2014-7-9 23:29
小西 发表于 2014-7-7 11:45
100多M的文本,没有试过.
这里有一个思路,你自己测试一下看看:
用线程开启一个功能.

谢谢版主回复,我发问之前用的就是此方法。但CPU会卡50%很久。。读文件完成很快。主要是卡在"字符串.分割"这个命令..
作者: renchin10025    时间: 2014-7-9 23:33
csbadmin 发表于 2014-7-7 12:19
用读文件直接读不出来,可以用读一行试下.

谢谢回复,尝试用过读一行,但程序可能会继续上一次运行时的行.比如从100W行开始继续,所以读一行也不太适用.也许可以用多线程+读开关来控制...不过也不是很完美 .




欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/) Powered by Discuz! X3.1