亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? fstrrep.pas

?? 思微POS連鎖超市管理系統 (商業代碼),幾年前的東西了
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
{其實還可以在FastReplace中先對FindStr進行判斷,如果
FindStr完全是中文的話,直接可以在FastReplace中用
FastPos,這樣可以提高速度。}

unit fStrRep;

interface

type
  TFastPosProc = function(
    const aSourceString, aFindString: string;
    const aSourceLen, aFindLen, StartPos: integer
    ): integer;

function FastReplace(
  var aSourceString: string;
  const aFindString, aReplaceString: string;
  CaseSensitive: Boolean = False): string;

function FastPos(
  const aSourceString, aFindString: string;
  const aSourceLen, aFindLen, StartPos: integer
  ): integer;

function FastPosNoCase(
  const aSourceString, aFindString: string;
  const aSourceLen, aFindLen, StartPos: integer
  ): integer;

implementation

// This TYPE declaration will become apparent later.
//The first thing to note here is that I’m passing the SourceLength and FindL
//ength. As neither Source nor Find will alter at any point during FastReplace
//, there’s no need to call the LENGTH subroutine each time!

function FastPos(
  const aSourceString, aFindString: string;
  const aSourceLen, aFindLen, StartPos: integer
  ): integer;
var
  SourceLen: integer;
begin
  // Next, we determine how many bytes we need to
  // scan to find the "start" of aFindString.
  SourceLen := aSourceLen;
  SourceLen := SourceLen - aFindLen;
  if (StartPos - 1) > SourceLen then begin
    Result := 0;
    Exit;
  end;
  SourceLen := SourceLen - StartPos;
  SourceLen := SourceLen + 2;
  // The ASM starts here.
  asm
    // Delphi uses ESI, EDI, and EBX a lot,
    // so we must preserve them.
    push ESI
    push EDI
    push EBX
    // Get the address of sourceString[1]
    // and Add (StartPos-1).
    // We do this for the purpose of finding
    // the NEXT occurrence, rather than
    // always the first!
    mov EDI, aSourceString
    add EDI, StartPos
    Dec EDI
    // Get the address of aFindString.
    mov ESI, aFindString
    // Note how many bytes we need to
    // look through in aSourceString
    // to find aFindString.
    mov ECX, SourceLen
    // Get the first char of aFindString;
    // note how it is done outside of the
    // main loop, as it never changes!
    Mov  Al, [ESI]
    // Now the FindFirstCharacter loop!
    @ScaSB:
    // Get the value of the current
    // character in aSourceString.
    // This is equal to ah := EDI^, that
    // is what the [] are around [EDI].
    Mov  Ah, [EDI]
    // Compare this character with aDestString[1].
    cmp  Ah,Al
    // If they're not equal we don't
    // compare the strings.
    jne  @NextChar
    // If they're equal, obviously we do!
    @CompareStrings:
    // Put the length of aFindLen in EBX.
    mov  EBX, aFindLen
    // We DEC EBX to point to the end of
    // the string; that is, we don't want to
    // add 1 if aFindString is 1 in length!
    dec  EBX

    // add by ShengQuanhu
    // If EBX is zero, then we've successfully
    // compared each character; i.e. it's A MATCH!
    // It will be happened when aFindLen=1
    Jz @EndOfMatch
    //add end

//Here’s another optimization tip. People at this point usually PUSH ESI and
//so on and then POP ESI and so forth at the end–instead, I opted not to chan
//ge ESI and so on at all. This saves lots of pushing and popping!
    @CompareNext:
    // Get aFindString character +
    // aFindStringLength (the last char).
    mov  Al, [ESI+EBX]
    // Get aSourceString character (current
    // position + aFindStringLength).
    mov  Ah, [EDI+EBX]
    // Compare them.
    cmp  Al, Ah
    Jz   @Matches
    // If they don't match, we put the first char
    // of aFindString into Al again to continue
    // looking for the first character.
    Mov  Al, [ESI]
    Jmp  @NextChar
    @Matches:
    // If they match, we DEC EBX (point to
    // previous character to compare).
    Dec  EBX
    // If EBX <> 0 ("J"ump "N"ot "Z"ero), we
    // continue comparing strings.
    Jnz  @CompareNext

    //add by Shengquanhu
    @EndOfMatch:
    //add end

    // If EBX is zero, then we've successfully
    // compared each character; i.e. it's A MATCH!
    // Move the address of the *current*
    // character in EDI.
    // Note, we haven't altered EDI since
    // the first char was found.
    mov  EAX, EDI
    // This is an address, so subtract the
    // address of aSourceString[1] to get
    // an actual character position.
    sub  EAX, aSourceString
    // Inc EAX to make it 1-based,
    // rather than 0-based.
    inc  EAX
    // Put it into result.
    mov  Result, EAX
    // Finish this routine!
    jmp  @TheEnd
    @NextChar:
