डेल्फी में स्ट्रिंग प्रकार

किसी भी प्रोग्रामिंग भाषा के साथ, में डेल्फी, चर प्लेसहोल्डर्स हैं जिनका उपयोग मूल्यों को संग्रहीत करने के लिए किया जाता है; उनके पास नाम और डेटा प्रकार हैं। एक चर का डेटा प्रकार निर्धारित करता है कि उन मानों का प्रतिनिधित्व करने वाले बिट्स को कंप्यूटर की मेमोरी में कैसे संग्रहीत किया जाता है।

जब हमारे पास एक चर होगा जिसमें कुछ वर्ण होंगे, तो हम इसे प्रकार का घोषित कर सकते हैंतार.
डेल्फी स्ट्रिंग ऑपरेटरों, कार्यों और प्रक्रियाओं का एक स्वस्थ वर्गीकरण प्रदान करता है। एक चर डेटा प्रकार को एक चर में निर्दिष्ट करने से पहले, हमें डेल्फी के चार स्ट्रिंग प्रकारों को अच्छी तरह से समझने की आवश्यकता है।

छोटी स्ट्रिंग

सीधे शब्दों में कहें, छोटी स्ट्रिंग स्ट्रिंग में 255 वर्णों के साथ (ANSII) वर्णों की गणना सरणी है। इस सरणी का पहला बाइट स्ट्रिंग की लंबाई को संग्रहीत करता है। चूंकि यह डेल्फी 1 (16 बिट डेल्फी) में मुख्य स्ट्रिंग प्रकार था, शॉर्ट स्ट्रिंग का उपयोग करने का एकमात्र कारण आवक अनुकूलता के लिए है।
हमारे द्वारा उपयोग किए जाने वाले शोर्टस्ट्रीम प्रकार चर बनाने के लिए:

वर s: शॉर्टस्ट्रिंग; s: = 'डेल्फी प्रोग्रामिंग'; // S_Length: = ऑर्ड (s [0])); // जो लंबाई (ओं) के समान है
instagram viewer


रों चर एक लघु स्ट्रिंग चर है जो 256 वर्णों तक रखने में सक्षम है, इसकी मेमोरी एक सांख्यिकीय रूप से आवंटित 256 बाइट्स है। चूंकि यह आमतौर पर बेकार है - आपकी छोटी स्ट्रिंग अधिकतम लंबाई तक फैल जाएगी - दूसरा शॉर्ट स्ट्रिंग्स का उपयोग करने के लिए दृष्टिकोण शॉर्टस्ट्रीमिंग के उपप्रकार का उपयोग कर रहा है, जिसकी अधिकतम लंबाई 0 से कहीं भी है 255.

वर ssmall: स्ट्रिंग [50]; ssmall: = 'लघु स्ट्रिंग, अधिकतम 50 वर्ण';

यह एक वैरिएबल बनाता है जिसे कहा जाता है ssmall जिसकी अधिकतम लंबाई 50 वर्ण है।

नोट: जब हम एक शॉर्ट स्ट्रिंग वैरिएबल के लिए एक मान निर्दिष्ट करते हैं, तो स्ट्रिंग को छोटा किया जाता है यदि यह प्रकार के लिए अधिकतम लंबाई से अधिक है। जब हम कुछ डेल्फी की स्ट्रिंग जोड़ तोड़ दिनचर्या में छोटे तार पास करते हैं, तो वे लंबे स्ट्रिंग से परिवर्तित होते हैं।

स्ट्रिंग / लांग / एएनएसआई

डेल्फी 2 को ऑब्जेक्ट पास्कल में लाया गया लंबी स्ट्रिंग प्रकार। लंबी स्ट्रिंग (डेल्फी की मदद AnsiString) एक गतिशील रूप से आवंटित स्ट्रिंग का प्रतिनिधित्व करती है जिसकी अधिकतम लंबाई केवल उपलब्ध मेमोरी द्वारा सीमित है। सभी 32-बिट डेल्फी संस्करण डिफ़ॉल्ट रूप से लंबे तार का उपयोग करते हैं। जब भी आप कर सकते हैं मैं लंबे तारों का उपयोग करने की सलाह देता हूं।

