ศึกษาเอกสารประกอบของโปรแกรมที่ให้ไฟล์ 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 ฯลฯ)