Összehasonlítva húrok - hogyan

Összehasonlítva húrok - hogyan?

Érdekli az erre a kérdésre - hogyan kell helyesen össze egymással, hogy az egyenlő húr?

Én általában összehasonlítani a régi módon, mint az S1 = S2. Néha hozok egy regisztert keresztül Kisbetus.

De vettem észre, hogy a iskhodnikak VCL húr gyakran hasonlítják nem a =. és segítségével CompareStr funkciókat. AnsiCompareStr. AnsiCompareText és hasonlók.

Tehát mi fenyeget összehasonlítva S1 = S2, és hogyan lehet összehasonlítani húrok helyes?

AnsiCompareStr összehasonlítja az adott locale. CompareStr nem működnek a nemzeti ábécé


> Hogyan lehet összehasonlítani húrok helyes?

S1 = S2

minden más kapcsolódó összehasonlítása a szövegben. mert a vonal a változó típusát

Ha csak egyenlőséget és anélkül tek.lokali, a változata S1 = S2 elegendő.

CompareStr - a kis- és nagybetűk összehasonlítást kisebb / egyenlő / nagyobb kivéve tek.lokali

CompareText - registrone érzékeny képest kisebb / egyenlő / nagyobb kivéve tek.lokali

AnsiCompareStr - a kis- és nagybetűk összehasonlítást kisebb / egyenlő / nagyobb tekintve tek.lokali

AnsiCompareText - registrone érzékeny képest kisebb / egyenlő / nagyobb tekintve tek.lokali.

Mi az a „helyes” - ez rajtad múlik, hogy az egyes esetekben.

„” ABC és „ABC # XA0; „- ezek azonos vagy különböző vonalat?

Ie ha akarom összehasonlítani karakterenként egyenlőségre - az eljárás S1 = S2 működik tökéletesen?

És még mindig zavaros, hogy mit lehet CompareStr használt funkciót írt assembly nyelven, de AnsiCompareStr - WinAPI funkciót.


> Ie ha akarom összehasonlítani karakterenként egyenlőségre
> - az eljárás S1 = S2 elég dolgozik?

de mi kétség? természetesen

> És még mindig zavaros, hogy mit lehet CompareStr funkciót használja,
> Írt assembly nyelven, de AnsiCompareStr - funkció
> WinAPI

Miért habozik? CompareString - épp az imént adott locale lehet összehasonlítani

Focus sem, itt is szükség van TRIM kivéve érzéketlen képest.

Íme egy példa kódot:

const
# XA0; PARAM_Username = "user_name";
# XA0; PARAM_Password = "jelszó";

függvény GetParamValue (Params: TStrings; const ParamName: string; Erase: logikai = false): string;
var
# XA0; i: integer;
kezdődik
# XA0; eredmény: = "";
# XA0; i: = Params.Count -1 downto 0 do
// és felírható, mint ez
// # XA0; ha Params.Names [i] = ParamName
# XA0; # XA0, ha # XA0; 0 = AnsiCompareText (Params.Names [i], ParamName)
# XA0; # XA0, majd kezdődik
# XA0; # XA0; # XA0; eredmény: = Params.ValueFromIndex [i];
# XA0; # XA0; # XA0, ha Erase
# XA0; # XA0; # XA0, majd Params.Delete (i);
# XA0; # XA0; # XA0; szünetet;
# XA0; # XA0; end;
végén;

Most már értem -, hogy vajon én vtulit AnsiCompareText - elegendő volt, és egy egyszerű összehasonlítást :)

> Ez elég volt, és egy egyszerű összehasonlítást

elég volt, és Params.IndexOfName)

Erase mi egy ideig -, nem értem a funkcióját kell vissza értéket, és törölje - külön eljárás (tehát ha el akarja távolítani a paraméterek)

Ez annak a ténynek köszönhető, hogy a függvény AnsiPos StrPos funkció és CompareString. használatra szánt húrok PChar.

Erase minek egyidejűleg - annak érdekében, hogy elválassza a paraméterek feldolgozott feldolgozatlan. Például akkor csak meg kell tudni, hogy a paraméterek a felhasználói név - ez elég és értékek [ParamName], de néha meg kell adnia egy felhasználói nevet egy területen - és a többi paramétert a feljegyzésben.

Memória: 0,75 MB
Idő: 0.029 c

Kapcsolódó cikkek