2010-07-17 4 views
3

나는 약간 혼란스러워하고 계발을 바라고 있습니다.AnsiStrIComp가 Delphi 2010에서 문자열 비교에 실패했습니다.

저는이 프로젝트에서 Delphi 2010을 사용하고 있으며 두 개의 문자열을 비교하려고합니다. 각 문자열의 첫 번째 문자가 비교되고, 디버거에 의한 (sCatName"Automobiles" 경우 즉 PAnsiChar(sCatName)"A"이다) 때문에 코드를 사용해

아래

if AnsiStrIComp(PAnsiChar(sCatName), PAnsiChar(CatNode.CatName)) = 0 then... 

실패.

다른 언어 (예 : 영어 대 일본어) 인 문자열을 비교할 수 있기를 원합니다.

이 경우 일치하는 항목을 찾고 있지만 문자열 정렬 방법을 알 필요가있는 정렬 등의 다른 기능이 있습니다 (보다 작음, 같음,보다 큼).

+0

sCatName은 Delphi 2010에서의 이해를 돕기 위해 string = UnicodeString으로 정의됩니다. 이 특별한 경우에는 함수 매개 변수가 전달됩니다. function ExtractCatagory2Listbox (sCatName : String; TargetLB : TListBox) : Boolean; – TheSteven

답변

5

sCatNameCatNode.CatNamestring (= UnicodeStrings)으로 정의된다고 가정합니다. 그들은 있어야합니다.

문자열을 Null 종료 문자열로 변환 할 필요가 없습니다. 이것은 (대부분) Windows API로 작업 할 때만 필요합니다.

당신이 두 개의 문자열의 평등을 테스트 SameStr(S1, S2) (대소 문자 구분 일치) 또는 SameText(S1, S2) (대소 문자 구분 일치)를 사용하려는 경우, 또는 첫 번째 경우에 단순히 S1 = S2. 문자열 평등에 따라 세 가지 옵션 모두 true 또는 false을 반환합니다.

정렬 순서와 같이 문자의 순서 값을 기준으로 숫자 값을 가져 오려면 CompareStr(S1, S2) 또는 CompareText(S1, S2)을 사용하십시오. 이것들은 음의 정수, 0 또는 양의 정수를 반환합니다.

는 (당신은 Ansi- 기능을 사용할 수 있습니다 : AnsiSameStr, AnsiSameText, AnsiCompareStrAnsiCompareText, 이러한 기능은 현재 로케일을 사용합니다 비 Ansi- 기능을 명시 적으로 사용하는 로케일을 지정, 세 번째, 선택적 매개 변수를 받아 들일 것입니다..)

업데이트

문제의 원인에 대한 레미 Lebeau의 의견을 읽어 보시기 바랍니다.

+0

답장을 보내 주셔서 감사합니다. 문제의 함수에 대해 AnsiCompareText()는 간단한 구현 일뿐만 아니라 작업을 수행하는 것처럼 보입니다. 하지만 PAnsiChar (sCatName)이 문자열 변수를 사용하고 첫 번째 문자 만 반환하는 이유를 알고 싶습니다. – TheSteven

+0

'sCatName'이 문자열이면,'PAnsiChar (sCatName)'은'sCatName'의 널 종료 문자열 표현을 생성하고,이 널 종료 문자열의 첫 문자의 주소 인 포인터를 반환합니다.(Delphi에서'string'은 null로 끝나지 않으므로, 예를 들어 Windows API와 통신 할 때 Delphi 문자열에서 Null로 끝나는 문자열을 만들어야 할 수도 있습니다). –

+0

당신에게 신속하고 상세한 답변을 주셔서 감사합니다. – TheSteven

0

간단한 약 sCatName=CatNode.CatName은 무엇입니까? 그들은 strings면 작동합니다.

+0

대소 문자를 구분하지 않는 비교를 찾고 있습니다. 이 특별한 경우 나는 평등을 검사하고 있습니다. UpperCase (sCatName) = UpperCase (CatNode.Name)는 (이 특정 예제의 경우) 작동하지만 내장 문자열 비교 함수가 더 빠르다는 것을 이해합니다. – TheSteven

+0

@ TheSteven : 예,'SameText (A, B)'는 AnsiUpperCase (A) = AnsiUpperCase (B)보다 빠릅니다. –

+0

'AnsiSameText (A, B)' –

관련 문제