顯示具有 字串 標籤的文章。 顯示所有文章
顯示具有 字串 標籤的文章。 顯示所有文章

星期三, 9月 19, 2012

TStringList的AddObject使用方式

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
type
  PMyRec = ^TMyrec;
  TMyRec = record
    s: string;
    i: Integer;
  end;

procedure TForm1.Button1Click(Sender: TObject);
var
  List: TStringList;
  R1,R2: TMyRec;
  str: string;
  i: Integer;
begin
  List := TStringList.Create;

  R1.s := 'abc';
  R1.i := 123;
  str := '我是字符串';
  List.AddObject('1', @R1);           {用 1 表示结构 TMyRec}
  List.AddObject('2', Sender);        {用 2 表示 TButton}
  List.AddObject('3', Self);          {用 3 表示 TForm1}
  List.AddObject('4', Pointer(str));  {用 4 表示 String}

  for i := 0 to List.Count - 1 do
  begin
    case StrToIntDef(List[i], 0) of
      1: begin
           R2 := PMyRec(List.Objects[i])^;
           ShowMessageFmt('%s,%d', [R2.s, R2.i]);       {abc,123}
         end;
      2: ShowMessage(TButton(List.Objects[i]).Caption); {Button1}
      3: ShowMessage(TForm1(List.Objects[i]).Text);     {Form1}
      4: ShowMessage(PChar(List.Objects[i]));           {我是字符串}
    end;
  end;

  List.Free;
end;

end.

字串還是要用record的方式
type
  TStringRec = record
    s: string;
  end;
  PStringRec = ^TStringrec;

implementation

{$R *.dfm}
procedure AddAllFetchParamList(AllFetchParamList1: TStringList; sFinalDate1, sNo1:string);
var
  FindIndex : integer;
  sRec      : PStringRec;
  tmpStr    : string;
begin
  FindIndex := AllFetchParamList1.IndexOf(sFinalDate1);
  if FindIndex>=0 then //表示有找到
  begin
    tmpStr := PStringRec(AllFetchParamList1.Objects[FindIndex])^.s+','+sNo1;
    PStringRec(AllFetchParamList1.Objects[FindIndex])^.s := tmpStr;
  end else begin
    new(sRec);
    sRec.s := sNo1;
    AllFetchParamList1.AddObject(sFinalDate1, TObject(sRec));
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  sl: TStringList;
  i: integer;
begin
  sl:= TStringList.Create;
  try
    AddAllFetchParamList(sl, '2011/01/01', '1');
    AddAllFetchParamList(sl, '2011/01/01', '2');
    AddAllFetchParamList(sl, '2011/03/01', '3');
    AddAllFetchParamList(sl, '2011/01/01', '4');
    AddAllFetchParamList(sl, '2011/03/01', '5');
  finally
    for i := 0 to sl.Count-1 do
      Dispose(PStringRec(sl.Objects[i]));
    sl.Free;
  end;
end;

TStringList可以以特定字元做分割及排除空白即分割的情況

var
  ASource: PChar;
  AStr: String;
  astr1: string;
  ACount,i: Integer;
  AStrings: TStringList;
begin
  ASource := 'WorkerW||tooltips_class32||NotifyWnd||MSCTFIME UI||IME||ComboLBox||Auto-Suggest Dropdown||ATL:00409BA8||#43||';
  AStrings := TStringList.Create;
  Memo1.Clear;
  try



  ACount := ExtractStrings(['|'], [' ','#','.'], ASource, AStrings);
    For i:=0 to ACount-1 do
    begin
            Memo1.Lines.Add(AStrings[i]);
  end;

星期一, 9月 05, 2011

將數字轉成容量大小或貨幣的字串(3位數一個逗點)

FormatFloat('###,###,###,##0',iFileSize);

星期四, 4月 24, 2008

將組合字串還原存進TStringList陣列的方法


procedure GetSetData(CombinedStr:String;var sl:TStringList);
var
s : String;
p,l : integer;
begin
sl.Clear;
l:=Length(CombinedStr);
if l=0 then exit;
p:=1;
while p > 0 do
begin
p:=Pos(',,,',CombinedStr);
if p > 0 then
begin
s:=Copy(CombinedStr,1,p-1);
sl.Add(s);
CombinedStr:=Copy(CombinedStr,p+3,Length(CombinedStr));
end;
end;
if Length(CombinedStr) > 0 then
begin
sl.Add(CombinedStr);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
mysl : TStringList;
begin
mysl := TStringList.Create;
try
GetSetData('oo,,,ertff,,,wett' ,mysl);
caption := mysl[0]+'__'+mysl[1]+'__'+mysl[2];
finally
mysl.Free;
end;
end;

星期日, 3月 16, 2008

判斷字串是否為整數

Str:string;
if StrToIntDef(Str,-1)=-1 then
Str 不是數字。

星期五, 3月 07, 2008

