siruri de caractere Compararea - cum?
Interesat de această întrebare - cum să compare în mod corespunzător reciproc la egalitate de șir?
Am compara, de obicei, modul de modă veche ca S1 = S2. uneori, aduc eu un registru prin LowerCase.
Dar am observat că în șir VCL iskhodnikak adesea este comparat cu nu =. și cu funcții CompareStr de ajutor. AnsiCompareStr. AnsiCompareText și altele asemenea.
Deci, ce amenință compararea S1 = S2, și cum să compare corect siruri de caractere?
AnsiCompareStr compară locale date. CompareStr să nu funcționeze pe alfabete naționale
> Cum de a compara siruri de caractere corect?
S1 = S2
orice altceva este legat la compararea textului. deoarece linia este de tipul unei variabile
Dacă numai pentru egalitate și fără tek.lokali, versiunea S1 = S2 este suficientă.
comparații caz sensibile cu privire la mai puțin / egal / mai mare cu excepția tek.lokali - CompareStr
CompareText - registrone comparație sensibil la mai mică / egală / mai mare cu excepția tek.lokali
comparații caz sensibile cu privire la mai puțin / egală mai mare tek.lokali / considerând - AnsiCompareStr
AnsiCompareText - registrone comparație sensibil la mai mică / egală mai mare tek.lokali / luând în considerare.
Ce este „corect“ - este de până la tine în fiecare caz.
„“ ABC și „ABC # XA0; „- acestea sunt diferite sau aceeași linie?
Ie dacă vreau să compare caracter cu caracter la egalitate - metoda S1 = S2 destul de lucru?
Și încă confuz ce să CompareStr folosit funcția scris în limbaj de asamblare, dar pentru AnsiCompareStr - funcția WinAPI.
> Ie dacă vreau să compare caracter cu caracter privind egalitatea
> - metoda S1 = S2 destul de lucru?
dar ce îndoială? desigur
> Și încă confuz ce funcția CompareStr este utilizat,
> Scris în limbaj de asamblare, dar pentru AnsiCompareStr - funcția
> WinAPI
De ce ezita? CompareString - locale ea a dat doar poate compara
Concentrați nu, aici avem nevoie, de asemenea, cu excepția TRIM comparație insensibil.
Iată un exemplu fragment de cod:
const
# XA0; PARAM_Username = "user_name";
# XA0; PARAM_Password = "parola";
GetParamValue funcția (Params: TStrings; const ParamName: string; Erase: boolean = false): string;
var
# XA0; i: integer;
începe
# XA0; rezultat: = "";
# XA0; pentru i: = Params.Count -1 downto 0 do
// si poate fi scris ca aceasta
// # XA0; dacă Params.Names [i] = ParamName
# XA0; # XA0; dacă # XA0; 0 = AnsiCompareText (Params.Names [i], ParamName)
# XA0; # XA0, apoi începe
# XA0; # XA0; # XA0; rezultat: = Params.ValueFromIndex [i];
# XA0; # XA0; # XA0; dacă Erase
# XA0; # XA0; # XA0, apoi Params.Delete (i);
# XA0; # XA0; # XA0; pauză;
# XA0; # XA0; end;
se încheie;
Înțelegeți acum - asta e de mirare am vtulit AnsiCompareText - era suficient și o comparație simplă :)
> A fost de ajuns și o simplă comparație
a fost de ajuns și Params.IndexOfName)
Ștergeți ceea ce pentru un timp - eu nu înțeleg funcția trebuie să returneze o valoare, și șterge - o procedură separată (deci, dacă doriți să eliminați din parametrii)
Acest lucru se datorează faptului că funcția utilizează AnsiPos funcția strpos și CompareString. destinate utilizării cu siruri de caractere PChar.
Ștergeți ceea ce pentru același timp - pentru a separa parametrii prelucrate de neprocesat. De exemplu, trebuie doar sa stii parametrii unui nume de utilizator - este suficient și valorile [ParamName], dar uneori trebuie să introduceți un nume de utilizator într-un singur domeniu - și ceilalți parametri din nota.
Memorie: 0,75 MB
Timpul: 0,029 c