如何连接两个指针的内容

yeah 2000-01-12 09:18:00
有两个TMemroyStream,如
Stream1.loadformfile('C:\123.txt');
Stream2.loadfromfile('C:\222.txt');
从中对文件进行处理后,
我想将两个文件的内容合并起来,
Var S1,S2:string;
S1:=Pchar(stream1.memory);
s2:=pchar(Stream2.memory);
S1:=stirng(Pchar(S1))+String(PChar(S2));
结果S1仍然是未合并以前的内容。
...全文
471 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
LaoZheng 2000-01-16
  • 打赏
  • 举报
回复
var s1:String;
s1=StrPas(Stream1.Memory)+StrPas(Stream2.Memory);
barton 2000-01-15
  • 打赏
  • 举报
回复
哦,我明白了,TMemo.Lines和TRichMemo.Lines所含的内容是不一样的,
后者带有格式内容。我曾经想滤掉格式内容但没有成功。
Firing_Sky 2000-01-15
  • 打赏
  • 举报
回复
S1和S2都是TString,你又赋值S1为String+String=string,这当然不行了。
yeah 2000-01-15
  • 打赏
  • 举报
回复
kxy,分数先奉上了,的确少了点,但问题没有解决,如果按您所说,我会丢掉格式信息,干脆我重贴一张贴子,是要将一个文本与RTF合并或两个RTF文件合并,如果能解决,我给100分。
kxy 2000-01-15
  • 打赏
  • 举报
回复
是这样,
RxRichEdit
property Lines: TStrings read FRichEditStrings write SetRichEditStrings;
FRichEditStrings是TRichEditStrings类型的.
TRichEditStrings重载了SaveToStream.//写了什末没有仔细看.
SaveToStream和RxRichEdit的StreamForma有关.//你可以自己研究一下.
如果只是让程序按你所说的运行这样.
SaveToStream之前 Memo1.StreamFormat := sfPlainText;
作完了 Memo1.StreamFormat := sfDefault;
20分拿的好累.:)
kxy 2000-01-14
  • 打赏
  • 举报
回复
I got It,(运行通过)
1) ReallocMem没有必要.
2) Stream1.Position 在Memo1.lines.savetostream(Stream1);
后发生变化,指向了最后.把Position改成0;
all things is OK.
yeah 2000-01-14
  • 打赏
  • 举报
回复
我试过,用RichEdit也不行。
yeah 2000-01-14
  • 打赏
  • 举报
回复
错了错了,我以为此问题有共性,我实际使用的是RXRichedit,请麻烦您再试试,帮我找出问题出在哪?
kxy 2000-01-14
  • 打赏
  • 举报
回复
//如果用这句,则不行
//Memo1.lines.SavetoStream(Stream1);

我用这句也可以
把你的123.txt 和 234.txt e-mail到 kxy@csdn.net
yeah 2000-01-14
  • 打赏
  • 举报
