当前位置 : 主页 > 编程语言 > delphi >

delphi 数据处理

来源:互联网 收集:自由互联 发布时间:2021-06-23
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 )+ ‘ , ‘ )

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?mpæt?bl ]  
      a. 不相容的,不能并存的,矛盾的
[名词incompatibleness   副词incompatibly]
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对应UnicodeStringUnicodeString是delphi2010中出现的新字符串类型,之前没有对应版本;delphi2010中的AnsiString也和之前版本的AnsiString类型有差别(多了两个word,一个表示code page,另一个表示element size),但基本上可以一样用,它与UnicodeString使同相同的管理。如果在delphi2010之前用过tntware套件的话,从没有引用计数的WideString过渡到delphi2010的UnicodeString完全没难度。

网友评论