2013-06-03 8 views
5

वहाँ तरीके का एक गुच्छा आप आधुनिक डेल्फी में तार (जैसे कि 2010-XE3) की तुलना कर सकते हैं:डेल्फी स्ट्रिंग कंपर्सन फ़ंक्शंस के बीच क्या अंतर है?

  • '< =' ऑपरेटर जो UStrCmp/lstrcmp
  • CompareStr
  • AnsiCompareStr
ले कर जाता है

क्या कोई सिद्धांत रूप में उन तरीकों के वर्णन के बारे में बता सकता है (या इंगित करता है)?

अब तक मुझे लगा है कि AnsiCompareStr विंडोज पर तुलनास्ट्रिंग कॉल करता है, जो एक "पाठ्यचर्या" तुलना है (यानी खाता यूनिकोड संयुक्त वर्ण आदि लेता है)। सरल तुलना एसएसआर ऐसा नहीं करता है और इसके बजाए एक बाइनरी तुलना करता है।

लेकिन तुलना एसआरटीआर और यूएसटीसीएमपी के बीच क्या अंतर है? UStrCmp और LStrCmp के बीच? क्या वे सभी समान परिणाम उत्पन्न करते हैं? क्या वे परिणाम डेल्फी के संस्करणों के बीच बदलते हैं?

मैं पूछ रहा हूं क्योंकि मुझे एक तुलना की आवश्यकता है जो हमेशा एक ही परिणाम उत्पन्न करेगी, ताकि डेल्फी के एक संस्करण के साथ बनाए गए ऐप में इंडेक्स दूसरे के साथ बनाए गए कोड के अनुरूप बने रहें।

उत्तर

7

AnsiCompareStr खाते में स्थान लेने के रूप में निर्दिष्ट किया जाता है, और डेल्फी संस्करण की परवाह किए बिना समान परिणाम वापस चाहिए, लेकिन Windows संस्करण और/या सेटिंग के आधार पर अलग-अलग परिणाम वापस आ सकते हैं .. CompareStr एक शुद्ध बाइनरी तुलना है: "तुलना ऑपरेशन है प्रत्येक चरित्र के 16-बिट क्रमिक मूल्य के आधार पर और वर्तमान लोकेल से प्रभावित नहीं है "(CompareStr(const S1, S2: string) अधिभार के लिए)। UStrCmp शुद्ध बाइनरी तुलना का भी उपयोग करता है: "स्ट्रिंग्स को क्रमिक मानों के अनुसार तुलना की जाती है जो स्ट्रिंग बनाने वाले पात्रों को बनाते हैं।" तो बाद के दो के बीच कोई अंतर नहीं होना चाहिए। जिस तरह से वे परिणाम वापस करते हैं, अलग-अलग होते हैं, इसलिए दो कार्यान्वयन की आवश्यकता होती है (हालांकि एक दूसरे पर भरोसा करना संभव होगा)।

LStrCmp और UStrCmp के बीच मतभेद का सवाल है, LStrCmpAnsiString रों लेता है, UStrCmp लेता UnicodeString रों। यह पूरी तरह से संभव है कि दो वर्ण (चलो कहते हैं ए और बी) को गलत नाम "एएनएसआई" कोड पृष्ठ में < बी के रूप में आदेश दिया गया है, लेकिन यूनिकोड में ए> बी के रूप में आदेश दिया गया है। आपको लगभग हमेशा डेटा के लिए उपयुक्त तुलना का उपयोग करना चाहिए आपके पास।

संबंधित मुद्दे