พึ่งหัดเขียนได้ 3 วัน ครับ พอดีผมอยากแยกข้อมูลใน line ที่ตรงกับข้อมูลใน list ไปไว้อีกไฟล์
แล้วก็ ข้อมูลใน line ที่ไม่ตรงกับข้อมูลใน list ไปไว้อีกไฟล์นึงครับ
ตอนนี้แยก ข้อมูลที่ตรงกับข้อมูลใน list ไปอีกไฟล์ได้แล้ว แต่ส่วนที่เหลือไปไม่เป็นแล้วครับ :)
ตัวอย่างโค๊ดที่เขียนครับ
file_name = "output_file.txt"
tower_emp = ["02721","70015","70041","70029","70059","70065","70111","70081",
"70166","70193","70122","70153","70203","70213","70263","70221"]
tower = "tower.txt"
trading = "trading.txt"
input_file = open(file_name, 'r')
lines = input_file.readlines()
tower_file = open(tower, 'w')
trading_file = open(trading, 'w')
for line in lines:
for i in range(len(tower_emp)):
if tower_emp[i] in line:
tower_data = line
tower_file.write(tower_data)
tower_file.close()
ไม่แน่ใจว่าผมเข้าใจปัญหาถูกหรือปล่าว(ส่วนนึงเพราะไม่ได้ indent code มาด้วย) แต่เท่าที่ดูจาก code เข้าใจว่าขาดแค่
ยังไงก็ตามถ้าผมเข้าใจโจทย์และ indent ไม่ผิด flow แบบที่คุณเขียนอาจทำให้เกิดการเขียนข้อมูล line ไปที่ไฟล์ tower_file/trading_file ซ้ำๆ ได้ในกรณีที่มีข้อมูลใน tower_emp ใน line มากกว่าหนึ่งตัว
อีกข้อสังเกตนึงคือโค้ดอาจจะยาวเกินจำเป็นไปนิดนึงหรือปล่าวครับ ผมอ่านโจทย์ดูแล้วลองปรับเป็นตามด้านล่าง(อาจจะสั้นเกินไปเหมือนกัน มาตามอ่านทีหลัง มีโอกาสงง)
ฝากรบกวนลองเอาไปรันและแจ้งผลนิดนึงนะครับ คือลองปรับแล้วแต่ไม่มีข้อมูลทดสอบ(output_file.txt) อยากรู้ว่ามันเวิร์กหรือปล่าว
ผมก็คิดว่าโค๊ดยาวเกินจำเป็น อ๊าย อาย แหะๆ แต่อย่างที่บอกครับ พึ่งหัดเขียนได้ วันที่ 3 นี้จริงๆ
ผลที่ได้คือ ข้อมูลที่ trading จะเบิ้ลเท่ากับ จำนวนสมาชิกใน list เลยครับ แล้วก็บรรทัดที่มีข้อมูลตรงกับสมาชิกใน List ก็ยังโผล่ที่ trading.txt ครับ
ตัวอย่างข้อมลใน output_file.txt ครับ (เป็นข้อมูลที่ดึงมาจากกล่อง TAFF เครื่องรูดบัตรครับ)
70111 21/11/2552 1800 01
70153 21/11/2552 1804 01
70081 21/11/2552 1834 01
70213 21/11/2552 1901 01
15916 21/11/2552 0713 10
18841 21/11/2552 0723 10
06385 21/11/2552 0734 10
70081 21/11/2552 0754 10
20826 21/11/2552 0906 10
18841 21/11/2552 1700 10
06385 21/11/2552 1700 10
15916 21/11/2552 1700 10
20826 21/11/2552 1707 10
code
ส่วนโค๊ดที่สุดกระชับตัวล่างที่คุณ BLeAm ให้ผมมาใช้ได้ครับ
ขอบคุณมากเลยครับ :)
ครับ :)
ผมว่าที่ผิดเพราะคุณวนลูป tower_emp แล้วมาเทียบกับ line ที่วนลูปอยู่อีกทีอะครับ
ถ้าเอา line มาเทียบกับ tower_emp ไปเลย น่าจะดีกว่านะครับ
โอ กระจ่างเลยครับ ขอบคุณมากครับ