เรียกใช้สคริปต์โดยอัตโนมัติเพื่ออ่านข้อมูลเฉพาะจากไฟล์ .txt ? (สคริปต์ Perl หรือแนะนำ)

สถานการณ์ของฉัน: ไฟล์ข้อความจะเข้ามาในโฟลเดอร์เรื่อยๆ ฉันต้องตรวจจับไฟล์ข้อความใหม่ และอ่านข้อมูลเฉพาะจากไฟล์นั้น โดยบอกว่ามีรูปแบบ (คำ : ข้อมูล หรือคำ และใต้คอลัมน์ข้อมูล ฯลฯ) และกระบวนการนี้จำเป็นต้องดำเนินต่อไปอย่างต่อเนื่อง

ปัญหา: ฉันควรทำอย่างไร ฉันเดาว่าต้องใช้ Perl scipt แต่จะไปที่ไหน ฉันกำลังรับแนวคิด และยังช่วยเหลือทางอินเทอร์เน็ตด้วย แต่ฉันคิดว่าการถามที่นี่อาจ ทำให้ความคิดของฉันชัดเจนขึ้น

กรุณาช่วยกรุณาแนะนำเส้นทางการทำเช่นนี้

ขอแสดงความนับถือ จิรายุ


person Chirayu    schedule 31.03.2011    source แหล่งที่มา


คำตอบ (3)


สิ่งแรก: คุณต้องการกระบวนการ daemon ดังนั้นคุณอาจต้องการดูที่ Proc::Daemon.

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

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

person MarcoS    schedule 31.03.2011
comment
ขอบคุณสำหรับการตอบกลับก่อน ฉันไม่เคยทำสิ่งนี้มาก่อน ดังนั้นฉันจึงกำลังแก้ไขอยู่..ไม่ใช่คนเขียนสคริปต์จริงๆ ฉันกำลังดูกระบวนการ Daemon ที่คุณระบุไว้ และอยากจะบอกว่า กำลังอ่านและแยกวิเคราะห์ไฟล์ ลองนึกภาพไฟล์ข้อความที่เต็มไปด้วยคำหลัก และฉันต้องแยกวิเคราะห์ข้อมูลที่แสดงด้านล่างคำหลักนั้น จนกว่าจะพบคำหลักอื่นและสิ่งเดียวกัน จำเป็นต้องทำ - person Chirayu; 31.03.2011
comment
@Chirayu: เกี่ยวกับการแยกวิเคราะห์ไฟล์และการประมวลผลทุกบรรทัดและคำ คุณพบว่ามีประโยชน์เมื่ออ่าน ตัวอย่างบทที่ 8: เนื้อหาไฟล์จาก Perl Cookbook คุณยังสามารถพบตัวอย่างมากมายบนเว็บ เมื่อคุณมีโค้ดแล้ว คุณอาจต้องการโพสต์มัน และผู้คนใน SO สามารถช่วยคุณได้เพิ่มเติม - person MarcoS; 31.03.2011

วิธีหนึ่งอาจเป็นการใช้กระบวนการ Perl ที่เป็นประจำ (เช่น ทุก 5 วินาที ทุก 5 นาที หรือทุก 5 ชั่วโมง การโทรของคุณจริงๆ) จะสแกนไดเร็กทอรีดังกล่าว และทันทีที่ไฟล์ข้อความใหม่ปรากฏขึ้น ให้วางไข่กระบวนการลูกที่ประมวลผลมัน

กระบวนการลูกอาจเป็นสคริปต์ Perl อื่นซึ่งรับชื่อของไฟล์ข้อความเป็นอาร์กิวเมนต์และอ่านไฟล์ ตรวจจับคำที่คุณพูดถึงแล้วแยกข้อมูลที่คุณสนใจ (จากนั้นทำทุกสิ่งที่คุณพิจารณาว่าจำเป็นกับข้อมูลนั้น ).

สิ่งที่ต้องระวังคือจะทำอย่างไรกับไฟล์ข้อความเมื่อประมวลผลแล้ว พวกเขาควรจะอยู่รอบๆ เหรอ? จากนั้น คุณจะต้องติดตามว่าคุณได้ประมวลผลรายการใดแล้ว เพื่อที่กระบวนการเหล่านั้นจะไม่ได้รับการประมวลผล อีกครั้ง ในกรณีที่กระบวนการหลักของคุณ (กระบวนการที่สแกนไดเร็กทอรีและลูก Perl วางไข่) ต้องเริ่มต้นใหม่ (เนื่องจากความผิดพลาดหรือการรีสตาร์ทโดยเจตนา)

หากไฟล์ข้อความควรจะหายไปเมื่อประมวลผลแล้ว ฉันคิดว่าอาจเป็นความคิดที่ดีที่จะปล่อยให้ลูกๆ ลบมันออกหลังจากเสร็จสิ้น หรือปล่อยให้กระบวนการหลักลบมันออกไป โดยที่กระบวนการหลักจะรอให้ลูกๆ ดำเนินการเสมอ ก่อนที่มันจะวิ่งต่อไป ข้อเสียเปรียบของกระบวนการหลักที่รอให้ลูก ๆ ดำเนินการคือลูก ๆ จะไม่สามารถทำงานแบบคู่ขนานได้ แต่จะต้องรันตามลำดับที่เข้มงวด (ไม่จำเป็นว่าจะต้องเป็นข้อเสียเปรียบ ขึ้นอยู่กับสถานการณ์ของคุณ)

(หากคุณมีกระบวนการหลักที่รอให้กระบวนการลูกทำงานอยู่เสมอ คุณสามารถข้ามกระบวนการลูกไปได้เลย และสร้างรูทีนย่อยในโปรแกรมหลักซึ่งจะอ่านและประมวลผลไฟล์ข้อความ)

คำอธิบายระดับสูง แต่หวังว่าจะช่วยได้

person IllvilJa    schedule 31.03.2011

คุณใช้ระบบปฏิบัติการอะไร?

บน Windows คุณสามารถใช้ Win32::ChangeNotify และบน Linux คุณสามารถใช้ Linux::Inotify2 เพื่อรับการแจ้งเตือนการเปลี่ยนแปลงในเนื้อหาของไดเรกทอรี

สคริปต์ของคุณสามารถรอรับการแจ้งเตือนและดำเนินการเมื่อได้รับแจ้ง แทนที่จะสำรวจเนื้อหาของไดเร็กทอรีซึ่งจะทำให้สิ้นเปลืองทรัพยากรหรืออาจพลาดการเปลี่ยนแปลงบางอย่าง

person Sinan Ünür    schedule 31.03.2011
comment
ใช่ ฉันกำลังคิดถึงเรื่องต่างๆ เกี่ยวกับการเลือกตั้งเท่านั้น แต่กำลังอ่านสิ่งที่คุณแนะนำ...ขอบคุณมากสำหรับการตอบกลับระหว่างกัน อยากถามว่าฉันควรแยกวิเคราะห์ไฟล์ข้อความสำหรับคำหลักและข้อมูลจำนวนมากอย่างไร (ผมไม่ใช่คนเขียนสคริปต์ ดังนั้นขออภัยที่ถามคำถามที่อาจอ่านได้ว่าโง่) - person Chirayu; 31.03.2011