//This is where I jump to when I want to continue searching for the first char
//acter of aFindString in aSearchString:
    // Point EDI (aFindString[X]) to
    // the next character.
    Inc  EDI
    // Dec ECX tells us that we've checked
    // another character, and that we're
    // fast running out of string to check!
    dec  ECX
    // If EBX <> 0, then continue scanning
    // for the first character.

    //add by shengquanhu
    //if ah is chinese char,jump again
    jz   @Result0
    cmp  ah, $80
    jb   @ScaSB
    Inc  EDI
    Dec  ECX
    //add by shengquanhu end

    jnz  @ScaSB

    //add by shengquanhu
    @Result0:
    //add by shengquanhu end

    // If EBX = 0, then move 0 into RESULT.
    mov  Result,0
    // Restore EBX, EDI, ESI for Delphi
    // to work correctly.
    // Note that they're POPped in the
    // opposite order they were PUSHed.
    @TheEnd:
    pop  EBX
    pop  EDI
    pop  ESI
  end;
end;

//This routine is an identical copy of FastPOS except where commented! The ide
//a is that when grabbing bytes, it ANDs them with $df, effectively making the
//m lowercase before comparing. Maybe this would be quicker if aFindString was
// made lowercase in one fell swoop at the beginning of the function, saving a
//n AND instruction each time.

function FastPosNoCase(
  const aSourceString, aFindString: string;
  const aSourceLen, aFindLen, StartPos: integer
  ): integer;
var
  SourceLen: integer;
