สายอักขระ คือ แถวลำดับอัดแน่น (packed array) ของตัวอักขระ เช่น 'PASCAL' 'COMPUTER'
รูปแบบ การกำหนดสายอักขระมีดังนี้
type
string = packed array (.1..15.) of char;
ลักษณะพิเศษของสายอักขระมีดังนี้คือ
1. สามารถใช้ ตัวดำเนินการแสดงความสัมพันธ์ ในการเปรียบเทียบการเรียงตามลำดับ ตัวอักษร (alphabetical order) ของสายอักขระ 2 ชนิด
2. สามารถเขียนผลลัพธ์ของสายอักขระได้ครั้งละทั้งสาย ซึ่งในกรณีของตัวอักขระ สามารถเขียน ผลลัพธ์ครั้งละ 1 ตัวอักษรเท่านั้น
3. สามารถกำหนดข้อความ หรือวลี ให้กับสายอักขระโดยใช้ข้อความสั่งกำหนดค่า
*หมายเหตุ กรณีของเทอร์โบ ปาสกาล (turbo Pascal) ใช้สายอักขระเป็นคำสงวนโดยไม่ ต้องกำหนดชนิด สามารถอ้างและนำไปใช้ในโปรแกรมได้
ตัวอย่าง 5-9 การกำหนดค่าของวลีให้กับตัวแปรชนิดแถวลำดับอัดแน่น
CONST
THISBOOK ='PASCAL ';
MAXTITLELENGTH = 10;
TYPE
NAMES = PACKED ARRAY (.1..13.) OF CHAR;
VAR
TITLE : PACKED ARRAY (.1..MAXTITLELENGTH.) OF CHAR;
AUTHOR1, AUTHOR2 : NAMES;
การกำหนดค่าให้ตัวแปรแถวลำดับอัดแน่น
TITLE := THISBOOK ;
AUTHOR1 := 'NIKLAUS WIRTH';
AUTHOR2 := 'DIJKSTRA ';
สำหรับการกำหนดค่า ให้ตัวแปรสายอักขระนั้น สายอักขระที่นำมาใช้ต้องมีขนาด เท่ากับขนาดของตัวแปร เช่น กรณีของการกำหนดค่าสายอักขระ 10 ตัวอักษร ให้กับ TITLE ซึ่งเป็นตัวแปรมี ความจุ ขนาด 10 ตัวอักษร ทั้ง TITLE และ THISBOOK เป็นสายอักขระที่มีขนาดเท่ากันคือ 10 ตัวอักขระ
การแสดงการเก็บตัวอักขระในสตริง AUTHOR1 และ AUTHOR2
1 2 3 4 5 6 7 8 9 10 11 12 13
AUTHOR1 N I K L A U S b W I R T H
AUTHOR2 D I J K S T R A b b b b b
AUTHOR2 มีการกำหนดชื่อที่มีขนาดน้อยกว่า 13 ตัวอักษร ดังนั้นจึงมีการเติมช่องว่าง (b=ช่องว่าง) เพื่อให้ AUTHOR2 มีขนาดเท่ากับ 13 ตัวอักษร หลักการเติมช่องว่างให้กับตัวแปรนั้น ทำโดย กำหนดให้ตัวอักษรในสายอักขระ ชิดคอลัมน์ซ้ายสุด แล้วเติมช่องว่างในคอลัมน์ที่เหลือจนสายอักขระ มีขนาดตามต้องการ
การอ่านตัวอักขระเก็บไว้ในสายอักขระ
ในปาสกาลมาตราฐานการอ่านสายอักขระครั้งละ 1 อักขระ ทำโดยการทดสอบว่าตัว อักขระที่อ่านเป็นจุดสิ้นสุดบรรทัด (EOLN) หรือไม่ นอกจากนี้มีการทดสอบว่าสายอักขระที่จะบรรจุตัว อักษรนั้นเต็มหรือไม่ ถ้าสายอักขระเต็มหรือพบจุดสิ้นสุดบรรทัดจะเลิกอ่านข้อมูล
ตัวอย่าง 5-10 การอ่านสายอักขระ
Program Readstring;
VAR charcount , linelength : integer;
somearary : packed array [ 1..80] of char;
ch : char;
Begin
charcount : = 0; linelengtn :=80;
While not Eoln do
Begin
charcount : = charcount+1;
read (ch);
If charcount < = linelength
then somearray [charcount] : ch;
end (* while not Eoln *)
FOR I : = charcount + 1 to linelength do
somearray : ='';
end.
โปรแกรมนี้เป็นการอ่านข้อมูลนำเข้าครั้งละ 1 ตัวอักษร เก็บไว้ในสายอักขระ โดยมี การนับจำนวนตัวอักษรที่อ่านและเก็บอักษรนั้นในสายอักขระชื่อ somearray กรณีที่ข้อมูลนำเข้ามีขนาด เล็กกว่า linelength โปรแกรมจะเติมช่องว่างทางขวาจน somearray มีขนาดเท่ากับ linelength
การใช้เครื่องหมายแสดงความสัมพันธ์กับสายอักขระ
ในภาษาปาสกาล สามารถใช้เครื่องหมายแสดงความสัมพันธ์ เช่น '=', '<>', '<', '<=', '>=', และ '>' ในการเปรียบเทียบระหว่างตัวแปรสายอักขระ 2 ตัว
ให้ NAME มีค่าภายใน คือ 'WIRTH'
ดังนั้น นิพจน์ ที่จะให้มีเปรียบเทียบมีดังนี้
NAME = 'WIRTH '
NAME > 'WILKES '
NAME < 'WULF '
NAME <> 'DIJKSTRA '
NAME >= 'DAHL '
NAME <= 'WIRTH '
การเปรียบเทียบทั้ง 6 อย่างนี้ให้ผลเป็น จริง ทั้งสิ้น
ตัวอย่างที่ 5-11 การเขียนข้อมูลส่งออกของแถวลำดับอัดแน่น
type
Day = (Monday, Tuesday, Wednesday, Thursday, Friday Saturday,
Sunday);
String = packed array [1..9] of char;
Words = array [Day] of String;
var
Today : Day;
DayWords : Words;
มีการกำหนดค่าเริ่มต้นของข้อมูลภายในแถวลำดับ ดังนี้
Initialize the array
DayWords[Monday]: = 'Monday';
DayWords[Tuesday]: = 'Tuesday';
DayWords[Wednesday]: = 'Wednesday';
DayWords[Thursday]: = 'Thursday';
DayWords[Friday]: = 'Friday';
DayWords[Saturday]: = 'Saturday';
DayWords[Sunday]: = 'Saturday';
Demonstrate how it works
for Today: = Monday to Sunday
do writeln ('Today is ', DayWords[Today]);
ข้อมูลส่งออกมี ดังนี้
Today is Monday
Today is Tuesday
Today is Wednesday
Today is Thursday
Today is Friday
Today is Saturday
Today is Sunday
ในปาสกาลสายอักขระ คือตัวแปรชนิดโครงสร้าง ดังนั้นการใช้ข้อความสั่ง WRITE หรือ WRITELN ใช้ได้กับสายอักขระทั้งสาย โดยระบุชื่อสายอักขระตามหลังข้อความสั่งดังกล่าว
ตัวอย่าง 5-12 การเขียนและอ่านสายอักขระทั้งสาย
Program Sawasdee (input , output);
Var name : packed array[1..80] of char;
begin.
writeln ('Please Print your Name.');
Readln (Name);
writeln('Sawasdee' , Name);
end.
เมื่อสั่งให้โปรแกรมทำงานแล้วได้ผลดังนี้
คอมพิวเตอร์ : Please Print your Name.
ผู้ใช้ : Ann
คอมพิวเตอร์ : Sawasdee Ann
TOP |