כמו בכל שפת תכנות, ב- דלפימשתנים הם מצייני מיקום המשמשים לאחסון ערכים; יש להם שמות וסוגי נתונים. סוג הנתונים של משתנה קובע כיצד נשמרים הסיביות המייצגים ערכים אלה בזיכרון של המחשב.
כאשר יש לנו משתנה שיכיל מערך כלשהו של תווים, אנו יכולים להכריז שהוא מסוגמחרוזת.
דלפי מספקת מגוון בריא של מפעילי מחרוזות, פונקציות ונהלים. לפני הקצאת סוג נתוני מחרוזת למשתנה, עלינו להבין היטב את ארבעת סוגי המחרוזות של דלפי.
מחרוזת קצרה
פשוט שים, מחרוזת קצרה הוא מערך נספר של (ANSII) תווים, עם עד 255 תווים במחרוזת. הבייט הראשון של מערך זה שומר את אורך המיתר. מכיוון שזה היה סוג המחרוזת הראשי בדלפי 1 (דלפי 16 סיביות), הסיבה היחידה להשתמש במחרוזת קצרה היא עבור תאימות לאחור.
כדי ליצור משתנה מסוג ShortString אנו משתמשים:
var s: ShortString; s: = 'תכנות דלפי'; // S_Length: = Ord (s [0])); // שזהה לאורך / ים
ה s משתנה הוא משתנה מחרוזת קצר המסוגל להכיל עד 256 תווים, הזיכרון שלו הוא 256 בתים שהוקצו סטטית. מכיוון שזה בדרך כלל בזבזני - לא סביר שהמחרוזת הקצרה שלכם תתפשט לאורך המרבי - שנייה הגישה לשימוש במיתרים קצרים היא שימוש בתת-סוגים של ShortString, שאורכם המרבי הוא בין 0 ל 255.
var ssmall: מחרוזת [50]; ssmall: = 'מחרוזת קצרה, עד 50 תווים';
זה יוצר משתנה הנקרא ssmall שהאורך המרבי שלהם הוא 50 תווים.
הערה: כשאנחנו מקצים ערך למשתנה של מחרוזת קצרה, המיתר מקוצץ אם הוא חורג מהאורך המרבי של הסוג. כשאנחנו מעבירים מחרוזות קצרות למחרוזת המתאימה לשגרה של דלפי, הם מומרים למחרוזת ארוכה וממנה.
מיתר / ארוך / אנסי
דלפי 2 הובאה לאובייקט פסקל מיתר ארוך סוג. מחרוזת ארוכה (בעזרתה של דלפי, AnsiString) מייצגת מחרוזת שהוקצתה דינאמית שאורכה המרבי מוגבל רק בזיכרון הזמין. כל גרסאות הדלפי של 32 סיביות משתמשות במחרוזות ארוכות כברירת מחדל. אני ממליץ להשתמש במיתרים ארוכים בכל הזדמנות.
var s: מחרוזת; s: = 'מחרוזת ה- s יכולה להיות בכל גודל ...';
ה s המשתנה יכול להכיל מאפס למספר תווים מעשי כלשהו. המחרוזת גדלה או מתכווצת כשאתה מקצה לה נתונים חדשים.
אנו יכולים להשתמש בכל משתנה מחרוזת כמערך תווים, בתו השני s יש את המדד 2. הקוד הבא
s [2]: = 'T';
מקצה ט לדמות השנייה os s משתנה. עכשיו מעט מהדמויות הראשונות בסרט s נראה כמו: זה str ....
אל תטעה, אינך יכול להשתמש ב- [0] כדי לראות את אורך המיתר, s אינו קצר.
ספירת הפניות, העתקה-על-כתיבה
מכיוון שהקצאת הזיכרון מתבצעת על ידי דלפי, אנו לא צריכים לדאוג לאיסוף האשפה. בעבודה עם מיתרי Long (Ansi) דלפי משתמשת בספירת הפניות. בדרך זו העתקת מחרוזות מהירה למעשה יותר עבור מחרוזות ארוכות מאשר עבור מחרוזות קצרות.
ספירת הפניות, לפי דוגמה:
var s1, s2: מחרוזת; s1: = 'מחרוזת ראשונה'; s2: = s1;
כשאנחנו יוצרים מחרוזת s1 משתנה, ומקצה לו ערך מסוים, דלפי מקצה מספיק זיכרון למיתר. כשאנחנו מעתיקים s1 ל s2, דלפי לא מעתיקה את ערך המחרוזת בזיכרון, היא רק מגדילה את ספירת ההתייחסות ומשנה את ה- s2 להצביע על אותו מיקום זיכרון כמו s1.
כדי למזער את ההעתקה כאשר אנו מעבירים מחרוזות לשגרה, דלפי עושה שימוש בטכניקת העתקה-על-כתיבה. נניח שאנחנו צריכים לשנות את ערך ה- s2 משתנה מחרוזת; דלפי מעתיקה את המחרוזת הראשונה למיקום זיכרון חדש, מכיוון שהשינוי אמור להשפיע רק על s2, ולא על s1, ושניהם מצביעים על אותו מיקום זיכרון.
מחרוזת רחבה
מיתרים רחבים מוקצים ומנוהלים באופן דינאמי, אך הם אינם משתמשים בספירת הפניות או בסמנטיקה של העתקה-על-כתיבה. מיתרים רחבים מורכבים מתוויות Unicode של 16 סיביות.
אודות קבוצות תווים של Unicode
מערך התווים של ANSI המשמש את Windows הוא מערך תווים בודד. יוניוקוד מאחסנת כל תו בתווים המוגדרים בשני בתים במקום 1. יש שפות לאומיות המשתמשות בתווים אידיאוגרפיים, הדורשים יותר מ -256 התווים הנתמכים על ידי ANSI. בעזרת סימון של 16 סיביות אנו יכולים לייצג 65,536 תווים שונים. אינדקס של מיתרי ריבוי-בתים אינו אמין, שכן s [i] מייצג את בתים ith (לאו דווקא את הדמות i) s.
אם עליך להשתמש בתווים רחבים, עליך להכריז על משתנה מחרוזת שהוא מסוג WideString ומשתנה התווים שלך מסוג WideChar. אם ברצונך לבחון מחרוזת רחבה תו אחד בכל פעם, הקפד לבדוק תווים רב-ריבוניים. דלפי אינה תומכת בהמרות מסוג אוטומטי בין סוגי Ansi ו- String Wide.
var s: WideString; ג: WideChar; s: = 'מדריך Delphi_'; s [8]: = 'T'; //s='Delphi_TGuide';
Noll הסתיים
מחרוזת סיום null או אפס היא מערך של תווים, באינדקס על ידי מספר שלם המתחיל מאפס. מכיוון שלמערך אין מחוון אורך, דלפי משתמשת ב- ASCII 0 (NULL; # 0) תו לסימון גבול המחרוזת.
המשמעות היא שלמעשה אין הבדל בין מחרוזת שהסתיימה בטול ומערך [0..NumberOfChars] מהסוג Char, שם סוף המחרוזת מסומן על ידי # 0.
אנו משתמשים במחרוזות שהסתיימו בביטול בדלפי כאשר אנו קוראים לפונקציות API של Windows. אובייקט פסקל מאפשר לנו להימנע מהתעסקות סביב מצביעים למערכים מבוססי אפס בעת טיפול במחרוזות עם סיום בטל באמצעות סוג PChar. חשוב על PChar כמצביע למיתר עם סיום בטל או למערך המייצג אחד. למידע נוסף על עצות, בדוק:מצביעים בדלפי.
לדוגמה, The GetDriveType פונקציית API קובעת אם כונן הדיסק הוא נשלף, קבוע, CD-ROM, דיסק RAM או כונן רשת. ההליך הבא מפרט את כל הכוננים וסוגיהם במחשב משתמשים. הניחו כפתור אחד ורכיב תזכיר אחד על גבי טופס והקצו מטפל OnClick של כפתור:
תהליך TForm1.Button1Click (שולח: TObject); var כונן: Char; DriveLetter: מחרוזת [4]; התחלל כונן: = 'A' ל 'ז' לעשותהתחל DriveLetter: = Drive + ': \'; מקרה GetDriveType (PChar (Drive + ': \')) של DRIVE_REMOVABLE: Memo1.Lines. הוסף (DriveLetter + 'כונן תקליטונים'); DRIVE_FIXED: Memo1.Lines. הוסף (DriveLetter + 'כונן קבוע'); DRIVE_REMOTE: Memo1.Lines. הוסף (DriveLetter + 'כונן רשת'); DRIVE_CDROM: Memo1.Lines. הוסף (DriveLetter + 'כונן CD-ROM'); DRIVE_RAMDISK: Memo1.Lines. הוסף (DriveLetter + 'דיסק RAM'); סוף; סוף; סוף;
ערבוב המיתרים של דלפי
אנו יכולים לערבב בחופשיות את כל ארבעת המיתרים השונים, דלפי תתן עדיף להבין מה אנו מנסים לעשות. ההקצאה s: = p, כאשר s הוא משתנה מחרוזת ו- p הוא ביטוי PChar, מעתיק מחרוזת עם סיום null למיתר ארוך.
סוגי תווים
בנוסף לארבעה סוגי נתוני מחרוזות, לדלפי שלושה סוגי תווים: Char, AnsiChar, וWideChar. מחרוזת קבועה באורך 1, כמו 'T', יכולה לציין ערך תו. סוג הדמות הגנרית הוא צ'אר, המקביל ל- AnsiChar. ערכי WideChar הם תווים של 16 סיביות המוזמנים לפי מערך התווים של Unicode. 256 התווים הראשונים של Unicode תואמים את תווי ה- ANSI.