वर s: स्ट्रिंग; s: = 's स्ट्रिंग किसी भी आकार की हो सकती है ...';

रों चर शून्य से किसी भी व्यावहारिक संख्या में वर्णों को पकड़ सकता है। जैसे ही आप इसे नया डेटा असाइन करते हैं, स्ट्रिंग बढ़ती या सिकुड़ती है।

हम किसी भी स्ट्रिंग चर का उपयोग वर्णों की एक सरणी के रूप में कर सकते हैं, दूसरे वर्ण में रों सूचकांक 2 है। निम्नलिखित कोड

रों [2]: = 'टी';

प्रदान करती है टी दूसरा चरित्र ओएस के लिए रों चर। अब पहले पात्रों में से कुछ रों हमशक्ल: TTe str ....
गुमराह न हों, आप स्ट्रिंग की लंबाई देखने के लिए s [0] का उपयोग नहीं कर सकते, रों ShortString नहीं है।

संदर्भ गिनती, कॉपी-ऑन-राइट

चूंकि स्मृति आवंटन डेल्फी द्वारा किया जाता है, हमें कचरा संग्रहण के बारे में चिंता करने की आवश्यकता नहीं है। लांग (एएनआई) स्ट्रिंग्स डेल्फी के साथ काम करते समय संदर्भ गिनती का उपयोग किया जाता है। इस तरह से स्ट्रिंग की नकल वास्तव में छोटे तारों की तुलना में लंबे तार के लिए तेज है।
संदर्भ गिनती, उदाहरण के लिए:

वर s1, s2: स्ट्रिंग; s1: = 'पहला स्ट्रिंग'; s2: = s1;

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

नकल को कम करने के लिए जब हम स्ट्रिंग्स को दिनचर्या में पास करते हैं, डेल्फी कॉपी-ऑन-राइट तकनीक का उपयोग करता है। मान लीजिए कि हम का मूल्य बदलना है s2 स्ट्रिंग चर; डेल्फी पहले स्ट्रिंग को एक नई मेमोरी लोकेशन पर कॉपी कर देता है, क्योंकि परिवर्तन केवल s2 को प्रभावित करना चाहिए, s1 को नहीं, और वे दोनों एक ही मेमोरी लोकेशन की ओर इशारा करते हैं।

वाइड स्ट्रिंग

वाइड स्ट्रिंग्स को गतिशील रूप से आवंटित और प्रबंधित किया जाता है, लेकिन वे संदर्भ गिनती या कॉपी-ऑन-राइट शब्दार्थ का उपयोग नहीं करते हैं। वाइड स्ट्रिंग्स में 16-बिट यूनिकोड अक्षर होते हैं।

यूनिकोड चरित्र सेट के बारे में

Windows द्वारा उपयोग किया गया ANSI वर्ण एकल-बाइट वर्ण सेट है। यूनिकोड प्रत्येक चरित्र को 1 के बजाय 2 बाइट्स में निर्धारित वर्ण में संग्रहीत करता है। कुछ राष्ट्रीय भाषाओं में वैचारिक पात्रों का उपयोग किया जाता है, जिन्हें ANSI द्वारा समर्थित 256 से अधिक वर्णों की आवश्यकता होती है। 16-बिट अंकन के साथ हम 65,536 विभिन्न वर्णों का प्रतिनिधित्व कर सकते हैं। मल्टीबीट स्ट्रिंग्स का अनुक्रमण विश्वसनीय नहीं है, क्योंकि रों [i] इथ बाइट का प्रतिनिधित्व करता है (जरूरी नहीं कि मैं-वें चरित्र में) रों.

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

वर s: वाइडस्ट्रिंग; c: वाइडचेयर; s: = 'डेल्फी_ गाइड'; s [8]: = 'T'; //s='Delphi_TGuide';

अशक्त समाप्त

