كيف تقرأ ملف CSV في لغة سي

راجع وثائق البرنامج الذي يوفر ملف CSV. حدد عدد الحقول في كل سطر ، بالإضافة إلى تنسيق كل حقل. على سبيل المثال ، إذا قدم أحد البرامج ملف CSV بالبيانات التالية: 1 ، "اختبار" ، 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)؛

للقراءات اللاحقة من نفس السطر ، مرر "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 ، إلخ).