DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: xkjdf02
今日帖子: 0
在线用户: 7
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 sxbug (太阳雨) ★☆☆☆☆ -
盒子活跃会员
2017/7/20 12:48:59
标题:
memo richedit 行数受限,有办法解决不? 浏览:1559
加入我的收藏
楼主: memo   richedit 都有行数限制?能突破不?620MB的文本文件,460万行,采用 lines.add(s) 方式添加,结果在lines.savetofile中保存的文件大小=0.
使用了  SendMessage(RichEdit1.Handle,EM_LIMITTEXT,$7FFFFFFE,0);
  SendMessage(RichEdit2.Handle,EM_LIMITTEXT,$7FFFFFFE,0);来解除限制,也不行。

请问高人,1、如何解除限制?    2、 有替代的控件不?     3、若采用流方式,是否可行?

谢谢
----------------------------------------------
-
作者:
男 abcjingtong (jingtong) ★☆☆☆☆ -
普通会员
2017/7/20 13:33:46
1楼: 用notepad++这类部分加载或者自己开发显示吧
----------------------------------------------
18114532@qq.com
作者:
男 epzybook (epzybook) ★☆☆☆☆ -
普通会员
2017/7/20 13:37:55
2楼: 有必要显示这么大的文件吗?
----------------------------------------------
-
作者:
男 sxbug (太阳雨) ★☆☆☆☆ -
盒子活跃会员
2017/7/20 14:28:51
3楼: 我现在想用 tmemorystream ,可有一点小问题
如何将 字符串 附加到 流中呢?
FS1:= TMemoryStream.Create;

读入一个 字符串 s

FS1.write(pansichar(s+inttostr($a)),200); //这里怎么写都有问题,就想把s附加在文件后面

FS1.savetofile('c:\1.txt');

请高手指教
谢谢
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2017/7/20 14:36:00
4楼: 流有很多种,其中就有 StringStream 。
新版本 DLEPHI 的 StringStream 还支持多种编码。
但是 TStringList 更加简单。

但是,这些东西,都不能显示啊。
又有个屁用。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 sxbug (太阳雨) ★☆☆☆☆ -
盒子活跃会员
2017/7/20 14:43:00
5楼: 不显示,再处理。首先要把数据弄出来啊
Tstringlist 怎么存成文件呢?

流把它弄成文件容易点吧

谢谢
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2017/7/20 14:47:51
5楼: 我建立了一个 txt 内容是瞎输入的。
不停的复制
大概 480 多万行。
80M 还多的容量。
用 MEMO 加载,也就是卡了一会。
过了一会,加载完毕,一行不少。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2017/7/20 14:52:41
6楼: TStringList 存文件都不会,你还是放弃吧。
TStringList 加载速度很慢,而且容量太大,会报 Out of memory。

流不怕大容量,但是流不支持显示。
当然 TStringList 也不支持显示。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 sxbug (太阳雨) ★☆☆☆☆ -
盒子活跃会员
2017/7/20 16:23:05
7楼: 奇怪的是  stringstream 也有问题,文件小,大约16MB,没有问题;太大就610MB,就有问题,savetofile 的到的文件=0byte。高手请指教。谢谢
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2017/7/20 16:43:03
8楼: procedure TForm1.Button2Click(Sender: TObject);
var
  AStrings: TStringStream;
begin
  AStrings := TStringStream.Create;
  try
    AStrings.LoadFromFile('F:\TEMP\Test\b.txt');
    AStrings.SaveToFile('F:\TEMP\Test\c.txt');
  finally
    AStrings.Free;
  end;
end;
加载和保存,都没有问题。
b.txt
636MB
----------------------------------------------
(C)(P)Flying Wang
作者:
男 speedbin (speedbin) ★☆☆☆☆ -
盒子活跃会员
2017/7/20 17:27:06
9楼: 为什么要全部读到内存处理完了再写回去?难道一个文件有10G你也读入内存么?你可以用低级文件处理函数一行一行读取,或者用fileopen fileseek……文件处理函数。
----------------------------------------------
-
作者:
男 hujiacheng ( 旺财) ★☆☆☆☆ -
普通会员
2017/7/20 20:21:27
10楼: 按此在新窗口浏览图片
LIST 好像 还是32位那种大小。
----------------------------------------------
免费的FTPhttps://download-installer.cdn.mozilla.net/pub/firefox/releases/43.0/win64/zh-CN/https://cc.embarcadero.com/Author/575019>http://delphi-z.ruhttps://download-installer.cdn.mozilla.net/pub/firefox/releases/43.0/win64/zh-CN/https://cc.embarcadero.com/Author/575019>http://delphi.icm.edu.pl/ftp/https://download-installer.cdn.mozilla.net/pub/firefox/releases/43.0/win64/zh-CN/https://cc.embarcadero.com/Author/575019>http://delphi-z.ruhttps://download-installer.cdn.mozilla.net/pub/firefox/releases/43.0/win64/zh-CN/https://cc.embarcadero.com/Author/575019
作者:
男 sxbug (太阳雨) ★☆☆☆☆ -
盒子活跃会员
2017/7/21 0:43:26
11楼: 定义了私有变量private
        FS1,FS2:TstringStream;