回复
应该不是Position的问题,如果您能运行通过下面的过程,
那可能是我的系统有问题:-(

Var Stream1,Stream2:TMemoryStream;
iLength:Integer;
begin
Stream1:=TMemoryStream.Create;
Stream2:=TMemoryStream.Create;

//如果用这句,则不行
//Memo1.lines.SavetoStream(Stream1);

//这样可以
Stream1.Loadfromfile('C:\123.txt');

Stream2.loadfromfile('C:\234.txt');
Stream1.Postion:=0;
Stream2.Postion:=0;
iLength:=Stream1.Size;
Stream1.Setsize(iLength+Stream2.Size);
Stream1.Postion:=iLength;
Stream1.Copyfrom(Stream2,Stream2.Size);
Stream1.Position:=0;
Memo1.Lines.loadfromStream(Stream1);
Stream1.Free;
Stream2.Free;
end;
yeah 2000-01-13
  • 打赏
  • 举报
回复
两个Stream直接读入文件可以相加,但我的源码这这样的,对不起!
Var Stream1,Stream2:TMemoryStream;
P1,P2:PChar;
begin
Stream1:=TMemoryStream.create;
Stream2:=TMemoryStream.create;
Memo1.lines.savetostream(Stream1);
Stream2.Loadfromfile('C:\234.txt');
Getmem(P1,Stream1.Size);
Move(Stream1.Memory^,P1^,Stream1.Size);
P2:=pChar(Stream2.Memory);
ReAllocMem(P1,Stream1.size+Stream2.Size+1);
StrLcat(P1,P2,Strlen(P2));
Stream1.SetSize(StrLen(P1));
Move(P1^,Stream1.Memory^,strlen(P1));
FreeMem(P1);
这时,Stream1的内容应该是连接后的内容,而事实上,它只有原来的内容,请
帮我找出以上的错误。谢谢。
barton 2000-01-13
  • 打赏
  • 举报
回复
我的方案经试验有效哦!

var
Strm1, Strm2: TMemoryStream;
S1, S2: string;
begin
Strm1 := TMemoryStream.Create;
Strm2 := TMemoryStream.Create;
Strm1.LoadFromFile(FileName1);
Strm2.LoadFromFile(FileName2);
SetLength(S1, Strm1.Size);
SetLength(S2, Strm2.Size);
Strm1.Read(S1[1], Strm1.Size);
Strm2.Read(s2[1], Strm2.Size);
S1 := S1 + S2;
Strm1.Free;
Strm2.Free;
ShowMessage(S1);
end;

caili 2000-01-13
  • 打赏
  • 举报
回复
在D3中可以使用
S1:=copy(strpas(stream1.memory), 1, stream1.size);
S2:=copy(strpas(stream2.memory), 1, stream2.size);
S1:=S1+S2;
barton 2000-01-13
  • 打赏
  • 举报
回复
tmemorystream的memory属性不可如楼上这样使用.正确的做法是:
1.使用TStream的CopyFrom功能;
2.SetLength(S1, Stream1.Size);
SetLength(S2, Stream2.Size);
Stream1.Read(S1[1], Stream1.Size);
Stream2.Read(s2[1], Stream2.Size);
S1 := S1 + S2;
kxy 2000-01-13
  • 打赏
  • 举报
回复
我用你的最初的方法试了,可以.
use Delphi 4.0
yeah 2000-01-13
  • 打赏
  • 举报
回复
我曾这样,想使用两个PChar并用StrCat进行连接,结果还是不行。
Var Stream1,Stream2:TMemoryStream;
P1,P2:PChar;
begin
Stream1:=TMemoryStream.create;
Stream2:=TMemoryStream.create;
Stream1.Loadfromfile('C:\123.txt');
Stream2.Loadfromfile('C:\234.txt');
Getmem(P1,Stream1.Size);
Move(Stream1.Memory^,P1^,Stream1.Size);
P2:=pChar(Stream2.Memory);
ReAllocMem(P1,Stream1.size+Stream2.Size+1);
StrLcat(P1,P2,Strlen(P2));
Stream1.SetSize(StrLen(P1));
Move(P1^,Stream1.Memory^,strlen(P1));
FreeMem(P1);
这时Stream1的内容仍是原来未合并的内容。
end;
yeah 2000-01-13
  • 打赏
  • 举报
回复
还是不行:(
kxy 2000-01-12
  • 打赏
  • 举报
回复
Stream1.SetSize(StrLen(PChar(S1))+StrLen(PChar(s2));
1) 本套课程针对高校大学生系统学习C语言而录制,从0基础入门讲起,循序渐进,通俗易懂,同时适用于计算机系及非计算机系的同学。通过学习可以帮助大家掌握C语言本质,轻松面对C语言全国二级考试,并达到能独立完成中型C项目、C游戏的水平;2) 多数高校都开设了C语言课程,网上C语言课程也很多,但普遍存在两个问题: (1) 授课方式单一,大多是照着代码念一遍, 对刚刚接触编程的同学来说,感觉晦涩难懂 (2) 授课内容过度注重语法,没有项目实战支撑,造成课程枯燥无趣。本课程针对上述问题进行了改进 (1) 授课方式采用语法讲解+内存布局示意图+项目的方式,让课程生动有趣好理解 (2) 系统全面的讲解了C语言的核心技术点,还配套录制了《全国计算机二级C语言真题精讲》,让学员在掌握C语言编程的同时,还能轻松面对二级考试;3) 课程详细内容: 常量-变量、分支语句、循环语句、操作符和表达式、函数(库函数、自定义函数、递归调用 )、数组(一维数 组、二维数组、数组作为函数参数、指针数组)、指针(指针指针类型、二级指针和多级指针指针表达式解析、指针运算、数 组指针、函数指针、回调函数)、调试技巧、程序环境和预处理(翻译环境、运行环境、预定义符号、#define和#undef、宏和函 数、条件编译、文件包含)、 数据在内存中的存储、内存块分配、static、字符函数和字符串函数、自定义类型(结构体、枚举 、联合)、动态内存管理、文件操作(i/o常量、i/o函数、流)。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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