עיין בתיעוד של התוכנית שמספקת את קובץ ה-CSV. קבע את מספר השדות בכל שורה, כמו גם את הפורמט של כל שדה. לדוגמה, אם תוכנית מספקת CSV עם הנתונים הבאים: 1, "מבחן", 34.5 תסמן שלושה שדות: מספר שלם אחד, מחרוזת אחת ומספר נקודה צפה אחת.
צור מבנה המכיל חבר נתונים עבור כל שדה המזוהה ב-CSV. באמצעות שורה לדוגמה שסופקה של 1, "test", 34.5, תזדקק למבנה הבא: struct data { int col1; char *col2; לצוף col3; };
צור שיטה בתוכנית שלך שתטפל בקריאת קובץ ה-CSV. זה יצטרך להיות נגיש לשאר התוכנית שלך, וסביר להניח שיהיה עליו לעבוד על מבני נתונים נפוצים כדי ששיטות אחרות יוכלו לגשת לנתונים שנקראו. העבר את הפרמטר באמצעות הפניה כדי להסיר את הצורך בערך החזרה. אב טיפוס לדוגמה של פונקציה יהיה: void ParseCSV( char *שם קובץ, נתונים& קלט );
צור אובייקט קובץ, שיקרא את הנתונים, באמצעות הקוד הבא: 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);
לקריאות עוקבות מאותה שורה, העבירו ל-"strtok" פרמטר NULL במקום מחרוזת המאגר שקראתם קודם: tok = strtok (NULL, ","") לאחר מכן, המר את האסימון לסוג הנתונים המתאים. שימוש בשורה לדוגמה 1,"test",3.45 קוד הניתוח עבור שורה בודדת יהיה: char *tok = strtok (buf, ","); row.col1 = atoi (tok); tok = strtok (NULL, ","); row.col2 = tok; tok = strtok (NULL, ","); row.col3 = atof (tok);
עשה זאת עבור כל הערכים בכל שורה ב-CSV. הפונקציה "strtok" תמשיך לספק את הנתונים בין ערכי פסיק עד שייגמר הנתונים במאגר, ובשלב זה היא תחזיר NULL. זה יציין שסיימת עם השורה.
אַזהָרָה
הפונקציה "fopen" עשויה להחזיר NULL אם הייתה שגיאה - הקפד לבדוק את הקובץ שלך לפני השימוש בו. במקרים מסוימים, ייתכן שהאסימונים שסופקו לא יהיו בפורמט הצפוי. הקפד לבחון את הנתונים שלך לפני המרה עיוורת על ידי בדיקה מול ערכי שגיאה נפוצים (המחרוזת הריקה, NULL וכו').