शून्य या शून्य समाप्त स्ट्रिंग एक वर्ण का एक सरणी है, जिसे शून्य से शुरू होने वाले पूर्णांक द्वारा अनुक्रमित किया जाता है। चूंकि सरणी में कोई लंबाई संकेतक नहीं है, डेल्फी ASCII 0 (NULL) का उपयोग करता है; # 1) चरित्र स्ट्रिंग की सीमा को चिह्नित करने के लिए।
इसका मतलब यह है कि प्रकार चार के एक शून्य-समाप्त स्ट्रिंग और एक सरणी [0..NumberOfChars] के बीच अनिवार्य रूप से कोई अंतर नहीं है, जहां स्ट्रिंग का अंत # 0 द्वारा चिह्नित है।

हम Windows API फ़ंक्शन को कॉल करते समय डेल्फी में अशक्त-समाप्त स्ट्रिंग्स का उपयोग करते हैं। ऑब्जेक्ट पास्कल हमें PChar प्रकार का उपयोग करके अशक्त-समाप्त स्ट्रिंग्स को संभालने पर शून्य-आधारित सरणियों को इंगित करने वाले आरे के साथ खिलवाड़ से बचने देता है। एक पीसीआर को एक शून्य-समाप्त स्ट्रिंग या एक का प्रतिनिधित्व करने वाले सरणी के लिए एक संकेतक होने के रूप में सोचें। संकेत पर अधिक जानकारी के लिए, जाँच करें:डेल्फी में संकेत.

उदाहरण के लिए, द GetDriveType एपीआई फ़ंक्शन यह निर्धारित करता है कि डिस्क ड्राइव एक हटाने योग्य, निश्चित, सीडी-रोम, रैम डिस्क या नेटवर्क ड्राइव है या नहीं। निम्न प्रक्रिया उपयोगकर्ता कंप्यूटर पर सभी ड्राइव और उनके प्रकारों को सूचीबद्ध करती है। एक बटन और एक मेमो कंपोनेंट को एक फॉर्म पर रखें और एक बटन के ऑनक्लिक हैंडलर को असाइन करें:

प्रक्रिया TForm1.Button1 क्लिक करें (प्रेषक: TObject); वर
ड्राइव: चार; ड्राइवलेटर: स्ट्रिंग [4]; शुरूके लिये ड्राइव: = 'ए' सेवा 'Z' करशुरू
DriveLetter: = Drive + ': \'; मामला GetDriveType (PChar (ड्राइव + ': \')) का
DRIVE_REMOVABLE: मेमो 1।लीन। जोड़ें (DriveLetter + 'फ्लॉपी ड्राइव'); DRIVE_FIXED: मेमो 1 लाइन्स। जोड़ें (DriveLetter + 'फिक्स्ड ड्राइव'); DRIVE_REMOTE: Memo1.ines। जोड़ें (DriveLetter + 'नेटवर्क ड्राइव'); DRIVE_CDROM: मेमो 1.लाइन। जोड़ें (DriveLetter + 'CD-ROM ड्राइव'); DRIVE_RAMDISK: मेमो 1।लीन। जोड़ें (DriveLetter + 'RAM डिस्क'); समाप्त; समाप्त; समाप्त;

डेल्फी के तार मिलाकर

हम स्वतंत्र रूप से सभी चार अलग-अलग प्रकार के तारों को मिला सकते हैं, डेल्फी यह सबसे अच्छा समझ में आएगा कि हम क्या करने की कोशिश कर रहे हैं। असाइनमेंट s: = p, जहां s एक स्ट्रिंग वेरिएबल है और p एक PChar एक्सप्रेशन है, एक नेल-टर्मिनेटेड स्ट्रिंग को एक लंबे स्ट्रिंग में कॉपी करता है।

चरित्र प्रकार

चार स्ट्रिंग डेटा प्रकारों के अलावा, डेल्फी में तीन चरित्र प्रकार हैं: चार, AnsiChar, तथाWideChar. लंबाई 1 का एक स्ट्रिंग स्थिरांक, जैसे कि 'T', एक वर्ण मान को निरूपित कर सकता है। सामान्य वर्ण प्रकार चार है, जो AnsiChar के बराबर है। वाइडचेयर मान यूनिकोड वर्ण सेट के अनुसार 16-बिट वर्ण क्रमबद्ध हैं। पहले 256 यूनिकोड वर्ण ANSI वर्णों के अनुरूप हैं।