أنواع السلاسل في دلفي

كما هو الحال مع أي لغة برمجة ، باللغة دلفي، المتغيرات هي عناصر نائبة تستخدم لتخزين القيم ؛ لديهم أسماء وأنواع البيانات. يحدد نوع البيانات لمتغير كيفية تخزين البتات التي تمثل هذه القيم في ذاكرة الكمبيوتر.

عندما يكون لدينا متغير يحتوي على مجموعة من الأحرف ، يمكننا أن نعلن أنه من النوعخيط.
تقدم دلفي تشكيلة صحية من عوامل التشغيل والوظائف والإجراءات. قبل تعيين نوع بيانات سلسلة لمتغير ، نحن بحاجة إلى فهم دقيق لأنواع سلاسل دلفي الأربعة.

سلسلة قصيرة

ببساطة، سلسلة قصيرة عبارة عن صفيف محسوب من الأحرف (ANSII) ، مع ما يصل إلى 255 حرفًا في السلسلة. يخزن البايت الأول من هذا الصفيف طول السلسلة. نظرًا لأن هذا كان نوع السلسلة الرئيسي في دلفي 1 (16 بت دلفي) ، فإن السبب الوحيد لاستخدام Short String هو التوافق مع الإصدارات السابقة.
لإنشاء متغير نوع ShortString نستخدم:

فار s: ShortString ؛ s: = "برمجة دلفي" ؛
// S_Length: = Ord (s [0])) ، // وهو نفس الطول (الأطوال)


ال س المتغير هو متغير سلسلة قصيرة قادر على استيعاب حتى 256 حرفًا ، وذاكرته هي 256 بايت مخصصة بشكل ثابت. نظرًا لأن هذا عادةً ما يكون هدرًا - من غير المحتمل أن تنتشر السلسلة القصيرة إلى أقصى طول - ثانية نهج استخدام Short Strings هو استخدام أنواع فرعية من ShortString ، يبلغ أقصى طول لها في أي مكان من 0 إلى 255.

instagram viewer

فار ssmall: سلسلة [50] ؛ ssmall: = "سلسلة قصيرة ، حتى 50 حرفًا" ؛

هذا يخلق متغير يسمى سمسمول يبلغ الحد الأقصى لطولها 50 حرفًا.

ملاحظة: عندما نقوم بتعيين قيمة لمتغير سلسلة قصيرة ، يتم اقتطاع السلسلة إذا تجاوزت الطول الأقصى للنوع. عندما نقوم بتمرير سلاسل قصيرة إلى بعض روتين التلاعب في سلسلة دلفي ، يتم تحويلها من وإلى سلسلة طويلة.

سلسلة / طويل / Ansi

جلبت دلفي 2 إلى Object Pascal سلسلة طويلة اكتب. سلسلة طويلة (في مساعدة دلفي AnsiString) تمثل سلسلة مخصصة ديناميكيًا طولها الأقصى محدود فقط بالذاكرة المتاحة. تستخدم جميع إصدارات دلفي 32 بت سلاسل طويلة بشكل افتراضي. أوصي باستخدام سلاسل طويلة كلما استطعت.

فار s: سلسلة ؛ s: = 'يمكن أن تكون سلسلة s بأي حجم ...'؛

ال س يمكن أن يحمل المتغير من صفر إلى أي عدد عملي من الأحرف. تنمو السلسلة أو تتقلص أثناء تعيين بيانات جديدة لها.

يمكننا استخدام أي متغير سلسلة كمصفوفة من الأحرف ، الحرف الثاني في س لديه المؤشر 2. الكود التالي

s [2]: = 'T'؛

يعين ت إلى الحرف الثاني os س متغير. الآن عدد قليل من الشخصيات الأولى في س يبدو مثل: شارع TTe ....
لا تضلل ، لا يمكنك استخدام s [0] لمعرفة طول السلسلة ، س ليست ShortString.

العد المرجعي ، النسخ عند الكتابة

نظرًا لأن تخصيص الذاكرة يتم بواسطة Delphi ، فلا داعي للقلق بشأن جمع القمامة. عند العمل مع Long (Ansi) Strings Delphi تستخدم العد المرجعي. بهذه الطريقة ، يكون نسخ السلاسل أسرع للسلاسل الطويلة من السلاسل القصيرة.
عد المرجع ، على سبيل المثال:

فار s1 ، s2: سلسلة ؛ s1: = "السلسلة الأولى" ؛ s2: = s1 ؛

عندما نقوم بإنشاء سلسلة ق 1 المتغير ، وتعيين بعض القيمة له ، تخصص دلفي ذاكرة كافية للسلسلة. عندما نقوم بنسخ ق 1 إلى ق 2، لا تقوم دلفي بنسخ قيمة السلسلة في الذاكرة ، بل تزيد فقط من عدد المراجع وتغير ق 2 للإشارة إلى نفس موقع الذاكرة ق 1.

لتقليل النسخ عندما نمر السلاسل إلى الروتين ، تستخدم دلفي تقنية النسخ عند الكتابة. لنفترض أننا سنغير قيمة ق 2 متغير السلسلة تقوم دلفي بنسخ السلسلة الأولى إلى موقع ذاكرة جديد ، حيث أن التغيير يجب أن يؤثر فقط على s2 ، وليس s1 ، وكلاهما يشير إلى نفس موقع الذاكرة.

