Delphi裡實作類別似於C++ strtok 的函數

來源:互聯網
上載者:User

原地址:http://www.delphi3000.com/articles/article_4028.asp?SK=

這裡加上了一個PartOf函數,使行為和StrTok的一樣。

 

unit Unit1;

interface

  function StrTok(S: string; Tok: string = ''): string;

var
    TokS: string;

implementation

function PartOf(const sData : string; const tok: string): Boolean;
var
    i : Integer;
begin
    for i := 1 to Length(sData) do
    begin
        if sData[i] = tok then
        begin
            Result := True;
            Exit;
        end;
    end;
    Result := False;
end;

//Function To Get Characters From The String
function StrMid(const sData: string; nStart: integer; nLength: integer): string; overload;
begin
    Result := copy(sData, nStart, nLength);
end;

//Function To Get Characters From The String
function StrMid(const sData: string; nStart: integer): string; overload;
begin
    Result := copy(sData, nStart, Length(sData) - (nStart - 1));
end;

//String Tokenizer function
function StrTok(S: string; Tok: string = ''): string;
var
    i, LenTok: integer;
begin
    if not(S = '') then
    begin //New String
        TokS := S;
        result := '';
        Exit;
    end;

    if Tok = '' then
    begin //If No Token
        result := TokS;
        Exit;
    end;

    //LenTok := Length(Tok);
    LenTok := 1;
    for i := 0 to Length(TokS) - LenTok do
    begin
        if PartOf(Tok, StrMid(TokS, i, LenTok)) then
        begin //If Token Found
            result := StrMid(TokS, 1, i - LenTok);
            TokS := StrMid(TokS, i + LenTok {+ 1});
            Exit;
        end;
    end;

    //If Program Reaches Here, Return The Rest Of The String
    result := TokS;
    TokS := '';
end;

{
Therefore, for example, if you defined a string:
var S: string
and set S to 'Hello World'
S := 'Hello World';
and then call StrTok() like so:
StrTok(S);

The procedure will store the string, from now on, calling StrTok() with no S value and a token (such as a space ' '),
the program will return everything in the string up to the token.

EX:
var
    firstWord, secondWord: string
begin
    StrTok(S);
    firstWord := StrTok('', '  ;'#10);  //split with space,semicolon,break; 
    secondWord := StrTok('', ' ;'#10);//split with space,semicolon,break;
end;

//Doing this will break apart the string S at the token (' ') into the first word and the second word.
Good luck and use this code well!
}
end.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.