PDA

View Full Version : ขอปรึกษาเรื่อง การอ่าน-เขียนไฟล์ ของภาษา Perl ครับ



jaynarol
05-04-2009, 10:52 AM
จากหัวข้อ ขอปรึกษาการเรื่องเขียนโปรแกรมของผมหน่อยครับ (http://citec.us/forum/index.php?showtopic=27229)

ตอนนี้ผมได้ทำสำเร็จในเบื่องต้นแล้วโดยใช้ภาษา Perl เขียนครับ

แล้วตอนนี้ก็มีปัญหาอยู่อีก คือเรื่องการอ่านและเขียนไฟล์ของ Perl อะครับ

ตอนนี้ผมอยากทราบว่าเราสามารถเปิดไฟล์เพื่ออ่านและเขียนในคราวเดียวกันเลยได้ไหม
เพราะจากที่ผมศึกษามานั้น Perl มีโหมดในการทำงานกับไฟล์แค่ 3 โหมด

read mode เปิดไฟล์เพื่อทำการอ่านอย่างเดียว < หรือ ไม่มี
write mode เปิดไฟล์เพื่อทำการเขียน >
append mode เปิดไฟล์เพื่อทำการเขียนข้อมูลต่อท้าย <<

แต่ในจุดนี้ยังไม่ใช่ปัญหาใหญ่ของผมเพราะผมสามารถเขียนให้มันทำงาน2รอบได้คืออ่านแล้วค่อยเขียน(รู้สึกไม่ดีเลยแฮะ)

ปัญหาจริงๆของผมก็คือ เมื่อเวลา user ใช้ proxy ของผมผมจะมีการบันทึกค่าต่างๆเช่น username/ip/time
ไว้ใน text file

โดยถ้า user คนนั้นเคยมีข้อมูลอยู่ก่อนแล้วใน text file ก็ให้มันลบข้อมูลเก่าแล้วแทนที่ด้วยข้อมูลใหม่
แต่ถ้ายังไม่เคยมีก็ให้มันเขียนข้อมูลต่อท้ายลงไปใหม่

ซึ่งในทางทฤษฎีที่ผมทดลองมันใฃ้ได้อย่างสมบูรณ์แบบ

แต่พอใช้จริงสิครับ - -*
user นั้นเข้ามาใช้งานพร้อมๆกันทำให้บางคนบันทึกลงไปได้และบางคนก็ไม่มีข้อมูลในการบันทึกเลย
ทำให้ผมสงสัยว่า ช่วงเวลาที่คนแรกเปิดไฟล์นั้นคนที่2ในช่วงเวลาเดียวกันอาจจะ
-อ่านไฟล์ไม่ได้
-ไม่สามารถบันทึกข้อมูลได้
-บันทึกไปแล้วถูกบันทึกทับกลับ

ซึ่งมันเป็นปัญหาที่ผมยังหาทางออกไม่ได้ซักทีและปัญหานี้ทำให้ผมหยุดชะงักการพัฒนาโปรแกรมไปเลย

ใครที่เคยเจอปัญหาเดียวกันหรือมีทางแก้แล้วหรือคิดว่ามีก็ขอให้ช่วยแสดงความคิดเห็นด้วยครับ
ผมคิดว่าปัญหานี้เป็นกันทั่วโลก

ยังไงก็ขอขอบคุณน้ำใจในการแบ่งปันกันไว้ล่วงหน้านะครับ

^^

Gen0TypE
05-04-2009, 11:33 AM
ก่อนอื่นเลย ผมคิดว่า การถามปัญหาควรตั้งในห้อง IT problem consult นะครับ
จะได้เป็นการใช้งานห้องให้ถูกต้อง และเป็นเหมือนการรวม Q&A ในห้อง IT problem consult ด้วย


สำหรับเรื่องปัญหาผมคิดว่าน่าจะเกิดจากการเปิดปิดไฟล์บ่อย (เพื่ออ่านและเขียน)
ซึ่งจริงๆ แล้ว perl จะมี mode ที่อนุญาตให้อ่านและเขียนพร้อมกันได้ คือ "+>" ครับ
ยังไงก็ลองแก้เป็นเปิดไฟล์ครั้งเดียว แล้วเก็บ handle เป็นตัวแปรแบบ global ดูครับ

jaynarol
05-04-2009, 01:38 PM
ขอโทษด้วยนะครับ

พอดีเห็นมันเป็น Perl เลยเข้าหมวดนี้ไว้เผื่อคนอื่นมีปัญหาเหมือนผมจะได้เจอได้รวดเร็ว

แต่ยังไงก็ขอบคุณนะครับ

เดี๋ยวจะลองดูครับ

jaynarol
06-04-2009, 02:47 AM
จากที่ทดลองทั้งหมดไม่ว่าจะลองทำอย่างที่ท่าน Gen0TypE บอก

หรือจะลอง flock ไฟล์ สรุปแล้วก็คือ ไม่มีทางไหนเลยที่ใช้งานได้ดี

ตอนนี้ผมเลิกหลักการเขียนลง text file แล้ว

เปลี่ยนมาใช้แบบติดต่อฐานข้อมูลเอา ผลออกมาคือ เวิร์กสุดยอด

ไม่มีปัญหาดังที่กล่าวมาข้างต้นอีกต่อไป อิอิ