- 数据类型转化
1.1. 数值和字符串转化
Procedure Str(X [: Width [ : Decimals ]]; var S);
将数值X按照一定格式转化成字符串S。Width指定S的总长度,Decimals指定小数点后的位数。
EX: Str(12.2 : 6 : 2 , S); //S=’ 12.20’;
Procedure Val(S ; Var V; var Code : Integer);
将字符串S转化为数值V。如果不能转化,则Code返回第一个非法字符的位置。
EX: Val(’12.00’ , V , Code); //Code返回’.’的位置3;
1.2. 整数和字符串转化
Function IntToStr(Value : Integer) : String ;overload;
Function IntToStr(Value : Int64) : String ;overload;
第一个用于32Bit整数,第二个用于64Bit整数。
Function StrToInt(const S : String) : Integer;
Function StrToInt64(const S : String) : Int64;
如果S包含非数字字符,则产生异常,但是S可以是十六进制表示方法,如$A,则返回10。
Function StrToIntDef(const S : String; Default : Integer): Integer;
Function StrToInt64Def(const S : string; Default : Int64):Int64;
如果S非法,则返回Default指定的默认值,不产生异常。
Function TryStrToInt(const S : String; out Value : Integer) : Boolean;
Function TryStrToInt64(const S : String; out Value : Int64) : Boolean;
转化得到的整数保存在输出参数Value中,不能转化则返回false。
Function IntToHex(Value : Integer; Digits : Integer) : String ; overload;
Function IntToHex(Value : Int64; Digits : Integer) : String ; overload;
将十进制整数转化成二进制整数,结果用字符串表示。
Function HexToBin(Text , Buffer : PChar; BufSize : Integer) : Integer;
将十六进制整数转化成二进制,结果用字符串表示,保存在Buffer中。
1.3. 实数和字符串转化
Function FloatToStr(Value : Extended) : String;
Function CurrToStr(Value : Currency) : String;
Function FloatToStrF(Value : Extended; Format : TFloatFormat; Precision, Digits : Integer) : String;
Function FormatFloat(const Format : String; Value : Extended) : String;
Function FloatToText(Buffer : PChar; const Value; ValueType : TFloatValue; Format : TFloatFormat; Precision, Digits : Integer) : Integer;
Function CurrToStrF(Value : Currency; Format : TFloatFormt; Digits : Integer) : String;
Function FormatCurr(const Format : String; Value : Currency) : String;
指定格式。
Function StrToFloat(const S : String) : Extended;
Function StrToCurr(const S : String) : Currency;
字符串转化为实数。
另外:StrToFloatDef , StrToCurrDef , TryStrToFloat , TryStrToCurr
1.4. 实数子类型相互转化
Function FloatToCurr(const Value : Extended) : Currency;
1.5. 布尔类型和字符串转化
Function StrToBool(const S : String) : Boolean;
Function BoolToStr(B : Boolean; UseBoolStrs : Boolean = False) : String;
- 字符串处理
2.1字符串常用过程及函数
字符串的索引是从1开始
Function Length(S) : Integer;
Procedure SetLength(var S; NewLength : Integer);
Procedure SetString(var S : String; buffer :PChar; len : Integer);
设置一个字符串的内容(从buffer复制)和长度。
Function Pos(Substr : String; S : String) : Integer;
取得字符串起始位置
Function StringOfChar(Ch : Char; Count : Integer) : String;
用Count个Ch合成一个字符串。
Function DupeString(const AText : String; ACount : Integer) : String;
用ACount个AText合成一个字符串。
Function Concat(s1 [, s2 , … , sn] : String) : String;
Procedure Insert(Source : String; var S : String; Index : Integer);
Function Copy(S; Index, Count : Integer) : String;
Function StringReplace(const S, OldPattern, NewPattern : String; Flags : TReplaceFlags) : String;
用NwePattern替换S中的子字符串OldPattern。
Procedure Delete(var S : String; Index, Count : Integer);
Procedure UniqueString(var str : String); overload;
Porcedure UniqueString(var str : WideString); overload;
指定字符串只有一个引用。
Function WrapText(const Text, BreakStr : String; nBreakChars : TSysCharSet; MaxCol : Integer) : String; overload;
Function WrapText(const Text : String, MaxCol : Integer =45) : String; overload;
分割一个字符串。MaxCol表示一行的最大长度,BreakStr表示在每行末尾要插入的分隔符,如果使用第二种格式,则插入回车换行符。它遇到nBreakChars某字符就分割一次,如果使用第二种格式,则检查空格、连字符、跳格符。
Function QuotedStr(const S : String) : String;
用单引号将字符串包裹起来。字符串中的引号会被自动处理。
Function LastDelimiter(const Delimiters, S : String) : Integer;
Delimiters是多个字符的组合,它返回某个字符在S中最后出现的位置。
Function IsDelimiter(const Delimiters, S : String; Index : Integer) : Boolean;
Function CompareStr(const S1, S2 : String) : Integer;
比较两个字符串,区分大小写。
Function SameText(const S1, S2 : String) : Boolean;
Function CompareText(const S1, S2 : String) : Integer;
不区分大小写。
Function LeftStr(const AText : String; ACount : Integer) : String;
取左边部分字符串。
Function RightStr(const AText : String; ACount : Integer) : String;
Function LowerCase(const S : String) : String;
Function UpperCase(const S : String) : String;
Function MidStr(const AText : String; const AStart : Integer) : String;
取得部分字符串,等价于Copy。
Function ReverseString(const AText : String) : string;
翻转字符串。
Procedure Str(X [ : Width [ : Decimals ]]; var S);
格式化一个字符串并保存到S。
Function Trim(const S : String) : String; overload;
Function Trim(const S : WideString) : WideString; overload;
去掉字符串头尾的空格和控制字符。
2.2 和字符串相关的类TStrings
TStrings是字符串列表对象的基类,是一个抽象类。
重要属性:
Property CommaText : String;
按照system data format格式,在字符串列表和字符串之间转换。
字符串列表->字符串:
所有字符串被逗号分割;
如果字符串中包含空格、逗号、双引号,则该字符串头尾会加上双引号;
字符串中的双引号被自动重复。
字符串->字符串列表:
不在双引号中的空格、逗号是分隔符;
连续的逗号分隔符会生成空字符串;
逗号分隔符前后的空格分隔符不作为分隔符,被忽略。
Property DelimitedText : String;
Property Delimiter : Char;
Property QuoteChar : Char;
按照Delimiter和QuoteChar在字符列表和字符串之间转换。当Delimiter为逗号,QuoteChar是双引号时,DelimitedText和CommaText完全一样。
Property Text : String;
在列表各项的末尾加上回车换行符进行字符串列表和字符串之间的转换。
Property Name[Index : Integer] : String;
当列表中字符串是”Name=Name”格式时,得到Name。只读属性。
Property Value[const Name : String] : String;
当列表中字符串时”Name=Value”格式时,得到Value。
Property String[Index : Integer] : String; default;
引用第Index项字符串。
Property Object[Index : Integer] : TObject;
引用第Index项字符串关联的对象。
重点方法:
Function AddObject(const S : String; AObject : TObject) : Integer; virtual;
将一个具有关联对象的字符串增加到列表项,返回其放置的位置。
Procedure AddStrings(Strings : TStrings); virtual;
增加一个字符串列表的所有字符串到末尾。
Function Equals(Strings : TStrings) : Boolean;
比较两个列表,不比较字符串关联的对象。
Procedure Exchange(Index1, Index2 : Integer); virtual;
交换两个项的位置。
Procedure LoadFromFile(const FileName : String); virtual;
Procedure SaveToFile(const FileName : String); virtual;
从文件读取/保存列表项,文件中每行对应列表中每项。
Procedure LoadFromStream(Stream : TStream); virtual;
Procedure SaveToStream(Stream : TStream); virtual;
将流读到Text属性/保存到流,然后转化为列表项。回车符或换行符或二者任意组合作为分割符。
Procedure Move(CurIndex, NewIndex : Integer); virtual;
将CurIndex处列表项移到NewIndex处。
2.3 TStringList
TStringList是TStrings的直接子类。它实现了TStrings的所有抽象方法。
重要属性:
Property CaseSensitive : Boolean;
是否区分大小写。
Property Sorted : Boolean;
是否对列表排序,默认是false。为True时按升序排列。
Property Duplicates : TDuplicates;
当列表被升序排列(包括按升序插入、Sorted=True 或者调用Sort 方法等)后,用户试图插入和已有列表项重复的字符串时作何处理。
Type TDuplicates = ( dupIgnore , dupAccept , dupError );
分别是不能插入、允许插入、不能插入且触发异常。
重点方法:
Procedure Sort ; virtual;
将列表项按升序排列。
Function Find(const S : string; var Index : Integer) : Boolean ; virtual;
当列表被升序排列(包括按升序插入、Sorted=True 或者调用Sort 方法等,在非升序状态下,该方法总是返回False)后,查找S 在列表中是否存在,Index 返回位置。一般不使用这个方法,而使用IndexOf。
procedure CustomSort(Compare: TStringListSortCompare); virtual;
type TStringListSortCompare = function(List : TStringList; Index1, Index2 : Integer) : Integer;
自定义排序方法。规则如下:如果Index1 处字符串应该在Index2 之前,应返回负数;如果相等,应返回0;如果应该在Index2 之后,应返回正数。
两个事件:
Property OnChange : TNotifyEvent;
Property OnChanging : TNotifyEvent;
列表变化后/前触发。