سلسلة عريضة

كما يتم تخصيص السلاسل العريضة وإدارتها ديناميكيًا ، لكنها لا تستخدم العد المرجعي أو دلالات النسخ عند الكتابة. تتكون السلاسل العريضة من أحرف Unicode 16 بت.

حول مجموعات أحرف Unicode

مجموعة أحرف ANSI التي يستخدمها Windows هي مجموعة أحرف أحادية البايت. يخزن Unicode كل حرف في مجموعة الأحرف في 2 بايت بدلاً من 1. تستخدم بعض اللغات الوطنية أحرفًا أيديولوجية تتطلب أكثر من 256 حرفًا تدعمها ANSI. مع تدوين 16 بت يمكننا تمثيل 65.536 حرفًا مختلفًا. فهرسة سلاسل متعددة البايت غير موثوقة ، منذ ذلك الحين ث [i] يمثل بايت إيث (وليس بالضرورة الحرف الأول) في س.

إذا كان يجب عليك استخدام الأحرف العريضة ، يجب أن تعلن عن متغير سلسلة ليكون من النوع WideString ومتغير الحرف الخاص بك من نوع WideChar. إذا كنت ترغب في فحص سلسلة عريضة حرف واحد في كل مرة ، فتأكد من اختبار الأحرف المتعددة. لا تدعم دلفي تحويلات النوع التلقائية بين أنسي وأنواع السلسلة العريضة.

فار s: WideString ؛ ج: WideChar ؛ s: = "دليل دلفي" ؛ ق [8]: = 'T'؛ //s='Delphi_TGuide';

تم إنهاء Null

السلسلة الخالية أو الصفرية المنتهية هي صفيف من الأحرف ، مفهرسة بعدد صحيح يبدأ من الصفر. بما أن الصفيف ليس لديه مؤشر طول ، تستخدم دلفي ASCII 0 (NULL؛ # 0) حرف لتمييز حدود السلسلة.
هذا يعني أنه لا يوجد فرق في الأساس بين سلسلة منتهية بقيمة خالية صفرية وصفيف [0..NumberOfChars] من النوع Char ، حيث يتم وضع علامة # 0 على نهاية السلسلة.

نحن نستخدم السلاسل المنتهية بقيم خالية في دلفي عند استدعاء وظائف Windows API. يتيح لنا Object Pascal تجنب العبث بمؤشرات إلى صفائف صفرية عند التعامل مع سلاسل منتهية بقيمة خالية باستخدام نوع PChar. فكر في PChar على أنه مؤشر إلى سلسلة منتهية بقيمة خالية أو إلى صفيف يمثل سلسلة. لمزيد من المعلومات حول المؤشرات ، تحقق من:مؤشرات في دلفي.

على سبيل المثال ، The GetDriveType تحدد وظيفة API ما إذا كان محرك الأقراص هو محرك أقراص قابل للإزالة أو ثابت أو قرص مضغوط أو قرص RAM أو محرك أقراص شبكة. يسرد الإجراء التالي كافة محركات الأقراص وأنواعها على كمبيوتر مستخدم. وضع زر واحد ومكون مذكرة واحد في نموذج وتعيين معالج OnClick لزر:

إجراء TForm1.Button1Click (المرسل: TObject) ؛ فار
محرك الأقراص: Char؛ DriveLetter: String [4]؛ ابدأإلى عن على محرك الأقراص: = "أ" إلى "Z" فعلابدأ
DriveLetter: = Drive + ': \'؛ قضية GetDriveType (PChar (Drive + ': \')) من
DRIVE_REMOVABLE: Memo1.Lines. إضافة (DriveLetter + 'Floppy Drive') ؛ DRIVE_FIXED: Memo1.Lines. إضافة (DriveLetter + "محرك ثابت") ؛ DRIVE_REMOTE: Memo1.Lines. إضافة (DriveLetter + "Network Drive") ؛ DRIVE_CDROM: Memo1.Lines. إضافة (DriveLetter + "محرك الأقراص المضغوطة") ؛ DRIVE_RAMDISK: Memo1.Lines. إضافة (DriveLetter + 'RAM Disk') ؛ النهاية; النهاية; النهاية;

خلط خيوط دلفي

يمكننا المزج بحرية بين جميع أنواع السلاسل الأربعة المختلفة ، وستعطي دلفي الأفضل لفهم ما نحاول القيام به. التعيين s: = p ، حيث s هو متغير سلسلة و p تعبير PChar ، نسخ سلسلة منتهية بقيمة خالية إلى سلسلة طويلة.

أنواع الشخصيات

بالإضافة إلى أربعة أنواع من بيانات السلسلة ، تحتوي دلفي على ثلاثة أنواع من الأحرف: تشار, AnsiCharوWideChar. يمكن أن يشير ثابت سلسلة بطول 1 ، مثل "T" ، إلى قيمة حرف. نوع الحرف العام هو Char ، وهو ما يعادل AnsiChar. قيم WideChar عبارة عن أحرف 16 بت مرتبة حسب مجموعة أحرف Unicode. أول 256 حرف Unicode تتوافق مع أحرف ANSI.