2010-02-17 12 views
7

मुझे एक प्रोग्राम लिखना होगा जो विभिन्न लंबाई के तारों के माध्यम से ब्राउज़ करेगा और केवल उन लोगों का चयन करें जो मेरे द्वारा परिभाषित सेट से प्रतीकों का उपयोग करके लिखे गए हैं (विशेष रूप से जापानी अक्षरों)। स्ट्रिंग्स में विभिन्न भाषाओं (जर्मन, फ्रेंच, अरबी, रूसी, अंग्रेजी इत्यादि) में लिखे गए शब्द होंगे। जाहिर है कि संभावित पात्रों की बड़ी संख्या है। मुझे नहीं पता कि किस संरचना का उपयोग करना है? मैं अभी डेल्फी 7 का उपयोग कर रहा हूं। क्या कोई सुझाव दे सकता है कि इस तरह के कार्यक्रम को कैसे लिखना है?डेल्फी में यूनिकोड तारों के साथ काम करना 7

उत्तर

12

स्पष्ट रूप से आप डेल्फी 2010 के साथ बेहतर होंगे, क्योंकि डेल्फी 7 में वीसीएल यूनिकोड तारों से अवगत नहीं है। आप डेल्फी 7 में वाइडस्ट्रिंग प्रकारों और वाइडचर प्रकारों का उपयोग कर सकते हैं, और आप एक यूजर इंटरफेस बनाने में मदद के लिए टीएनटी यूनिकोड घटक जैसे घटक सेट को स्थापित कर सकते हैं जो आपके परिणाम प्रदर्शित कर सकता है।

एक बहुत बड़े सेट प्रकार के लिए, टीबीआईटी जैसी बिट सरणी का उपयोग करने पर विचार करें। लंबाई 65536 की एक बिट सरणी प्रत्येक यूटीएफ -16 कोड-पॉइंट को रखने के लिए पर्याप्त होगी। जांच की जा रही है, तो चार एक्स सेट वाई में है, मूल रूप से होगा:

function WideCharsInSet(wcstr:WideString; wcset:TBits):Boolean; 
var 
n:Integer; 
wc:WideChar; 
begin 
result := false; 
for n := 1 to Length(wcstr) do begin 
    wc := wcstr[n]; 
    if wcset[Ord(wc)] then 
     result := true; 
end; 
end; 

procedure Demo; 
var 
wcset1:TBits; 
s:WideString; 
begin 
wcset1 := TBits.Create; 
try 
    // 1157 - Hangul Korean codepoint I found with Char Map 
    wcset1[1157] := true;   
    // go get a string value s: 
    s := WideChar(1157); 
// return true if at least one element in set wcset is found in string s: 
    if WideCharsInSet(s,wcset1) then begin 
     Application.MessageBox('Found it','found it',MB_OK); 
    end; 

finally 
    wcset1.Free; 
end; 

end; 
+0

उत्तर में सभी अच्छी बिट्स +1 करें। bigsets, टीएनटी और डी 7 में यह नहीं करने की सलाह देते हैं। –

+0

मैंने आपके लिए यहां एक और उपयोगी कोड लिखा है, टोफिग –

+0

डेल्फी 2010 में एक महान विशेषता है TStringList क्लास डिस्क से फ़ाइल लोड करने की क्षमता है, बाइट-मार्कर से यूटीएफ 8 या यूटीएफ 16 एन्कोडिंग स्वचालित रूप से निर्धारित करती है, और इसी तरह। यह आपके काम का एक और हिस्सा है, टोफिग, जिसे 2009/2010 की तुलना में डेल्फी के संस्करण पर और अधिक मुश्किल बना दिया जाएगा। –

5

मैं भी डेल्फी 2010 (? क्यों 2009 के साथ अब और परेशान) करने के लिए स्विच करने के लिए सलाह देते हैं!

यदि माइक लिस्केके ​​से Unicode Library के साथ आप अटक गए संभावित मामले में कुछ हद तक सहायक हो सकते हैं।

+0

लिंक अब टूट गया है – CyprUS

+0

@ साइप्रस, तय! –

5

आपके द्वारा वर्णित तरीके से स्ट्रिंग की सरल प्रसंस्करण के लिए, सुझावों से दूर न करें कि आपको नवीनतम कंपाइलर और यूनिकोड सक्षम फ्रेमवर्क में अपग्रेड करना चाहिए। यूनिकोड समर्थन स्वयं अंतर्निहित विंडोज एपीआई द्वारा प्रदान किया जाता है जो कि निश्चित रूप से (सीधे) "डेनफी के" गैर-यूनिकोड "संस्करणों से" यूनिकोड संस्करण "से सुलभ है।

मुझे संदेह है कि यदि आपके प्रश्न में उल्लिखित उद्देश्यों के लिए आपको आवश्यक यूनिकोड समर्थन की आवश्यकता नहीं है तो the JEDI JCL में प्रदान किए गए यूनिकोड समर्थन से प्राप्त किया जा सकता है।

किसी भी दृश्य घटक समर्थन के लिए आपको TNT control set की नि: शुल्क होने की अपील की आवश्यकता हो सकती है।

+0

+1, उत्कृष्ट तर्क। स्वीकार किए गए उत्तर में कोड संकलित करता है और डेल्फी 4 में भी बेकार ढंग से काम करता है। – mghie

+0

अब डेल्फी को ट्रैडीज और अद्यतित लोगों में विभाजित किया गया है। –

+1

मैं इस बारे में सोचना पसंद करता हूं कि "लोगों को कम से कम झगड़ा, परेशानियों और व्यय के साथ काम करना" और "वास्तव में आवश्यक चीज़ों के बारे में सोचने के बिना परिवर्तनों में परिवर्तन के लिए परिवर्तन" करना पसंद है। :) – Deltics

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