วันเสาร์ที่ ๒๒ กันยายน พ.ศ. ๒๕๕๐

การขึ้นบรรทัดใหม่ในข้อความ (Newline in string)

เรื่องการขึ้นบรรทัดใหม่ในข้อความนี้ ก็ถือเป็นเรื่องพื้นฐานที่ควรทำความเข้าใจสำหรับมือใหม่นะครับ ถ้าจะพูดกันจริงๆ ก็ต้องพูดตั้งแต่ระบบปฏิบัติการ เพราะในอนาคตอาจจะต้องใช้ .NET บน Unix ก็เป็นได้ โดย syntax การขึ้นบรรทัดใหม่บน Unix ส่วนใหญ่ จะเป็น \n (backslash n) เช่น korn shell, bash shell, ภาษา C เป็นต้น ส่วน c shell นั้น ใช้ \ ตัวเดียวซึ่งมีเงื่อนไขการใช้เหมือนกัน ถ้าสนใจศึกษาก็ลองดูจากลิ้งค์ข้างล่างนะครับ

แต่สำหรับ DOS จะใช้ \r\n (\r แทน return ซึ่งมาจากปุ่ม return บน keyboard ของเครื่อง mini computer หรือ mainframe ปุ่มนี้บน keyboard ของเครื่อง PC ในปัจจุบัน คือ ปุ่ม enter ส่วน \n คือ newline นั้นเอง) ซึ่งก็สืบทอดมาใช้บนระบบ Windows จนถึง .NET Framework ด้วย

สำหรับรายละเอียดของ \r และ \n ก็มีที่มาจาก ASCII code โดยถ้าดูจากตาราง (กรุณาดูในลิ้งค์ข้างล่างประกอบ) จะพบว่ารหัสที่ 1-32 และรหัสที่ 127 เป็นรหัสที่ไม่มีการแสดงผลบนหน้าจอ ซึ่ง \r และ \n ก็คือ หนึ่งในนั้น


\r เรียกว่า CR (carriage return) แทน ^M เลขฐานสิบเป็น 13 (เลขฐานสิบหกเป็น 0D)
\n เรียกว่า LF (line feed) แทน ^J เลขฐานสิบเป็น 10 (เลขฐานสิบหกเป็น 0A)

ใน .NET Framework ได้มีพร็อพเพอร์ตี้ NewLine ในคลาส Environment ให้เลือกใช้ ซึ่งจำเป็นต้องใช้ในกรณีที่ต้องการ cross platform เพราะ NewLine ให้ค่าบรรทัดใหม่ตาม OS ที่ .NET Framework ติดตั้งอยู่ ถ้าไม่ใช้ Environment.NewLine การเขียนโปรแกรมก็จะขึ้นอยู่กับแต่ละภาษา ดังตัวอย่างข้างล่าง

สำหรับภาษา VB.NET

Dim NewlineTesting As New System.Text.StringBuilder

'Convert number of ASCII to Charecter
'Char(เลขฐานสิบใน ASCII) คือ การแปลงรหัส ASCII เป็น Charecter
NewlineTesting.Append("This is first line" + Chr(13) + Chr(10))

'vbCr, vbLf and vbCrLf คือค่าคงที่ใน Namespace ชื่อ Microsoft.VisualBasic
'vbCr, vbLf and vbCrLf are constant value in Microsoft.VisualBasic
NewlineTesting.Append("This is second line" + vbCr + vbLf)
NewlineTesting.Append("This is third line" + vbCrLf)

'For implement in Windows Form
'กรณีเขียน Win. App. สามารถใช้ Keys.Return และ Keys.LineFeed ได้ ซึ่งช่วยกรณีที่จำรหัส ASCII ไม่ได้
NewlineTesting.Append("This is forth line" + Chr(Keys.Return) + Chr(Keys.LineFeed))

'Environment.NewLine is platform independence new line
'Environment.NewLine เป็นการขึ้นบรรทัดใหม่โดยใช้ได้กับทั้ง VB และ C# ซึ่งไม่ขึ้นกับ OS ด้วย
NewlineTesting.Append("This is fifth line" + Environment.NewLine)

NewlineTesting.Append("This is sixth line")

สำหรับภาษา C#

StringBuilder newlineTesting = new StringBuilder();
newlineTesting.Append("This is first line \r\n");
newlineTesting.Append("This is second line" + Environment.NewLine);
newlineTesting.Append("This is third line");

แหล่งข้อมูล :
ASCII Table
ASCII Code Table
VB.NET string method to handle escape sequences
Using CR and LF: The Options. (VB.NET)
Top Ten Reasons not to use the C shell
Learning the Korn Shell, 2nd Edition
\n ไม่เท่ากับการขึ้นบรรทัดใหม่บน Windows

Related Post