วิธีอ่านไฟล์ CSV ใน C

click fraud protection

ศึกษาเอกสารประกอบของโปรแกรมที่ให้ไฟล์ CSV กำหนดจำนวนฟิลด์ในแต่ละบรรทัด ตลอดจนรูปแบบของแต่ละฟิลด์ ตัวอย่างเช่น หากโปรแกรมจัดเตรียม CSV ด้วยข้อมูลต่อไปนี้: 1, "test", 34.5 คุณจะต้องทำเครื่องหมายฟิลด์สามฟิลด์: หนึ่งจำนวนเต็ม หนึ่งสตริง และหนึ่งหมายเลขทศนิยม

สร้างโครงสร้างที่มีสมาชิกข้อมูลสำหรับแต่ละฟิลด์ที่ระบุใน CSV การใช้บรรทัดตัวอย่างที่ให้มาของ 1, "test", 34.5 คุณจะต้องมีโครงสร้างต่อไปนี้: struct data { int col1; ถ่าน * col2; โฟลต col3; };

สร้างวิธีการในโปรแกรมของคุณที่จะจัดการกับการอ่านไฟล์ CSV สิ่งนี้จะต้องเข้าถึงได้ในส่วนที่เหลือของโปรแกรมของคุณ และอาจต้องทำงานกับโครงสร้างข้อมูลทั่วไป เพื่อให้วิธีการอื่นๆ สามารถเข้าถึงข้อมูลที่อ่านแล้วได้ ส่งพารามิเตอร์โดยการอ้างอิงเพื่อลบความจำเป็นในการคืนค่า ตัวอย่างฟังก์ชันต้นแบบจะเป็น: void ParseCSV( char *filename, data& input );

สร้างวัตถุไฟล์ซึ่งจะอ่านในข้อมูลโดยใช้รหัสต่อไปนี้: FILE * pInput;

สร้างบัฟเฟอร์อักขระขนาดใหญ่พอที่จะเก็บไฟล์ได้ครั้งละหนึ่งบรรทัด เนื่องจากข้อจำกัดของภาษา วิธีที่ง่ายที่สุดในการทำเช่นนี้คือการประกาศอาร์เรย์อักขระที่มีขนาดใหญ่เพียงพอ เช่นเดียวกับ: #define BUFFER_SIZE 1024

เปิดไฟล์ด้วยรหัสต่อไปนี้ และกำหนดให้กับวัตถุ FILE ที่สร้างไว้ก่อนหน้านี้: pInput = fopen("filename," "r")

fgets (buf, sizeof (buf), pInput)

แยกวิเคราะห์ CSV โดยใช้ฟังก์ชัน "strtok" สร้างสตริงอักขระใหม่เพื่อชี้ไปที่โทเค็น และเริ่มต้นโดยใช้ข้อมูลจากบรรทัดที่อ่านด้านบน: char *tok = strtok (buf, ",")

แปลงโทเค็นที่ได้รับเป็นข้อมูลที่เหมาะสม ใช้บรรทัดตัวอย่าง: 1, "test", 3.45 แปลงข้อมูลที่มีอยู่ใน "tok" เป็นจำนวนเต็มโดยใช้รหัสต่อไปนี้: row.col1 = atoi (tok);

สำหรับการอ่านที่ตามมาจากบรรทัดเดียวกัน ให้ส่งพารามิเตอร์ NULL "strtok" แทนสตริงบัฟเฟอร์ที่คุณเคยอ่านมาก่อน: tok = strtok (NULL, ",") จากนั้นให้แปลงโทเค็นเป็นประเภทข้อมูลที่เหมาะสม ใช้ตัวอย่างบรรทัดที่ 1,"test",3.45 รหัสการแยกวิเคราะห์สำหรับบรรทัดเดียวจะเป็น: char *tok = strtok (buf, ","); row.col1 = atoi (ต๊อก); tok = strtok (โมฆะ, ","); row.col2 = ต๊อก; tok = strtok (โมฆะ, ","); row.col3 = atof (tok);

ทำเช่นนี้กับรายการทั้งหมดในแต่ละบรรทัดของ CSV ฟังก์ชัน "strtok" จะยังคงให้ข้อมูลระหว่างค่าจุลภาคจนกว่าข้อมูลในบัฟเฟอร์จะหมด จากนั้นฟังก์ชันจะคืนค่าเป็น NULL นี่จะบ่งบอกว่าคุณได้เสร็จสิ้นกับบรรทัด

คำเตือน

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

หมวดหมู่

ล่าสุด

วิธีรับเครื่องหมายอัศเจรีย์คว่ำบน Mac

วิธีรับเครื่องหมายอัศเจรีย์คว่ำบน Mac

ต้องเปิดใช้งานมุมมองอักขระผ่านเมนูการตั้งค่าระ...

วิธีรับเสียงเรียกเข้าฟรีบนคริกเก็ต

วิธีรับเสียงเรียกเข้าฟรีบนคริกเก็ต

เพลงยอดนิยมจากศิลปินที่คุณชื่นชอบสามารถใช้เป็น...

วิธีสร้างและอัปโหลดเสียงเรียกเข้าของคุณเอง

วิธีสร้างและอัปโหลดเสียงเรียกเข้าของคุณเอง

คุณสามารถใช้เสียงเรียกเข้าที่แตกต่างกันสำหรับผ...