อยากดูท่าอ่านเขียนไฟล์มั่งอะครับ

  • warning: realpath() [function.realpath]: SAFE MODE Restriction in effect. The script whose uid is 1005 is not allowed to access /tmp owned by uid 0 in /var/www/sites/sugree/codenone.com/subdomains/www/html/includes/file.inc on line 190.
  • warning: realpath() [function.realpath]: SAFE MODE Restriction in effect. The script whose uid is 1005 is not allowed to access /tmp owned by uid 0 in /var/www/sites/sugree/codenone.com/subdomains/www/html/includes/file.inc on line 190.

อยากดูโจทย์อ่านเขียนไฟล์มั่งอะครับ(ง่ายๆก่อนก็ดี) อยาก(เปรียบ)เทียบท่า โดยเฉพาะแฟน functional

ไม่เคยเขียนเลย เดี๋ยวรอดูชาวบ้านก่อนดีกว่า จะได้หัด อิอิ

haskell
ไม่เคยเขียนเหมือนกัน
เลยต้องไปหาอ่านดู

โดยทั่วไป เขานิยมการเปิด file แบบที่ automatic ปิดให้ใช่ไหม
อย่างใน ruby

File.open("file", "r" ) do |file|
 ...
end

ใน haskell ก็มีอะไรที่คล้ายๆอย่างนั้นเหมือนกัน
เรียกว่า bracket
ใช้อย่างนี้ (ตัวอย่างนี้อ่าน file แล้วพิมพ์ 10 ตัวอักษรแรก)

dumpFile = bracket (openFile "/tmp/pok.txt" ReadMode) hClose
           (\h -> do contents <- hGetContents h
                     putStrLn (take 10 contents))

bracket จะรับ parameter 3 ตัวคือ before, after, m
จากข้างบน (openFile ...) คือ before
hClose คือ after แล้วก็ lambda คือ m


สิ่งที่ bracket ทำก็คือ เรียก before ก่อน ได้ผลลัพท์เป็นอะไรก็ส่งเป็น parameter ให้ m
สุดท้ายก็จบด้วย after (ซึ่งข้างบนก็คือการปิด file)

ถ้าเปิดดูใน haskell library จะเห็นว่าเขา declare bracket ไว้ดังนี้

bracket        :: IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket before after m = do
        x  <- before
        rs <- try (m x)
        after x
        case rs of
           Right r -> return r
           Left  e -> ioError e
veer's picture

หรือผมต้องหัด Haskell บ้างเนี่ย? (ตอนนี้ลุ่มหลง Scheme อยู่ :-P)

php

//เขียนไฟล์ test ด้วยคำว่า hello world
file_put_contents("test","hello world");
//อ่านไฟล์เดิม แล้วแสดงออกมา
print file_get_contents("test");

veer's picture

ืท่านี่ก็เท่ห์ดี :-D

ความจริงถ้ายาวกว่านี้

$fp=fopen("test","w"); //เขียนไฟล์ใช้ w จะเขียนทับ ถ้าเป็น a จะเขียนต่อ
fwrite($fp,"hello world"); //เขียนว่า Hello World
fclose($fp); //ปิดการเชื่อมต่อ
$fp=fopen("test","r"); //อ่านไฟล์
print fread($fp,filesize("test")); //ต้องบังคับใส่ความยาว เลยใช้ filesize() มาช่วยหา
fclose($fp); //ปิดการเชื่อมต่อ

หรืออ่านไฟล์ทีละบรรทัดเป็นอาเรย์

print_r(file("test")); //ฟังค์ชั่น file คืนค่าเป็น array เลยใช้ print_r output มาอีกที

ย้าย Codenone

ประกาศย้าย Codenone ไปใช้ Forum ของ Blognone แทนครับ ตามไปตั้งกระทู้ต่อได้ที่ Codenone Forum (รายละเอียดอ่านจากกระทู้ ย้าย Codenone ไปรวมกับ Blognone)

กระทู้เก่าๆ จะย้ายตามไปในภายหลัง ตอนนี้ปิดการโพสต์กระทู้ไว้ เหลือไว้เฉพาะอ้างอิงเท่านั้น