zoukankan      html  css  js  c++  java
  • delphi 数据处理

    TStringStream 怎样转换String

    procedure TForm1.Button1Click(Sender: TObject);
    var
         ss:TStringStream;
         str:String;
    begin
        ss:=TStringStream.Create('');
        for i:=0 to 99 do     
        begin
            ssThickness.WriteString(Floattostr(i+1)+',');    
       end;
    
        str:= SS;//此处怎样转换到字符串?
    
    end;
    分享到:
    2011-11-01 21:30网友采纳
    str:=ss.DataString;   这样就是将TstringStream转换成String
    View Code

    函数参数修饰中的var 、out和const

    (1)var修饰符

    添加var 是地址传递,会修改原有的变量

    var
    
    s: string;
    
    begin
    
    S := 'Hello';
    
    ChangeSVar(s);
    
    ShowMessage(S);
    
    end;
    
    // ChangeSVar 定义
    
    procedure TForm1.ChangeSVar(var A: string);
    
    begin
    
    A := A + 'World';
    
    end;
    View Code

    以上会输出Hello World,因为是传址,修改的是原来的A

    (2)无任何修饰符

    var
    
    s: string;
    
    begin
    
    S := 'Hello';
    
    ChangeS(s);
    
    ShowMessage(S);
    
    end;
    
    // ChangeS定义
    
    procedure TForm1.ChangeS(A: string);
    
    begin
    
    A := A + 'World';
    
    end;
    View Code

    以上会输出Hello,因为方法ChangeS其实是创建了一个新的A,而输出的还是原来的A,值并没有改变

    (3)out修饰符

    var
    
    s: string;
    
    begin
    
    S := 'Hello';
    
    ChangeSOut(s);// 此时S的值是'Hello,'而非'Hello,World'!,在过程Hello中的S的原始值被丢弃了
    
    ShowMessage(S);
    
    end;
    
    // ChangeSOut定义
    
    procedure TForm1.ChangeSOut(out A: string);
    
    begin
    
    A := A + 'World';
    
    end;
    View Code

    以上会输出World,out仅仅接受返回的值,对out的任何输入都会被忽略。同时out传递给过程的实际参数不必进行初始化,比如对ChangeSOut的调用:

    Var
    
    Tmp: string;
    
    Begin
    
    ChangeSOut(Tmp);//编译也可以通过
    
    End;
    View Code

    (4)Const修饰符

    Const修饰的参数传入之后不允许修改

    如果在过程中修改参数会报错,比如:

    Procedure xxxx.TestConst(const A: String);
    
    Begin
    
    A := ’ss’; //企图修改const修改的参数,会报错
    
    End;
    View Code

    使用LeftStr,RightStr,MidStr截取字符串

    如果要使用LeftStr,RightStr,MidStr必需引用系统单元StrUtils; 声明变量Str:string; Str:=HelloWorld; 1,LeftStr(Str,2)=He;//从Str字符串变量的最左边(第一个字符包括第一个字符)开始截取2个字符; 2,RightStr(Str,2)=ld;//从Str字符串变量的最右边(第一

    如果要使用LeftStr,RightStr,MidStr必需引用系统单元StrUtils;

    声明变量Str:string;

    Str:=HelloWorld;

    1,LeftStr(Str,2)=He;//从Str字符串变量的最左边(第一个字符包括第一个字符)开始截取2个字符;

    2,RightStr(Str,2)=ld;//从Str字符串变量的最右边(第一个字符包括第一个字符)开始截取2个字符;

    3,MidStr(Str,2,2)=el;//从Str字符串变量的中第2个字符开始取长度为2个字符的字符串;

    另外有一个函数Copy

    4,Copy(Str,2,2)=el;//从Str字符串变量的中第2个字符开始取长度为2个字符的字符串;(类似于MidStr);

    Delphi中String与PAnsiChar转换

    在application.messagebox()函数中的第一个参数要用到PAnsiChar。
    所有的原生字符串类型String转PAnsiChar都需要经过AnsiString过渡
    strAnsi:= PAnsiChar(AnsiString(str));

    PChar与String互转

    Delphi PChar与String互转
    1.String转化成PChar
    
    例:
    
    var
    
      str: string;
    
      pStr:PChar;
    
    ...
    
    pStr := PChar(str);
    PChar := PChar(string);
     
    
    2.PChar转String
    
    例:
    
    var
    
      pStr:PChar;
    
      str:string;
    
    ...
    
    str := strPas(pStr);
    string := strPas(PChar);
    View Code

    delphi String 与 Stream的互转

    stream1   :=   TStringStream.create(str);   
        
    str   :=   TStringStream(stream1).DataString;
     
    Stream 是抽像类,需要转换成TMemoryStream才能进行操作
    View Code

    英文字母大小写转换

    function UpperCase(const S: string): string;转大写
    
    function LowerCase(const S: string): string;转小写
    View Code

    delphi中double或float转Integer实践

    var
    
       d :double;
    
    1.用int(d)或integer(d)强制转换,均无法编译
    
    2.先FloatToStr,再StrToInt时,当有小数的情况就会发生错误
    
    可行的方法是:先去掉小数部分,再强制转换
    
    integer(Trunc(d));
    
    注:Trunc不会进位。
    View Code

    delphi字符串内多个空格合为一个空格

    //delphi字符串内多个空格合为一个空格
    Function More2OneSpace(aStr: String): String;
    Var
      i: Integer;
      AWideStr: WideString;
    Begin
      AWideStr := Trim(aStr);
      Result := Copy(AWideStr, 1, 2);
      //目标串的最后一个字符,利用栈来消除多余的空格
      For i := 3 To Length(AWideStr) Do//www.delphitop.com
      Begin
        If (AWideStr[i] <> ' ') Or (RightStr(Result, 1) <> ' ') Then
        Begin
          Result := Result + AWideStr[i];
        End;
      End;
    End; 
    View Code

    将string转化为pwidechar,怎样给pwidechar分配空间,怎样删除pwidechar所占用的空

    ---------1--------乱写的,呵呵
    var
      S: string
      P: PWideChar;
    begin
      S := 'Hello world';
      P := PWideChar(PChar(S));
    end;
    -----------2----------------
    var
     S:string;
     P:pwidechar;
    begin
    S:='hello world';
    copymemory(P,@string[1],length(string));
    
    end;
    ------------3----------
    pName,pPassWord,pGroup,pMemo:PWideChar;
    begin
    Result:='其它错误';
    getmem(pName,1024);
    getmem(pPassWord,1024);
    getmem(pMemo,1024);
    StringToWideChar(name,pname,1024);
    StringToWideChar(Password,pPassWord,1024);
    StringToWideChar(Memo,pMemo,1024);
    //我写的一段程序。正确运行通过。
    
    ?    
    freemem(parm_err,1024);
    freemem(pName,1024);
    freemem(pPassWord,1024);
    freemem(pMemo,1024);
    //删除pwidechar所占用的空间?
    ---------------4----------
    var
      s,s1: string;
      pw: PWideChar;
    begin
      s:='hello world';
      GetMem(pw,2*length(s)+2);
      pw:=StringToWideChar(s,pw,length(s)+2);
      s1:=WideCharToString(pw);
      edit1.Text:=s1;
      freemem(pw);
    end;
    -------------5---------
    标准做法:
    var
      s:sting;
      pwc:PWidechar;
      len:integer;
    begin
      s:='abcdefg';
      len:=length(s)+1;
      pwc:=AllocMem(len*sizeof(widechar));
      stringtowidechar(s,pwc,len);
      showmessage(widechartostring(pwc));
      FreeMem(pwc);
    end;
    ----------------正确的做法------
    大家对STRINGTOWIDECHAR函数有理解上的错误。
    STRINGTOWIDECHAR(S,PW,此处应为PW的空间大小除以2:也就是length(s)+1。)
    View Code

    字符串string和内存流MemoryStream及比特数组byte[]互转比较

    定义string变量为str,内存流变量为ms,比特数组为bt
    1.字符串转比特数组
    (1)byte[] bt=System.Text.Encoding.Default.GetBytes("字符串");
    (2)byte[] bt=Convert.FromBase64String("字符串");
    2.字符串转流
    (1)MemoryStream ms=new MemoryStream(System.Text.Encoding.Default.GetBytes("字符串"));
    (2)MemoryStream ms=new MemoryStream(Convert.FromBase64String("字符串"));
    3.流转比特数组
    (1)byte[] bt=ms.ToArray();
    (2)MemoryStream ms=new MemoryStream();ms.Write(bt,0,ms.Length);
    4.流转字符串
    (1)string str=Convert.ToBase64String(ms.ToArray());
    (2)string str=System.Text.Encoding.Default.GetString(ms.ToArray());
    5.比特数组转字符串
    (1)string str=System.Text.Encoding.Default.GetString(bt);
    (2)string str=Convert.ToBase64String(bt);
    6.比特数组转流
    (1)MemoryStream ms=new MemoryStream(bt);
    (2)MemoryStream ms=new MemoryStream();ms.Read(bt,0,bt.Lenght);
    可以看出byte[]比较活跃在string和流转化时是个重要的桥梁

    incompatible types

    不相容类型
    
    incompatible: [ ,inkəm'pætəbl ]  
          a. 不相容的,不能并存的,矛盾的
    [名词incompatibleness   副词incompatibly]
    View Code

     字符串string和内存流MemoryStream及比特数组byte[]互转比较

    定义string变量为str,内存流变量为ms,比特数组为bt
    1.字符串转比特数组
    (1)byte[] bt=System.Text.Encoding.Default.GetBytes("字符串");
    (2)byte[] bt=Convert.FromBase64String("字符串");
    2.字符串转流
    (1)MemoryStream ms=new MemoryStream(System.Text.Encoding.Default.GetBytes("字符串"));
    (2)MemoryStream ms=new MemoryStream(Convert.FromBase64String("字符串"));
    3.流转比特数组
    (1)byte[] bt=ms.ToArray();
    (2)MemoryStream ms=new MemoryStream();ms.Write(bt,0,ms.Length);
    4.流转字符串
    (1)string str=Convert.ToBase64String(ms.ToArray());
    (2)string str=System.Text.Encoding.Default.GetString(ms.ToArray());
    5.比特数组转字符串
    (1)string str=System.Text.Encoding.Default.GetString(bt);
    (2)string str=Convert.ToBase64String(bt);
    6.比特数组转流
    (1)MemoryStream ms=new MemoryStream(bt);
    (2)MemoryStream ms=new MemoryStream();ms.Read(bt,0,bt.Lenght);
    可以看出byte[]比较活跃在string和流转化时是个重要的桥梁
    View Code

    E2010 Incompatible types 'Char' and 'AnsiChar' 错误的处理

    E2010 Incompatible types: 'Char' and 'AnsiChar' 错误的处理
    在网上搜了一个ping函数,用到pchar(string),编译时出现这个错误,其实以前也碰到这个问题:
    delphi7版本中的Pcharh函数在delphi2010中使用时,编译时出现错误:E2010 Incompatible types: 'Char' and 'AnsiChar'
    这时可以这样使用: PAnsiChar(AnsiString(string));

    说明:
    在delpin中之前,Char对应的是AnsiChar,PChar对应PAnsiChar,string(未映射成老的ShortString)对应AnsiString;而在delphi2010里,对应的是WideChar,PChar对应PWideChar,string对应UnicodeString
    UnicodeString是delphi2010中出现的新字符串类型,之前没有对应版本;delphi2010中的AnsiString也和之前版本的AnsiString类型有差别(多了两个word,一个表示code page,另一个表示element size),但基本上可以一样用,它与UnicodeString使同相同的管理。如果在delphi2010之前用过tntware套件的话,从没有引用计数的WideString过渡到delphi2010的UnicodeString完全没难度。

  • 相关阅读:
    C# Socket TcpClient 无法从传输连接中读取数据: 远程主机强迫关闭了一个现有的连接。。
    C#编程使用Managed Wifi API连接无线SSID
    中国最精确的电子地图,可以找到你家哦
    利用mysql数据库中的TMD表修复“is marked as crashed and last (automatic?) repair failed”的错误 Database query error
    Google Directions API 中路线编码解析
    c语言 nmealib-0.5.3 学习 简单代码 ,供参考
    【转】IT管理人才必备的十大能力
    【转】10个让人受益的管理原理
    【转】耐心看
    【转】对于移动APP测试的一个小技巧
  • 原文地址:https://www.cnblogs.com/blogpro/p/11345203.html
Copyright © 2011-2022 走看看