分享

Delphi 类型轮换函数

 aaie_ 2012-06-20
//from
http://kingron./zsfunc0d.htm

(*//
标题:充分利用pascal字符串类型
说明:和PChar不同,string可以保存#0字符在其中;示例文件、内存流字符串之间转换
设计:Zswang
日期:2002-01-25
支持:wjhu111@21cn.com
//*)

///////Begin   Source
function   StringToFile(mString:   string;   mFileName:   TFileName):   Boolean;
{   返回字符串保存到文件是否成功   }
var
    vFileChar:   file   of   Char;
    I:   Integer;
begin
    {$I-}
    AssignFile(vFileChar,   mFileName);
    Rewrite(vFileChar);
    for   I   :=   1   to   Length(mString)   do   Write(vFileChar,   mString[I]);
    CloseFile(vFileChar);
    {$I+}
    Result   :=   (IOResult   =   0)   and   (mFileName   <>   ' ');
end;   {   StringToFile   }

function   FileToString(mFileName:   TFileName):   string;
{   返回从文件载入字符串   }
var
    vFileChar:   file   of   Char;
    vChar:   Char;
begin
    Result   :=   ' ';
    {$I-}
    AssignFile(vFileChar,   mFileName);
    Reset(vFileChar);

    while   not   Eof(vFileChar)   do   begin
        Read(vFileChar,   vChar);
        Result   :=   Result   +   vChar;
    end;
    CloseFile(vFileChar);
    {$I+}
end;   {   FileToString   }

function   StreamToString(mStream:   TStream):   string;
{   将内存流转换成字符串   }
var
    I:   Integer;
begin
    Result   :=   ' ';
    if   not   Assigned(mStream)   then   Exit;
    SetLength(Result,   mStream.Size);
    for   I   :=   0   to   Pred(mStream.Size)   do   try
        mStream.Position   :=   I;
        mStream.Read(Result[Succ(I)],   1);
    except
        Result   :=   ' ';
    end;
end;   {   StreamToString   }

function   StringToStream(mString:   string;   mStream:   TStream):   Boolean;
{   返回将字符串保存到内存流是否成功   }
var
    I:   Integer;
begin
    Result   :=   True;
    try
        mStream.Size   :=   0;
        mStream.Position   :=   0;
        for   I   :=   1   to   Length(mString)   do   mStream.Write(mString[I],   1);
    except
        Result   :=   False;
    end;
end;   {   StringToStream   }
///////End   Source

///////Begin   Demo
procedure   TForm1.Button1Click(Sender:   TObject);
var
    vMemoryStream:   TMemoryStream;
begin
    Memo1.Text   :=   FileToString( 'C:\WINDOWS\Desktop\1.txt ');
    vMemoryStream   :=   TMemoryStream.Create;
    try
        Memo1.Lines.SaveToStream(vMemoryStream);
        Memo2.Text   :=   StreamToString(vMemoryStream);
    finally
        vMemoryStream.Free;
    end;
end;

procedure   TForm1.Button2Click(Sender:   TObject);
var
    vMemoryStream:   TMemoryStream;
begin
    StringToFile(Memo2.Text,   'C:\WINDOWS\Desktop\1.txt ');
    vMemoryStream   :=   TMemoryStream.Create;
    try
        StringToStream(Memo2.Text,   vMemoryStream);
        vMemoryStream.Position   :=   0;
        Memo1.Lines.LoadFromStream(vMemoryStream);
    finally
        vMemoryStream.Free;
    end;
end;
///////End   Demo

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多