يُفحص ملف CSV عند فتحه من حيث البنية: مطابقة كل سجل لعدد حقول صف العناوين، والعناوين الفارغة والمكررة، وعلامات الاقتباس الشاردة، ونهايات الأسطر المختلطة، والأسطر الفارغة. ويمكن إضافة قواعد اختيارية لكل عمود، مثل عدد صحيح أو تاريخ أو بريد إلكتروني أو قيمة مطلوبة أو فريدة أو قيم مسموح بها أو تعبير نمطي، فتُدرج كل مشكلة مع صف البيانات والعمود والقيمة. تعتمد القواعد مفردات Table Schema من Frictionless. يُفحص الملف في متصفحك ولا يُرفع.
طريقة التحقق من ملف CSV
- افتح ملف
.csv أو .tsv أو .txt. يُكتشف المحدِّد وعلامة ترتيب البايت لـUTF-8 أو UTF-16؛ وإذا بدت الأعمدة خاطئة يمكن اختيار محدِّد آخر أو ترميز قديم من إعدادات الاستيراد. - يمكن اختياريًا إدخال عدد الأعمدة الذي يجب أن يكون في كل سجل. وإذا تُرك فارغًا يُعتمد عدد أعمدة صف العناوين.
- يمكن اختياريًا إضافة قواعد للأعمدة المهمة: النوع، وهل القيمة مطلوبة أو يجب أن تكون فريدة، والقيم المسموح بها، والحد الأدنى والأقصى، ونطاق الطول، أو نمط.
- شغّل الفحص وراجع التقرير: الأخطاء أولًا ثم التحذيرات. أصلِح القيم في محرر CSV أو رتّبها بأداة تنظيف CSV، ثم أعِد التحقق.
لمعرفة أنواع كل عمود وقيمه الفارغة والمميزة قبل كتابة القواعد، استخدم الوصف الإحصائي للملف في تحليل CSV.
فحوص البنية
| عدد الحقول (خطأ) | في السجل حقول أكثر أو أقل من صف العناوين، أو من العدد الذي أدخلته. يتوقع RFC 4180 أن يكون لكل السجلات العدد نفسه من الحقول؛ وعدم التطابق يعني عادةً محدِّدًا خارج علامات الاقتباس أو قيمة مفقودة. |
|---|---|
| عنوان فارغ (خطأ) | اسم عمود فارغ أو لا يحتوي إلا مسافات. ويذكر التقرير موضعه. |
| عنوان مكرر (خطأ) | اسما عمودين متطابقان بعد إزالة المسافات. ويذكر التقرير الموضعين. |
| علامة اقتباس شاردة (تحذير) | تظهر علامة اقتباس داخل قيمة غير محاطة بعلامات اقتباس، مثل 5" screen. تبقى القيمة كما كُتبت، ويذكر التقرير عددها في الملف. |
| نص بعد علامة الاقتباس الختامية (تحذير) | أحرف تلي علامة الاقتباس الختامية قبل المحدِّد التالي، كما في "abc"x. |
| نهايات أسطر مختلطة (تحذير) | يخلط الملف بين نهايات السجلات CRLF وLF وCR. ويعدّ التقرير كل نوع. |
| أسطر فارغة (تحذير) | أسطر فارغة بين السجلات. تُتخطّى ويعدّها التقرير. |
| مسافات محيطة (تحذير) | قبل نص القيمة أو بعده مسافات. مفعّل افتراضيًا، ولا يُبلَّغ عن القيم التي لا تحتوي إلا مسافات. |
القيمة المفتوحة بعلامة اقتباس التي لا تُغلق أبدًا توقف الفحص برسالة خطأ تذكر السجل الذي تبدأ فيه، لأن باقي الملف لا يمكن تقسيمه إلى سجلات بشكل موثوق.
قواعد الأعمدة
| النوع: عدد صحيح | إشارة اختيارية وأرقام فقط، مثل -12 أو 007. يُبلَّغ عن القيم التي تتجاوز ±9,007,199,254,740,991، لذا تُستخدم قاعدة نصية مع نمط للمعرّفات الطويلة. |
|---|---|
| النوع: رقم | صيغة عشرية بسيطة بنقطة، مثل 3.5 أو -0.25 أو 1e3. دون فواصل آلاف أو عملات أو مسافات محيطة. |
| النوع: منطقي | true أو false بأي حالة أحرف. ويُبلَّغ عن 1 و0 وyes وno. |
| النوع: تاريخ، تاريخ ووقت | تاريخ تقويمي حقيقي بصيغة YYYY-MM-DD، فيُبلَّغ عن 2024-02-30. ويضيف «تاريخ ووقت» وقتًا (2024-03-05T09:30، مع ثوانٍ وإزاحة Z أو +02:00 اختيارية). |
| النوع: نص بتنسيق | بريد إلكتروني (فحص بسيط لشكل name@domain.tld لا لإمكانية التسليم)، أو URI (عنوان URL مطلق مع البروتوكول)، أو UUID (الإصدارات من 1 إلى 8). |
| مطلوب | يجب ألا تكون القيمة فارغة. ودون هذه القاعدة تجتاز القيم الفارغة كل القواعد الأخرى. |
| فريد | لا يجوز تكرار أي قيمة في العمود. ويذكر التقرير الصف الذي ظهرت فيه أول مرة. ولا تُقارَن القيم الفارغة. |
| القيم المسموح بها | يجب أن تساوي القيمة إحدى القيم المدرجة تمامًا، بما في ذلك حالة الأحرف والمسافات. |
| الحد الأدنى، الحد الأقصى | حدود شاملة لأعمدة الأعداد الصحيحة والأرقام، أو تواريخ ISO لأعمدة التاريخ والتاريخ والوقت. |
| الحد الأدنى والأقصى للطول | يُعدّ بأحرف Unicode، فيُحسب كل من é و日 حرفًا واحدًا. |
| نمط | تعبير نمطي يجب أن يطابق القيمة كاملة كما يشترط Table Schema؛ مثل [A-Z]{2}\d{4}. والمطابقة حساسة لحالة الأحرف. |
تنطبق القاعدة على العمود الذي يطابق عنوانه اسمها تمامًا؛ وتُتخطّى قواعد الأعمدة غير الموجودة في الملف. ويمكن حفظ القواعد في ملف JSON بصيغة Table Schema وتحميلها مرة أخرى للتصدير التالي؛ وتُتجاهَل الأنواع والمفاتيح غير المعروفة في المخطط المحمَّل.
قراءة التقرير
- تعدّ أرقام الصفوف سجلات البيانات بعد صف العناوين (صف العناوين هو الصف 0). والقيمة التي فيها فاصل سطر داخل علامات اقتباس تبقى سجلًا واحدًا، لذا قد يختلف رقم الصف عن رقم السطر في محرر النصوص.
- تذكر كل مشكلة عمودها وتقتبس قيمتها، فيمكن البحث عنها في عارض CSV أو في المحرر.
- الأخطاء تكسر البنية أو قاعدة ما؛ أما التحذيرات فتشير إلى بيانات صالحة من حيث CSV لكنها كثيرًا ما تسبب مشكلات عند الاستيراد.
- تُدرج 5 آلاف مشكلة على الأكثر. وبعد ذلك يستمر عدّ الإجمالي لكل نوع من المشكلات، وتُوسم القائمة بأنها مقتطعة.
الحدود والخصوصية
يقرأ المدقق سجلًا واحدًا في كل مرة، لذا تُفحص الملفات التي تتجاوز الحد التفاعلي البالغ 25 ميغابايت تدفقيًا في عامل خلفي، مع عرض التقدم وإمكانية الإلغاء. وفي الوضع التدفقي تُكمَّل حاليًا السجلات التي فيها حقول أقل من صف العناوين قبل الفحص، فلا يُبلَّغ عن خطأ عدد الحقول إلا للسجلات التي فيها حقول زائدة.
يجري التحقق في متصفحك، ولا يُرفع ملف CSV إلى أي خادم.
مثال
ملف تسجيلات مُصدَّر فُحص بأربع قواعد: id عدد صحيح مطلوب وفريد؛ وemail نص مطلوب بتنسيق بريد إلكتروني؛ وsignup_date تاريخ؛ وplan يقبل basic وpro وteam. الناتج تقرير المدقق، مشكلة في كل سطر بعد الملخص: تاريخ مستحيل، وبريد بلا لاحقة نطاق، وPro بحالة أحرف خاطئة، ومعرّف مكرر، وبريد مفقود، وteam بمسافة في آخرها، وهي تحذير وقيمة غير مسموح بها في آن واحد.
id,email,signup_date,plan 1,ana@example.com,2024-02-30,pro 2,kim@example,2024-03-01,Pro 2,bao@example.com,2024-03-04,basic 4,,2024-03-05,team
{"rows":4,"errors":6,"warnings":1,"truncated":false}
{"code":"type","row":1,"column":"signup_date","value":"2024-02-30","params":{"type":"date"}}
{"code":"format","row":2,"column":"email","value":"kim@example","params":{"format":"email"}}
{"code":"enum","row":2,"column":"plan","value":"Pro","params":{"allowed":"basic, pro, team"}}
{"code":"unique","row":3,"column":"id","value":"2","params":{"first":2}}
{"code":"whitespace","row":4,"column":"plan","value":"team ","params":{}}
{"code":"required","row":4,"column":"email","value":"","params":{}}
{"code":"enum","row":4,"column":"plan","value":"team ","params":{"allowed":"basic, pro, team"}}أسئلة وأجوبة
لماذا يُبلَّغ عن قيمة فيها مسافات رغم وجودها في قائمة القيم المسموح بها؟
تقارن القواعد القيمة كما كُتبت تمامًا دون إزالة المسافات، فـteam ليست team. أزِل المسافات من العمود بأداة تنظيف CSV أو أصلِح التصدير.
هل يغيّر التحقق ملفي؟
لا. يقرأ الملف فقط ويبلّغ بما يجده. والإصلاح يكون في المحرر أو في النظام المصدر.
هل يمكن إعادة استخدام القواعد نفسها لكل تصدير شهري؟
نعم. احفظ القواعد في ملف JSON بصيغة Table Schema وحمّله في المرة التالية؛ إذ تُربط القواعد بالأعمدة حسب الاسم.