การอ่านไฟล์ข้อความ

Haskell:
การอ่านไฟล์ข้อความ

วิธีการ:

นี่คือวิธีที่คุณสามารถทำให้ Haskell อ่านไฟล์ข้อความโดยไม่ต้องเหงื่อตก เปิดตัวแก้ไขที่คุณชื่นชอบ และมาเขียนโค้ดกัน

import System.IO

main = do
    -- เปิดไฟล์ในโหมดอ่าน
    handle <- openFile "hello.txt" ReadMode
    -- อ่านเนื้อหาของไฟล์
    ประกาศ  <-hGetContents handle
    -- พิมพ์เนื้อหาของไฟล์ออกมา
    putStrLn content
    -- อย่าลืมปิดไฮด์เดลไฟล์!
    hClose handle

รันโค้ดนี้ และถ้าคุณมีไฟล์ “hello.txt” ที่มีเนื้อหา “Hello, World!” ข้างใน, คุณจะได้รับ:

Hello, World!

นี่คือวิธีที่สั้นกว่า ราบรื่นกว่า ทำเช่นเดียวกันด้วยความยุ่งยากน้อยลง:

-- ฟังก์ชัน 'readFile' ทำหน้าที่เปิดและอ่านในครั้งเดียว
main = do
    content <- readFile "hello.txt"
    putStrLn content

ผลลัพธ์ก็ยังคือ,

Hello, World!

ศึกษาลึกลงไป

นานมาแล้ว โปรแกรมเป็นสิ่งมีชีวิตที่ไม่สังคม มักจะประมวลผลข้อมูลที่มันสร้างขึ้นเอง แต่ความซับซ้อนเพิ่มขึ้น และความต้องการในการดึงข้อมูลจากภายนอกก็เพิ่มขึ้นเช่นกัน ดังนั้นการอ่านจากไฟล์จึงกลายเป็นสิ่งที่จำเป็น

Haskell ให้วิธีต่างๆ ในการอ่านไฟล์ เราสามารถทำได้ด้วยวิธีระดับต่ำด้วย openFile, hGetContents, และ hClose หรือใช้วิธีสบายๆ ด้วย readFile, ซึ่งจัดการทุกอย่างอย่างเป็นระเบียบ

readFile เป็นการอ่านแบบล่าช้า – มันอ่านเนื้อหาตามที่ต้องการ, ซึ่งมีประสิทธิภาพด้านหน่วยความจำสำหรับไฟล์ขนาดใหญ่ แต่อาจสร้างความประหลาดใจได้ถ้าไฟล์เปลี่ยนแปลงในระหว่างนั้น กระบวนการระดับต่ำให้การควบคุมมากขึ้น ทำให้มันมีความคาดเดาได้มากขึ้น แต่ยังมีความล่าอย่างมาก สำหรับข้อความขนาดมหึมา, Haskell มี hGetLine หรือไลบรารีอย่าง conduit และ pipes ช่วยจัดการหน่วยความจำและการประมวลผลอย่างละเอียดขึ้น

การดำเนินการ IO มาตรฐานของ Haskell จัดการกับไฟล์โดยใช้กลไกของระบบปฏิบัติการระดับพื้นฐาน ไลบรารีต่างๆ ทำการสรุปเหล่านี้เป็นการดำเนินการที่ง่ายต่อผู้ใช้มากขึ้น แต่ในที่สุด พวกเขาก็สร้างขึ้นบน IO monad ของ Haskell, ซึ่งรับรองว่าการดำเนินการเกิดขึ้นในลำดับที่ถูกต้อง

ดูเพิ่มเติม