begin
  SourceLen := aSourceLen;
  SourceLen := SourceLen - aFindLen;
  if (StartPos - 1) > SourceLen then begin
    Result := 0;
    Exit;
  end;
  SourceLen := SourceLen - StartPos;
  SourceLen := SourceLen + 2;
  asm
    push ESI
    push EDI
    push EBX

    mov EDI, aSourceString
    add EDI, StartPos
    Dec EDI
    mov ESI, aFindString
    mov ECX, SourceLen
    Mov  Al, [ESI]

    //add by shengquanhu:just modified the lowercase 'a'..'z'
    cmp Al, $7A
    ja @ScaSB

    cmp Al, $61
    jb @ScaSB
    //end------------------------------------------

    // Make Al uppercase.
    and  Al, $df

    @ScaSB:
    Mov  Ah, [EDI]

    //add by shengquanhu:just modified the lowercase 'a'..'z'
    cmp Ah, $7A
    ja @CompareChar

    cmp Ah, $61
    jb @CompareChar
    //end------------------------------------------

    // Make Ah uppercase.
    and  Ah, $df

    @CompareChar:
    cmp  Ah,Al
    jne  @NextChar
    @CompareStrings:
    mov  EBX, aFindLen
    dec  EBX

    //add by ShengQuanhu
    Jz   @EndOfMatch
    //add end

    @CompareNext:
    mov  Al, [ESI+EBX]
    mov  Ah, [EDI+EBX]

    //add by shengquanhu:just modified the lowercase 'a'..'z'
    cmp Ah, $7A
    ja @LowerAh

    cmp Al, $61

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩av在线播放中文字幕| 亚洲少妇最新在线视频| 高清不卡在线观看av| 一区二区三区av电影| 精品国产乱码久久久久久久久| 粉嫩av亚洲一区二区图片| 亚洲成人自拍一区| 中文字幕欧美三区| 日韩一区二区三区精品视频| 91看片淫黄大片一级在线观看| 久久99久久精品| 亚洲高清免费在线| 国产精品女同一区二区三区| 这里只有精品电影| 色哟哟精品一区| 国产成人免费视频网站| 久久99热狠狠色一区二区| 一区二区三区在线影院| 1区2区3区精品视频| 久久新电视剧免费观看| 欧美一区二区视频在线观看| 在线亚洲免费视频| 国产成人免费高清| 国产美女娇喘av呻吟久久| 日韩黄色在线观看| 五月天久久比比资源色| 亚洲一线二线三线视频| 成人欧美一区二区三区1314| 国产日韩在线不卡| 久久久久久久久久久黄色| 日韩精品一区二区三区四区视频| 欧美另类变人与禽xxxxx| 欧美在线免费观看亚洲| 色88888久久久久久影院按摩 | 久久综合色天天久久综合图片| 欧美另类一区二区三区| 欧美精品在线一区二区三区| 欧美天堂一区二区三区| 欧美日韩一区高清| 欧美日韩国产首页在线观看| 91高清视频在线| 日本黄色一区二区| 欧美日韩在线直播| 6080yy午夜一二三区久久| 欧美日韩国产在线观看| 欧美日韩日日骚| 91精品国产福利| 日韩精品中文字幕在线不卡尤物| 91精品国产综合久久蜜臀| 3d动漫精品啪啪一区二区竹菊| 91精品国产麻豆| 欧美v日韩v国产v| 国产亚洲欧洲一区高清在线观看| 欧美国产激情一区二区三区蜜月| 欧美国产乱子伦| 亚洲卡通欧美制服中文| 一区二区三区91| 秋霞午夜av一区二区三区| 毛片av中文字幕一区二区| 极品美女销魂一区二区三区| 国产精品一二三四| av电影在线观看不卡| 欧美午夜精品一区| 91精品国产高清一区二区三区| 26uuu精品一区二区在线观看| 国产无一区二区| 亚洲精品中文在线| 日韩精彩视频在线观看| 国产成人一区在线| 色94色欧美sute亚洲线路一久| 欧美日韩国产影片| 久久久久国色av免费看影院| 1024成人网色www| 午夜一区二区三区在线观看| 九九精品一区二区| 99视频一区二区| 欧美一级二级在线观看| 国产精品亲子乱子伦xxxx裸| 亚洲一区视频在线| 国产精品一二三| 欧美亚洲综合在线| 久久久久国产精品免费免费搜索| 亚洲日本丝袜连裤袜办公室| 另类专区欧美蜜桃臀第一页| 成人91在线观看| 91精品国产乱| 最新不卡av在线| 麻豆成人久久精品二区三区红| 成人免费观看av| 91精品国产乱码久久蜜臀| 国产精品毛片无遮挡高清| 日韩在线播放一区二区| 成人av在线一区二区| 69堂亚洲精品首页| 成人免费在线视频观看| 狠狠色丁香婷婷综合| 成+人+亚洲+综合天堂| 欧美一区二区成人6969| 亚洲日本欧美天堂| 国产在线播放一区三区四| 欧美日韩在线三级| 中文字幕一区二区三区不卡| 蓝色福利精品导航| 在线观看免费亚洲| 国产精品视频观看| 三级欧美韩日大片在线看| 国产成人aaaa| 精品国产一区二区三区久久影院| 亚洲一区二区三区四区的| 暴力调教一区二区三区| 26uuu久久综合| 免费观看一级特黄欧美大片| 日本韩国一区二区| 国产精品久久久久桃色tv| 青青草原综合久久大伊人精品| 91久久线看在观草草青青| 欧美激情一区二区| 精久久久久久久久久久| 欧美丰满少妇xxxbbb| 亚洲一区二区不卡免费| 色哟哟欧美精品| 亚洲日本在线天堂| 99久久综合国产精品| 国产日产精品1区| 国产综合久久久久影院| 欧美一区二区三区影视| 亚洲va天堂va国产va久| 欧美综合欧美视频| 亚洲女子a中天字幕| 97超碰欧美中文字幕| 中文字幕综合网| 色先锋资源久久综合| 亚洲精品老司机| 色乱码一区二区三区88| 亚洲色图制服丝袜| 91高清在线观看| 亚洲成人一二三| 3d动漫精品啪啪1区2区免费| 青娱乐精品在线视频| 日韩欧美一级片| 精品写真视频在线观看| 久久久久久久久久久黄色| 国产成人在线观看免费网站| 国产精品免费久久| 成人av网址在线| 亚洲欧洲成人av每日更新| 91丨国产丨九色丨pron| 亚洲欧美日韩人成在线播放| 在线观看一区日韩| 亚洲成a人在线观看| 欧美一区二区成人6969| 国产在线麻豆精品观看| 国产日韩欧美激情| 91在线观看地址| 亚洲第一激情av| 日韩一区二区三免费高清| 极品少妇xxxx精品少妇偷拍 | 国产欧美日韩在线观看| 成人精品鲁一区一区二区| 亚洲乱码国产乱码精品精小说 | 久久综合九色综合欧美98| 国产精品1区2区3区在线观看| 国产亲近乱来精品视频| 一本到一区二区三区| 日韩高清在线电影| 国产三级三级三级精品8ⅰ区| 91亚洲国产成人精品一区二三| 亚洲国产人成综合网站| 日韩三级中文字幕| 国产999精品久久| 亚洲欧美另类久久久精品| 日韩亚洲欧美成人一区| 高清成人免费视频| 五月婷婷综合网| 国产精品丝袜在线| 欧美精品99久久久**| 国产一区二区三区免费在线观看| 亚洲私人黄色宅男| 欧美成人性战久久| aaa国产一区| 蜜桃91丨九色丨蝌蚪91桃色| 国产日韩欧美在线一区| 欧美日韩电影一区| 粉嫩aⅴ一区二区三区四区| 亚洲国产成人porn| 国产丝袜美腿一区二区三区| 欧美日韩免费观看一区二区三区 | 9191精品国产综合久久久久久| 国产精品一区一区三区| 亚洲国产精品精华液网站| 国产亚洲精品bt天堂精选| 欧美日韩一区视频| k8久久久一区二区三区| 经典一区二区三区| 天堂久久久久va久久久久| 国产精品福利电影一区二区三区四区| 欧美久久久久久久久久 | 欧美一区二区成人6969| 色偷偷一区二区三区| 国产精品2024|