2009-07-13 16 views
15

गर्मियों का कारोबारी शांति शुरू हो गया है इसलिए मैंने डी 200 9 में माइग्रेशन लिया। मैं प्रोग्राम के हर उपप्रणाली के लिए मोटे तौर पर निर्धारित करता हूं अगर उन्हें एसीआईआई रहना चाहिए, या यूनिकोड हो सकता है, और पोर्टिंग शुरू कर दिया।डी 2009 टीस्ट्रिंगलिस्ट उत्तर

यह ठीक हो गया, सभी घटक डी 2009 संस्करणों में थे (कुछ, जैसे VSTView, थोड़ा असंगत हालांकि) लेकिन अब मैं एक समस्या में भाग गया हूं, कुछ हिस्सों में जो उत्तर देने के लिए रहना चाहिए, मैं बड़े पैमाने पर टीस्ट्रिंगलिस्ट का उपयोग करता हूं, एक मूल नक्शा।

क्या पहले से ही इसे बदलने के लिए कुछ आसान है, या क्या मुझे बस पुराने डेल्फी या एफपीसी स्रोत के आधार पर एक कट डाउनिंग टिस्टिंगलिस्ट शामिल करना चाहिए?

मैं कल्पना नहीं कर सकता कि मैं इसमें भाग लेने वाला पहला व्यक्ति हूं?

परिवर्तन अपेक्षाकृत स्थानीयकृत होना चाहिए, ताकि कोड सत्यापन-प्रक्षेपवक्र के माध्यम से बीडीएस2006 के साथ संगत हो। यहां कुछ ifdefs और कोई समस्या नहीं है। बेशक स्ट्रिंग-> ansistring और char -> ansichar आदि मेरे स्रोत में संशोधन के रूप में गिनती नहीं करते हैं, क्योंकि मुझे वैसे भी ऐसा करना है, और यह पूरी तरह पीछे की ओर compat है।

संपादित करें: मैं पाठक/लेखक वर्गों में कुछ सामानों को दूर करने में सक्षम हूं। यह मूल रूप से सोचा जाने से मेसन के समाधान के लिए आसान बनाता है। मैं गैबर के सुझाव को फॉलबैक के रूप में दिमाग में रखूंगा।

जेनिक्स डी 2009 खरीदा गया है। दयालुता कि उन्होंने इसे एफपीसी असंगत बना दिया हालांकि

+1

क्या आप स्ट्रिंग के स्ट्रिंग और लंबाई की बाइट गिनती सहित बहुत सी गणना कर रहे हैं? बीकॉज इस तरह के डाउनग्रेड करने के लिए मेरे लिए एकमात्र वास्तविक पुनर्मूल्यांकन है। – smok1

+0

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

+1

फिर से मैं SO पर उपयोगकर्ताओं के व्यवहार से परेशान हूं। पांच उपयोगकर्ताओं ने 71 प्रश्नकर्ताओं से अब तक कम से कम 14 अप-वोटों के साथ इस प्रश्न के विचारशील उत्तर प्रदान किए हैं, फिर भी एक भी नहीं ने इस सवाल को अप-वोट दिया है। कोई प्रश्न सही नहीं है, लेकिन मुझे क्यू और एएस को पढ़ने में मदद मिली - तो मेरे द्वारा +1। आईएमएचओ, ** डेल्फी का समर्थन ** विषय पर सूचनात्मक चर्चा का समर्थन करना शामिल है। – Argalatyr

उत्तर

9

यदि "मानचित्र" से आपका मतलब है "हैश टेबल", तो आप इसे सामान्य TDictionary से प्रतिस्थापित कर सकते हैं। इस तरह कुछ घोषित करने का प्रयास करें:

uses 
    Generics.Collections; 

type 
    TStringMap<T: class> = TDictionary<ansiString, T>; 

फिर दाएं ऑब्जेक्ट प्रकार के TStringMaps के साथ अपनी स्ट्रिंगलिस्ट को प्रतिस्थापित करें। (बेहतर प्रकार की सुरक्षा मुक्त हो जाती है।) इसके अलावा, यदि आप शब्दकोश को ऑब्जेक्ट्स के स्वामित्व में लेना चाहते हैं और जब आप पूरा कर लें तो उन्हें मुक्त करें, इसे TObjectDictionary में बदलें और जब आप कन्स्ट्रक्टर को कॉल करते हैं, तो [doOwnsValues] को पास करें उपयुक्त पैरामीटर।

(। BTW आप TDictionary उपयोग करने के लिए जा रहे हैं, सुनिश्चित करें कि आप D2009 अद्यतन 3. डाउनलोड मूल रिलीज़ TDictionary कि यह लगभग बेकार बना में कुछ गंभीर कीड़े था बनाने)

संपादित करें: यह अभी भी करने के लिए है, तो डी 2006 के तहत संकलित करें, तो आपको चीजों को थोड़ा छोटा करना होगा। इस तरह कुछ कोशिश करें:

type 
    TStringMap = 
{$IFDEF UNICODE} 
    class TDictionary<ansiString, TObject> 
    (Add some basic wrapper functions here.) 
    end; 
{$ELSE} 
    TStringList; 
{$ENDIF} 