主函数:   
try
      FS1.LoadFromFile('c:\1.txt');

      while FS1.Position<FS1.size do begin
        s:=''; s1:='';k:=0;
        while not ((s1=#$A) or (s1=#$D) or (k>1024)) do begin
          s1:=FS1.ReadString(1);
          s:=s+s1;
          k:=k+1;
        end;        
        ChkDNA(s,'ATCGH');
      end;
    finally      
      FS1.clear;
    end;
    FS2.SaveToFile('c:\2.txt');


在chkDNA 函数中:
FS2.WriteString(s+#$D+#$A);


程序报错,out of memory.  因为处理小的文件,没有错误,处理大的文件才报错,又不好跟踪。只好再次请教大侠。谢谢
----------------------------------------------
-
作者:
男 iamdream (银河恒久远,梦想无止境!) ★☆☆☆☆ -
大贡献会员
2017/7/21 9:08:46
12楼: 用TFileStream即可:
var
  s: string;
...
with TFileStream.Create('C:\1.txt', fmOpenReadWrite, fmShareDenyWrite) do try
  Seek(0, soFromEnd);
  Write(PChar(s)^, Length(s)*SizeOf(Char));
finally
  Free;
end;
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 博客挂了……
作者:
男 sxbug (太阳雨) ★☆☆☆☆ -
盒子活跃会员
2017/7/21 14:21:20
13楼: 找到问题的地方了

就是在循环中 FS2.WriteString(s+#$D+#$A);这里 内存溢出。

FS2原则上不会大于 FS1,但不知道为什么,会内存溢出。请高人指教啊
----------------------------------------------
-
作者:
男 sxbug (太阳雨) ★☆☆☆☆ -
盒子活跃会员
2017/7/21 14:35:14
14楼: 内存管理是不是 FS1+FS2+FS3 + 其它数组 <2GB?  

FS2 流<2GB?

如何扩大内存的使用?

谢谢
----------------------------------------------
-
作者:
男 nevergrief (孤独骑士) ★☆☆☆☆ -
盒子活跃会员
2017/7/21 16:30:40
15楼: 不知道你这个out of memory是谁的out of memory?
如果是程序总体的out of memory,那就是FS1+FS2使用的内存超过2G(实际1.7G就会溢出),也会out of memory。如果是FS2自己就弹出来out of memory,那另当别论。你好歹给个截图不是吗?
----------------------------------------------
只有偏执狂才能生存!
作者:
男 speedbin (speedbin) ★☆☆☆☆ -
盒子活跃会员
2017/7/21 17:15:55
16楼: 我前面写的你根本没看,如果是我来做,文件很大的时候根本不会用这种方式,如果一个文件有100G你是不是也要全部读入内存来操作?正确的方式应该打开文件然后从头开始,读取部分数据处理,边处理边移动文件指针,这样即使文件有10T大小(假设文件有这么大)我只需要很小的内存也能运行。去看看fileopen fileseek fileread…文档吧。
----------------------------------------------
-
作者:
男 sxbug (太阳雨) ★☆☆☆☆ -
盒子活跃会员
2017/7/23 10:32:46
17楼: 首先一并感谢所有高手们的指导。
今天我把FS2限制在200MB以下时,程序启动,占用内存约1.2GB,运行一段时间后,变成850MB左右。就是运行慢,后期处理非常麻烦,我把FS2达到200MB就存盘,就clear,然后想通过 winexec 执行 copy命令合并,居然没有任何作用。

自己对这个 流  没有弄得很明白。一个小问题,真的把我弄头大了。

我就是想实现一个这样的功能:
打开一个文本文件,(文件大就读入一部分行,不能打断一行数据)。对文本文件的每行数据进行比对,比对不匹配的,放到另一个流中,最后存盘。比对成功的,我放在一个Tstringlist中,在这个Tstringlist中需要统计 一样的字符串 有几个,最后也要存成一个文本文件(用流 替换 tstringlist可行不?)。

文件不大,怎么弄都行,文件大了,就很多地方出问题。
1、AssignFile(‘c:\1.txt’);
   Reset(txtFile); //以只读方式打开文件,打开大文件就出错?这个搞不懂
2、想编译成64位,是否能解决问题?perlregEX无法编译成64位,有pcre的64位版本不?
3、winexec 执行后台的copy ren 命令好像没有作用

再次请教!
----------------------------------------------
-
作者:
男 sxbug (太阳雨) ★☆☆☆☆ -
盒子活跃会员
2017/7/23 14:17:21
18楼: @speedbin

我就是需要几个函数,1 打开文件,分块 读入内存。
2 打开文件,将字符串 写入文件
3 在打开的文件中搜索 指定的字符串,更改文件,指定位置的内容

高手麻烦指教。谢谢
----------------------------------------------
-
作者:
男 sxbug (太阳雨) ★☆☆☆☆ -
盒子活跃会员
2017/7/23 22:17:25
19楼: 上面的第2条,我就是希望实现,打开一个 文件,然后我不断在后面添加内容,它自动存盘,不占用过多内存。就是不断写到文件后面,而整体文件不全部放在内存中。
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2017/7/24 9:27:50
20楼: 12 楼就是答案,楼主真是浪费时间。
----------------------------------------------
(C)(P)Flying Wang
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行71.04492毫秒 RSS