將涵有半型及全型字串轉為全型字串


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
function AsciiToAlpha(Source: String): String;
const
Alpha: array[32..126] of String = ( ' ', '!', '”','#' ,'$' ,'%','&' ,'’' ,'(' ,')','*','+', ',',
'-', '.', '/', '0', '1', '2', '3', '4', '5', '6','7', '8', '9',
':', ';', '<', '=', '>', '?', '@' , 'A', 'B', 'C', 'D', 'E', 'F',
'G', 'H', 'I', 'J','K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '〔', '\', '〕', '︿','_', '’',
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h','i', 'j', 'k', 'l', 'm',
'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v','w','x','y','z',
'{', '|', '}', '~'
);
ASCII: array[32..126] of String = (
' ', '!', '"','#' ,'$' ,'%','&' ,'`' ,'(' ,')','*','+', ',',
'-', '.', '/', '0', '1','2', '3', '4', '5', '6','7', '8', '9',
':', ';','<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E','F',
'G', 'H', 'I', 'J','K', 'L', 'M', 'N', 'O','P', 'Q', 'R', 'S',
'T','U', 'V', 'W', 'X', 'Y','Z', '[', '\', ']', '^','_', '`',
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x','y','z',
'{', '|', '}', '~'
);
var
w:WideString;
ret:WideString;
i:integer;
begin
w:= Source;
i:=1;
ret := '';
for i := 1 to length(w) do
begin
if w[i] > #128 then
begin
ret := ret+ w[i];
end else begin
if ((Ord(w[i]) >=(32)) and (Ord(w[i])<=(126))) then
begin
ret := ret+ Alpha[ ord(w[i]) ];
end;
end;
end;
result := ret;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
caption := AsciiToAlpha('YAO');
end;

end.

星期四, 9月 20, 2007

將字串有空白的地方皆去除掉

tmpString := StringReplace(tmpString,' ','',[rfReplaceAll]);

字串基本處理

1CompareStr 比較兩字串的大小(大小寫視為不同),傳回第一個不相同字元 ASCII 碼的差,若字串完全相同,則傳回 0 (字串的編號從 1 開始)。

function CompareStr(const S1, S2 : string) : Integer;

傳回結果:

當 S1>S2 傳回大於 0 的整數

當 S1<S2 傳回小於 0 的整數

當 S1=S2 傳回 0

範例:

S1:='Delphi 6.0';

S2:='delphi 6.0';

if CompareStr(S1,S2)<>0 then

showMessage('大小寫被視為不同的!');

2CompareText比較兩字串的大小(大小寫視為相同),傳回第一個不相同字元 ASCII 碼的差

function CompareText(const S1, S2:string) : Integer;

傳回結果:

當 S1>S2 傳回大於 0 的整數

當 S1<S2 傳回小於 0 的整數

當 S1=S2 傳回 0

範例:

S1:='Delphi';

S2:='delphi';

ResultFlag:=CompareText(S1,S2);

if ResultFlag <>

ShowMessage('Delphi <>

else if ResultFlag > 0 then

ShowMessage('Delphi > delphi')

else

ShowMessage('Delphi = delphi');

{Delphi = delphi}

3Length傳回字串 S 的長度

function Length(S) : Integer;

範例:

S:='Delphi 6.0 讚 '; //中文算兩個Bytes,長度包含空白

ShowMessage(IntToStr(Length(S)));

{14}

4Concat傳回字串相加的結果。使用字串相加(+)運算子,亦有相同的效果,且執行速度較快

function Concat(s1 [, s2, ..., sn ] : string) : string;

範例:

S1:='今天';

S2:='下雨';

ShowMessage(Concat(S1, S2));

{今天下雨}

5Insert將 Source 字串插入 S 字串的第 count 個字元位置(字串的編號從 1 開始)

procedure Insert(Source : string; var S : string; Index : Integer);

範例:

S1:='I Love you!';

S2:=' don''t';

insert(S2, S1, 2);

showmessage(S1);

{I don't Love you!}

6Copy傳回 S 字串的第 Index 字元起,拷貝 Count 個字元(字串的編號從 1 開始)

function Copy(S; Index, Count:Integer) : string;

範例:

S:='Delphi 2006 is good??!';

S:=Copy(S, 1, 11);

ShowMessage(S);

{Delphi 2006}

7Delete將 S 字串從第 Index 字元開始,刪除 Count 個字元(字串的編號從 1 開始)

procedure Delete(var S : string; Index, Count : Integer);

範例:

S:='Delphi is good??!';

Delete(S, 15, 2);

ShowMessage(S);

{Delphi is good!}

8Pos傳回 Substr 字串於 S 字串的開始位置(字串的編號從 1 開始)

function Pos(Substr : string; S : string) : Integer;

範例:

S:=' Delphi is good ';

while Pos(' ', S)>0 do

begin

i:=Pos(' ', S);

showmessage(inttostr(i));

S[i]:='_';

end;

{1, 8, 11, 16, 17}

9Trim清除字串前後的空白

function Trim(const S : string) : string;

範例:

S1:=' Delphi 6.0 ';

ShowMessage(Trim(S1));

{'Delphi 6.0'}

10TrimLeft清除字串左邊的空白

function TrimLeft(const S : string) : string;

範例:
S1:=' Delphi 6.0 ';

ShowMessage(TrimLeft(S1));

{'Delphi 6.0 '}

11TrimRight 清除字串右邊的空白

function TrimRight(const S : string) : string;

範例:

S1:=' Delphi 6.0 ';

ShowMessage(TrimRight(S1));

{' Delphi 6.0'}