यदि आप इसे पहले स्थान पर उपयोग कर रहे थे तो रैपर को बहुत अधिक काम नहीं करना चाहिए। पिछली संगतता के बदले में आप अतिरिक्त प्रकार की सुरक्षा खो देते हैं, लेकिन आपको वास्तविक हैश तालिका मिलती है जो ओ (1) समय में इसकी लुकअप करता है।

+0

कोड डी 2006 के साथ संकलित रहना चाहिए ... लेकिन शायद एक छोटा रैपर करेगा, afaik मेरे पास हालिया अपडेट हैं क्योंकि यह एक महीने पुराना इलेक्ट्रॉनिक सॉफ्टवेयर वितरण संस्करण है। (सहायता अद्यतन 3 को छोड़कर जिसे मैंने हाथ से स्थापित किया) –

+0

इस बीच थोड़ा और खेला, लेकिन TDictionary ऐसा लगता है कि कोई डुप्लीकेट नहीं है। –

3

क्या इन सबसिस्टम को उत्तर देने की आवश्यकता है, या बस वे बाहरी दुनिया (आरएस 232, टेक्स्ट फाइल इत्यादि ...) के साथ कैसे संवाद करते हैं? जैसे ही मैं सी # के साथ करता हूं, मैं डेल्फी 200 9 में तारों के रूप में तारों का इलाज करता हूं, और केवल किसी अन्य व्यक्ति की आवश्यकता होने पर रूपांतरणों के बारे में चिंता करता हूं।

यह आपके कोड में अनजाने अंतर्निहित रूपांतरणों से बचने और विंडोज एपीआई विधियों को कॉल करते समय, प्रदर्शन में सुधार करने में भी मदद करेगा।

+0

टेक्स्टफाइल, आरएस 232 सही जगह पर हैं। हालांकि दृढ़ता केवल stringlist.savetostream या तो नहीं है, लेकिन गंभीर संस्करण वाली पिछली संगतता मांगों के साथ हैंडकोड की गई है। जैसा कि आप अपरिवर्तनीय सलाह देते हैं, वैसे ही मैं वही करता हूं, लेकिन मैं सबसिस्टम को रखना चाहता हूं जो जवाब देने/आउटपुट करने में मदद करता है और उन्हें आंतरिक रूप से भारी रूप से उपयोग करता है, जो परेशानी से बचने के लिए उत्तर देता है। बाद में, माइग्रेशन के बाद मैं चयनित लोगों को उत्तर देने के लिए अद्यतन करता हूं। –

+1

आपको पिछले डेल्फी संस्करणों के साथ संगतता का उल्लेख करने के लिए अपना प्रश्न संपादित करना चाहिए। –

+0

... स्पष्ट रूप से unicodestring करने के लिए। फाइलटाइप के लगभग आधे बाइनरी बीटीडब्ल्यू हैं। –

2

आप डेल्फी 2007 (या पहले) के टीएसट्रिंग्स और टीस्ट्रिंगलिस्ट वर्गों को संशोधित कर सकते हैं और उन्हें TAnsiStrings और TAnsiStringList में बदल सकते हैं। आपको यह एक बहुत ही आसान संशोधन होना चाहिए, और इससे आपको आवश्यक कक्षाएं मिलेंगी।

+0

मुझे इनमें से कोई भी AnsiStrings.pas में या स्रोत निर्देशिका की खोज में नहीं देखता है। –

+0

ansistrings में tansistringlist शामिल नहीं प्रतीत होता है। पूरा स्रोत/डीआईआर इस पर grep नहीं है? यह वही है जो मैं उम्मीद कर रहा था हालांकि –

+0

क्षमा करें, क्षमा करें, क्षमा करें। मैं गलत था। यह एक संशोधन था जिसे डेल्फी 200 में शामिल नहीं किया गया है लेकिन करना आसान है। मैं अपना जवाब अपडेट करूंगा। – lkessler

12

JCL JclAnsiStrings इकाई में TAnsiStrings और TAnsiStringList लागू करता है।

8

TStringList.LoadFromFile/SaveToFile भी टीएनकोडिंग प्रकार का एक वैकल्पिक पैरामीटर लेता है, जो आपको किसी भी प्रकार की स्ट्रिंग को स्टोर करने के लिए TStringList का उपयोग करने की अनुमति देता है।

procedure LoadFromFile(const FileName: string; Encoding: TEncoding); overload; virtual; 
procedure SaveToFile(const FileName: string; Encoding: TEncoding); overload; virtual; 

भी ध्यान रखें कि डिफ़ॉल्ट रूप से, TStringList एएनएसआई कोड पृष्ठ पर के रूप में तो यह है कि सभी मौजूदा कोड काम करता है यह है के रूप में उपयोग करता है।

+0

(इस लाइन पर कुछ अंतराल) जैसा कि कहा गया है, मैं मूल मैप के रूप में tstringlist का उपयोग करता हूं, इसलिए मैंने इन विधियों के माध्यम से स्ट्रीम नहीं किया, क्योंकि सभी पंक्तियों ने वस्तुओं को जोड़ा है [] –

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