สวัสดีและยินดีต้อนรับกลับ
ในการบรรยายครั้งนี้ ฉันต้องการ พูดคุยเกี่ยวกับการเขียนไปยังไฟล์
เราจะมุ่งมั่น ในการเขียนลงในไฟล์ข้อความ
สิ่งที่เรากำลังจะเรียนรู้เกี่ยวกับ คือวิธีเขียนอักขระ วิธีเขียนสตริง
และวิธี คุณสามารถเขียนเอาต์พุตที่จัดรูปแบบได้
สามวิธีเช่นกันที่ เราสามารถอ่านได้
จึงมีสามฟังก์ชันที่ คุณต้องคุ้นเคยกับการทำสิ่งเหล่านี้จริงๆ
การดำเนินการเขียนที่ง่ายที่สุดคือ มีให้ในฟังก์ชัน fputc
เหมือนมีfgetc สำหรับการอ่านตัวอักษร มี fputc
สำหรับเขียนตัวอักษร
นี้จะเขียนเดียว อักขระไปยังไฟล์ข้อความ fputc.
ไม่มีประสิทธิภาพเท่ากับการเขียน สตริง แต่บางครั้งก็จำเป็น
มันใช้จำนวนเต็มเป็นของมัน พารามิเตอร์แรกและตัวชี้ไฟล์เป็นพารามิเตอร์ที่สอง
และส่งกลับจำนวนเต็ม
ฟังก์ชันเขียน อักขระที่ระบุโดยอาร์กิวเมนต์แรกของไฟล์
ระบุโดยอาร์กิวเมนต์ที่สอง
ดังนั้นตัวชี้ไฟล์จึงหมายถึง สิ่งที่ทำอยู่เสมอ: ไฟล์ที่คุณต้องการเขียนถึง
แล้วตัวละครคุณ ที่จริงต้องการเขียนถึงเป็นพารามิเตอร์แรกของคุณ
อักขระที่ส่งคืนคือสิ่งที่ ถูกเขียนขึ้นหากสำเร็จ
จำไว้ว่าถ้ามันกลับมา eof มันหมายความว่ามันเป็นความล้มเหลว
ถ้ามันส่งคืนสิ่งอื่นที่ไม่ใช่ eof หมายความว่าประสบความสำเร็จ
ในทางปฏิบัติ ตัวละครคือ มักจะไม่เขียนลงในไฟล์จริงทีละรายการ
มันไม่มีประสิทธิภาพอย่างยิ่ง
ฟังก์ชัน putc คือ เทียบเท่ากับ fputc
คุณมักจะเห็นสิ่งนี้ใช้เช่นกัน
มันต้องมีอาร์กิวเมนต์เดียวกัน และประเภทการส่งคืนจะเหมือนกัน
ความแตกต่างระหว่างพวกเขาคือ ว่า putc อาจถูกนำไปใช้ในไลบรารีมาตรฐานเป็นมาโคร
ในขณะที่ fputc เป็นฟังก์ชันเช่นนั้น
ไม่ต่างกันมาก แต่ เราไม่ได้เรียนรู้เกี่ยวกับมาโคร
ดังนั้นเราจะยึดติดกับ fputc สำหรับเขียนอักษรตัวเดียว
และตัวอย่างเช่น มันคือ ค่อนข้างตรงไปตรงมา
สิ่งแรกที่ต้องทำเช่นเคย คือคุณต้องเปิดไฟล์.
ก่อนหน้านั้นเราจะประกาศของเรา ตัวแปรที่เราประกาศตัวชี้ไฟล์ควรจะเริ่มต้นเป็นโมฆะ
แล้วจำนวนเต็มของเราซึ่ง เราจะเขียน
เมื่อเราเปิดไฟล์ของเรา คุณจะ สังเกตว่าเราทำ w หรือ w plus
W หมายความว่าเรากำลังจะไป เขียนอย่างเดียวอ่านไม่ได้
W plus หมายความว่าคุณสามารถเขียนและอ่านได้
ในกรณีนี้เราสามารถเขียนและอ่านได้
ที่นี่เรามี for loop
เราจะผ่านทั้งหมด ตัวอักษรเริ่มต้นที่ 33 ถึง 100
เมื่อสิ่งเหล่านี้เป็นจำนวนเต็ม อะไร ซึ่งหมายความว่าเป็นอักขระที่แสดงในตาราง
ASCII
ดังนั้นถ้าคุณเขียนตัวอักษรเช่น 59 คุณต้องค้นหามันในตาราง ASCII เพื่อดูว่ามันหมายถึงอะไร
แต่มันจะเป็นตัวละครที่แท้จริง
เราก็แค่เขียน ASCII มีค่า 33 ถึง 100 และเรากำลังบอกว่า
fputc char fp
และคุณสามารถใช้การแปลง ฟังก์ชันถ้าคุณต้องการสร้างค่า
ASCII และจำนวนเต็ม คุณสามารถใช้ atoi ได้
ดังนั้น ถ้าคุณต้องการเขียน อักขระ c คุณสามารถพูดว่า fputc atoi
แล้วใส่ c ในเครื่องหมายคำพูดเดี่ยว
ก็คงดีเหมือนกัน เพราะมันจะแปลง ASCII เป็นจำนวนเต็มและเขียนมัน
แต่อาร์กิวเมนต์แรกเป็นจำนวนเต็ม ดังนั้นคุณต้องเขียนจำนวนเต็ม
อาร์กิวเมนต์ที่สองคือไฟล์ของเรา ตัวชี้ค่อนข้างตรงไปตรงมาที่นั่น
และแล้วสิ่งสุดท้ายที่เราต้อง ทำคือเราต้องปิดไฟล์นั้น
เราอาจจะต้องการ ตั้งค่าตัวชี้ fp เป็นโมฆะ
แต่อีกครั้ง มันต้องใช้จำนวนเต็ม
ดังนั้นจงระวังที่นั่น
เป็นตัวแทนเสมอ ในตาราง ASCII
แต่คุณสามารถแปลงค่าจริงได้ อักขระสองจำนวนเต็มโดยใช้ atoi
วิธีการเขียนสตริง ไปเป็นไฟล์ข้อความ มีประโยชน์มากกว่า
มีประสิทธิภาพมากกว่า
นี่คือที่ที่คุณใช้ ฟังก์ชัน fputs
นี้จะช่วยให้คุณ เขียนไปยังไฟล์หรือสตรีมใด ๆ
มันคล้ายกับ fgets มัน รับสตริงประจุคงที่ที่คุณต้องการเขียนเป็น
พารามิเตอร์แรกไปยังตัวชี้
และมันต้องใช้ a เป็นที่สองของเรา พารามิเตอร์, ตัวชี้ไฟล์, ไฟล์ใดที่คุณต้องการเขียน
แล้วส่งกลับค่า int
อาร์กิวเมนต์แรกคือของเรา ชี้สตริงอักขระที่คุณต้องการเขียน
อาร์กิวเมนต์ที่สองคือ file ตัวชี้เองและฟังก์ชันจะเขียนอักขระจากสตริง
จนกว่าจะถึงจุดสิ้นสุดที่เป็นโมฆะ
มันไม่ได้เขียนค่าว่าง อักขระเทอร์มิเนเตอร์ลงในไฟล์ ดังนั้นคุณต้องเขียนให้ชัดเจน
สิ่งนี้อาจทำให้สิ่งต่าง ๆ ซับซ้อนเพราะ เมื่อคุณอ่านข้อมูลกลับ
อาจเป็นความยาวผันแปรและมัน จะไม่สิ้นสุดที่เทอร์มิเนเตอร์ null
ดังนั้นคุณต้อง-- คาดหวังว่ามันจะเขียน
a บรรทัดข้อความที่มีอักขระขึ้นบรรทัดใหม่ต่อท้าย
เพื่อให้แน่ใจว่าคุณคุ้นเคย ด้วยตัวสิ้นสุด
null และเขียนอย่างชัดเจนโดยใช้ fputc อักขระตัวเดียวหรือเขียนมันและโดยทั่วไปจะเพิ่มอักขระบรรทัดใหม่
ในตอนท้ายหลังจากที่คุณเขียนมัน
ดังนั้นจึงคาดว่าใหม่ อักขระบรรทัดที่จะอยู่ที่นั่น
คุณต้องระบุให้ชัดเจนว่า
อันนี้ค่อนข้างตรงไปตรงมา ในแง่ของรหัส
คุณแค่พูดว่า fopen
Fputs เขียนสตริงใน บรรทัดใหม่โดยใช้ตัวชี้ไฟล์
แล้วอีก fputs ที่นี่เขียน สตริงอื่นแล้วคุณปิดมัน
ในกรณีนี้ เราเขียนสอง สตริง, โค้ดสองบรรทัดจริง ๆ หรือสองบรรทัดในไฟล์และเรา
เปิดไฟล์ด้วย w plus สำหรับอ่านและเขียน
ตัวอย่างการเขียนคือ ค่อนข้างตรงไปตรงมา
คุณเพียงแค่เรียกฟังก์ชั่นสองสามอย่าง fopen แล้วก็ fputs แล้วก็ fclose
ตอนนี้สำหรับการเขียนเอาต์พุตที่จัดรูปแบบแล้ว เราจะใช้ fprintf
อีกครั้งคุณจะสังเกตเห็นว่าด้วย scanf เพื่ออ่านและป้อนข้อมูลและ
printf คุณเพียงแค่เพิ่มว่า fprefix ก่อนฟังก์ชันและคุณกำลังเขียนเอาต์พุตที่จัดรูปแบบ
ดังนั้นสำหรับการเขียนผลลัพธ์ที่จัดรูปแบบ ด้วย fprintf จะส่งกลับจำนวนเต็ม
ใช้สตรีมไฟล์เป็น พารามิเตอร์แรกแล้วตามด้วยตัวระบุรูปแบบ
ด้วยเครื่องหมายจุลภาคที่มีจำนวนตัวแปรของอาร์กิวเมนต์สำหรับแต่ละรูปแบบ
ตัวระบุเช่นเดียวกับ printf จริงๆ
อาร์กิวเมนต์แรกของฟังก์ชัน เป็นตัวชี้ไปยังวัตถุไฟล์
แล้วอาร์กิวเมนต์ที่สองคือ จำนวนตัวแปรของอาร์กิวเมนต์เหล่านั้น
เป็นสตริง c ที่มีหนึ่ง หรือมากกว่ารายการต่อไปนี้
อักขระช่องว่าง ไม่ใช่ช่องว่าง อักขระ ตัวระบุรูปแบบ
และอีกครั้ง มันมาก คล้ายกับ printf
แต่คุณกำลังเขียนไปยังไฟล์จริงๆ
เพื่อให้คุณสามารถเขียนรูปแบบ ส่งออกไปยังไฟล์.
ถ้าสำเร็จก็คืนมา จำนวนตัวอักษรที่เขียน
ไม่งั้นก็จะ ส่งกลับจำนวนลบหากไม่สำเร็จ
ดูเหมือนบางอย่างเช่นนี้
คุณรวมส่วนหัว IO มาตรฐาน
คุณสร้างตัวชี้ไฟล์ของคุณ
จากนั้นคุณใช้ตัวชี้ไฟล์ของคุณ เพื่อเปิดไฟล์ข้อความ ใช้สำหรับ w
plus สำหรับอ่านและเขียน แล้วคุณก็พูดว่า fprintf
ในกรณีนี้ เรากำลังพูดว่า fprintf
เรากำลังระบุไฟล์ ตัวชี้ จากนั้น เรากำลังระบุสี่สตริงที่คั่นด้วย
a ช่องว่างและเปอร์เซ็นต์ d
และเรากำลังเขียน สวัสดีหมายเลขของฉัน 555
จริงๆ แล้วไฟล์จะมี ข้อมูลที่จัดรูปแบบเมื่อคุณเขียน
ลองดูสิ่งนี้ในบล็อคโค้ด และดูว่ามีลักษณะอย่างไร
ดังนั้นจึงมีโค้ดไม่มากนักในที่นี้
เรามีโค้ดเพียงไม่กี่บรรทัด
ในบรรทัดที่สี่ พวกเรา การสร้างตัวชี้ไฟล์ของเรา
และอีกครั้งเราต้องการ เริ่มต้นสิ่งนี้เป็นโมฆะ
จากนั้นในบรรทัดที่ 6 เราเรียก fopen
และเราบอกว่าเปิดไฟล์ txt ดังนั้น ไฟล์. txt จะต้องมีอยู่และไม่ว่าจะอยู่ที่ใดที่ไฟล์ต้นฉบับ
c กำลังทำงานอยู่ หรือหากคุณกำลังเรียกใช้โปรแกรมด้วยตนเองไม่ว่าที่ใดก็ตามที่โปรแกรมเรียกทำงานอยู่นั้น
กำลังจะเปิดเลย สำหรับการอ่านและการเขียน
หลังจากที่เราเปิดดู เราต้องการให้แน่ใจว่าตัวชี้ไฟล์ไม่เป็นค่าว่าง
ดังนั้นเราจึงต้องการบอกว่าไม่ใช่ fp
ถ้ามันไม่เป็นโมฆะ เราก็ สามารถเริ่มเขียนข้อมูลได้
และในกรณีนี้ ในบรรทัดที่ 9 เราคือ กำลังจะเขียนข้อมูลที่จัดรูปแบบ
ที่เราจะเขียนก็คือ เราจะเขียนหนึ่งสตริง สองสตริง
สามสตริง สี่ สตริงแล้วเป็นจำนวนเต็ม
แล้วพารามิเตอร์ต่อไปคือ แค่สตริงที่คั่นด้วยเครื่องหมายจุลภาคและจำนวนเต็มของเราที่ส่วนท้าย
ฉันแค่ต้องแก้ไขคู่นี้ คำพูดเพราะมันไม่ถูกต้องดังนั้น 555 จึงอยู่ท้ายสุดตรงนั้น
แล้วมันจะปิด ไฟล์และส่งคืน
มาลองสร้างกันดูนะครับ นี้และเรียกใช้และเราจะไม่เห็นผลจริงใด
ๆ สำหรับการทำงาน
เราจะต้องดู ว่าไฟล์มีลักษณะอย่างไร
ดังนั้นเมื่อเรารวบรวมไฟล์นี้ คุณต้องการให้แน่ใจว่าคำสั่ง
if ของคุณบอกว่าไม่เท่ากับ null
เมื่อเรารันสิ่งนี้อีกครั้ง คุณจะไม่เห็นผลลัพธ์ใด
ๆ มันจะทำงาน
แล้วเมื่อคุณดูไฟล์ ภายในไดเร็กทอรี คุณจะเห็นว่ามีอินพุตอยู่ในไดเร็กทอรีเดียว
ไลน์ สวัสดีฉันชื่อ fpp หรือที่ 555
นั่นคือวิธีที่คุณทำได้ เขียนเอาต์พุตที่จัดรูปแบบ
มันค่อนข้างตรงไปตรงมา
คุณสามารถเพิ่มใหม่ เส้นถ้าคุณต้องการ
มันจะเพิ่มบรรทัดใหม่ในตอนท้าย แต่คุณสามารถใส่แบ็กสแลช n ตรงนี้ได้
มันทำงานเหมือนกับ printf
อีกครั้งที่เราต้องเรียกใช้เรา ไม่เห็นผลลัพธ์ที่น่าสนใจจริงๆ
จนกว่าคุณจะดูไฟล์
และในกรณีนั้น คุณจะเห็นการป้อนบรรทัด
ดังนั้นการเขียนผลลัพธ์ไปยังไฟล์ ค่อนข้างตรงไปตรงมา
คุณต้องการเขียนตัวอักษร คุณ ทำ fputc
คุณต้องการเขียนสตริง fputs จัดรูปแบบเอาต์พุต fprintf
เราจะมีความท้าทายบางอย่างที่ ช่วยให้คุณคุ้นเคยกับสิ่งนี้มากขึ้น
แต่ก็ค่อนข้างง่ายที่จะ เขียนเอาต์พุตไปยังไฟล์ข้อความ
ขอขอบคุณ.