3.2المصفوفات والسلاسل والأنواع المتقدمة
الأساسي في 30 ثانية
- المصفوفة المفهرسة تناسب القوائم المرتّبة؛ والمصفوفة الترابطية تسترجع قيمة عبر مفتاح دون تنقّل، وهي مثالية للمطابقات والذاكرة المؤقتة.
- البنية تجمع بيانات مترابطة تحت نوع مسمّى؛ والسلاسل تُقطّع وتُنظّف وتُقارن مع الحذر من الحركات.
- كل تحويل من نص إلى رقم أو تاريخ يجب أن يُراقَب: الفواصل وصيغ التاريخ والقيم الفارغة فخاخ كلاسيكية.
حالة مصغّرة متسلسلة — ياسين يستورد كتالوج المورّد
على ياسين استيراد كتالوج مورّد معدات كهربائية: ملف CSV من عشرين ألف سطر يتضمن رمز المادة والتسمية والسعر والعائلة. يبدأ بتقطيع كل سطر حسب الفاصلة المنقوطة، ثم يتحقق من عدد الأعمدة. لاسترجاع تسمية عائلة دون تنقّل في كامل الملف، يحمّل مرة واحدة المطابقات في مصفوفة ترابطية. يعرّف بنية AdresseLivraison لتجميع الشارع والرمز البريدي والمدينة، بدلًا من تنقّل خمسة متغيرات. وأخيرًا يستبدل الفاصلة العشرية بنقطة ويتأكد من أن السعر رقمي قبل تحويله. ويسجّل المبدأ: النوع الصحيح، المفتاح المباشر، التحويل المراقَب.
حالة مستقلة لهذا القسم: تعود في الدرس والمخطط والسيناريو وتحدي 48 ساعة في القسم 3.2.
1. المصفوفات المفهرسة والترابطية
المصفوفة مجموعة مرتّبة من عناصر من النوع نفسه، يُوصل إليها بـفهرس. يمكن المرور عليها بـPOUR TOUT، والإضافة إليها بـTableauAjoute، وترتيبها والبحث فيها. وهناك مصفوفات ديناميكية يتغيّر حجمها، ومصفوفات متعددة الأبعاد. أما المصفوفة الترابطية فترتّب كل قيمة تحت مفتاح — غالبًا نص، مثل رمز مادة. والوصول مباشر، دون المرور على المجموعة كلها: وهذا مثالي للمطابقات والذاكرة المؤقتة.
2. البنى والسلاسل
البنية نوع تعرّفه أنت لتجميع معلومات مترابطة تحت اسم واحد: بنية Adresse تحتوي الشارع والرمز البريدي والمدينة. وهي تجعل الشيفرة مقروءة وتستبدل حفنة من المتغيرات المبعثرة. وتحتّل السلاسل مكانًا مركزيًا في الإدارة: الدمج، والاستخراج، والقياس بـTaille، والبحث بـPosition، والاستبدال، وتغيير حالة الأحرف، وحذف المسافات، وخصوصًا التقطيع حسب فاصل لقراءة CSV أو بيانات مستوردة.
3. التحويلات والحركات
التحويلات بين النص والرقمي والتاريخ مصدر كلاسيكي للأخطاء: إدخال المستخدم أو ملف مستورد قد يحتوي أي شيء. قبل التحويل، يتحقق ياسين من أن القيمة ليست فارغة، وأن الفاصل العشري صحيح، وأن التاريخ يحترم الصيغة المتوقعة. كما تتطلب الحركات والأحرف الخاصة حذرًا عند المقارنات والترتيب وتبادل الملفات، لأن الترميز قد يغيّر النتيجة.
🔎 مثال ملموس — 🔎 مثال ملموس — تقطيع، مراقبة، فهرسة
يعالج ياسين سطرًا من كتالوج المورّد قبل إدماجه:
// Ligne CSV : code;libelle;prix;famille
sLigne est une chaine = "EL042;Disjoncteur 32A;12,50;Protection"
sColonnes est un tableau de chaines = ChaineDecoupe(sLigne, ";")
SI TableauOccurrence(sColonnes) <> 4 ALORS
Erreur("Ligne invalide : " + sLigne)
RENVOIE Faux
FIN
sPrix est une chaine = Remplace(sColonnes[3], ",", ".")
SI PAS EstNumerique(sPrix) ALORS
Erreur("Prix non numerique pour " + sColonnes[1])
RENVOIE Faux
FIN
nPrixHT est un monetaire = sPrix
tFamilles["Protection"] = "Appareillage modulaire"
القراءة: التقطيع يعزل الحقول، والمراقبة توقف الأسطر المشبوهة.
الدرس: المفتاح «Protection» يمنح وصولًا مباشرًا إلى التسمية، دون تنقّل.
مفردات القسم
- مصفوفة ديناميكية
- مجموعة مرتّبة من عناصر من النوع نفسه، يمكن أن يتغيّر حجمها أثناء التنفيذ.
مثال بسيط: يضيف ياسين كل سطر صالح من الكتالوج بـTableauAjoute.
ما ليس كذلك: بنية تجمع حقولًا مسمّاة.
رد فعل: قائمة مرتّبة متغيّرة → مصفوفة ديناميكية.
- مصفوفة ترابطية
- مجموعة تُرتَّب فيها كل قيمة تحت مفتاح، مع وصول مباشر دون تنقّل.
مثال بسيط: يسترجع ياسين تسمية عائلة عبر رمزها.
ما ليس كذلك: مصفوفة مفهرسة يجب التنقّل فيها للعثور على قيمة.
رد فعل: الاسترجاع بالمفتاح → مصفوفة ترابطية.
- بنية
- نوع يعرّفه المطوّر، يجمع عدة بيانات مترابطة تحت اسم واحد.
مثال بسيط: AdresseLivraison تحتوي الشارع والرمز البريدي والمدينة.
ما ليس كذلك: فئة بطرق وتغليف.
رد فعل: تجميع بيانات → بنية.
- تقطيع سلسلة
- عملية تفصل سلسلة إلى أجزاء حسب فاصل، وهي مفيدة جدًا لـCSV.
مثال بسيط: يقطّع ياسين كل سطر من الكتالوج حسب الفاصلة المنقوطة.
ما ليس كذلك: مقارنة شاملة للسطر دون استخراج الحقول.
رد فعل: قراءة CSV → تقطيع السلسلة.
- تحويل مراقَب
- تحويل نوع إلى آخر بعد التحقق من الصيغة والحالات الحدّية.
مثال بسيط: يتحقق ياسين من السعر قبل تحويله إلى نقدي.
ما ليس كذلك: تحويل إدخال مباشرة دون التحقق من كونه رقميًا.
رد فعل: تغيير النوع → التحقق أولًا.
في التطبيق — عمليًا — التعامل مع المصفوفات والبنى والسلاسل
- أنشئ مصفوفة ديناميكية، واملأها بـTableauAjoute، ومرّ عليها بـPOUR TOUT، كما يفعل ياسين.
- استخدم مصفوفة ترابطية لمطابقة مفتاح ← قيمة (رمز المادة ← التسمية): البحث مباشر.
- عرّف بنية AdresseLivraison لتحل محل عدة متغيرات منفصلة في شاشات الطلب.
- قطّع سطر CSV حسب الفاصل، ثم تحقق من كل قيمة وحوّلها قبل استغلالها.
سيناريو خطوة بخطوة — استيراد كتالوج كما يفعل ياسين (4 دقائق)
1) افتح ملف CSV وحدّد الفاصل وصيغة التواريخ والأسعار. 2) قطّع كل سطر وتحقق من عدد الأعمدة. 3) تحقق من القيم، واستبدل الفاصل العشري عند الحاجة، ثم حوّل. 4) حمّل المطابقات في مصفوفة ترابطية لتجنّب التنقّلات المتكررة. 5) اجمع المعلومات المترابطة في بنية وسجّل الأسطر المرفوضة.
احتفظ بهذا المبدأ: استيراد صامت يقبل كل شيء ينتج بيانات خاطئة، لا توفيرًا للوقت.
قالب للنسخ واللصق — بطاقة الأنواع المتقدمة عند ياسين
المصفوفة : قائمة مرتّبة، فهرس، TableauAjoute، POUR TOUT
الترابطية : مفتاح -> قيمة، وصول مباشر (مطابقات، ذاكرة مؤقتة)
البنية : بيانات مترابطة تحت اسم (AdresseLivraison)
السلسلة : Taille، Position، Remplace، تقطيع حسب فاصل
التحويل : تحقق من الفراغ والصيغة والفاصل قبل التحويل
سعر بفاصلة
يستبدل ياسين الفاصلة بنقطة ويتحقق من القيمة قبل التحويل.
بحث متكرر
يفهرس ياسين العائلات في مصفوفة ترابطية: لا مزيد من التنقّل في كل سطر.
عنوان مبعثر
يجمع ياسين الشارع والرمز البريدي والمدينة في بنية AdresseLivraison.
تاريخ غامض
يفرض ياسين الصيغة المتوقعة ويرفض التواريخ غير المقروءة بدلًا من تخمينها.
✓ ممارسات جيدة
- اختر النوع حسب الوصول المطلوب (فهرس أو مفتاح).
- قطّع السلاسل بدلًا من مقارنة السطر كاملًا.
- تحقق قبل أي تحويل لإدخال أو استيراد.
✗ أخطاء شائعة
- التنقّل في مصفوفة كبيرة للاسترجاع بالمفتاح.
- تحويل سلسلة فارغة أو سيئة الفصل.
- إهمال الحركات وترميز الملفات.
النقاط الأساسية
- مصفوفة مفهرسة للترتيب، ومصفوفة ترابطية للوصول المباشر بالمفتاح.
- البنية تجمع بيانات مترابطة؛ ولا تحمل طرقًا.
- السلاسل تُقطّع وتُنظّف وتُقارن مع الحذر.
- كل تحويل من نص إلى رقم أو تاريخ يجب أن يُراقَب.
تحدي 48 ساعة — طبّقه غدًا
كما يفعل ياسين، خذ ملف CSV حقيقيًا من تطبيقك وقطّع أسطره حسب الفاصل. حمّل مطابقة مفتاح ← قيمة في مصفوفة ترابطية، ثم تحقق من الأسعار والتواريخ وحوّلها قبل استغلالها. وأخيرًا اجمع عنوانًا كاملًا في بنية وسجّل في جملة واحدة الأسطر التي اضطررت إلى رفضها — ولماذا.
- أختار بين المصفوفة المفهرسة والترابطية حسب الوصول.
- أعرف كيف أعرّف بنية بيانات مترابطة وأستخدمها.
- أتحقق من التحويلات والترميزات قبل الاستغلال.
أسئلة شائعة
متى أستخدم مصفوفة ترابطية بدلًا من مصفوفة كلاسيكية؟
عندما تحتاج إلى استرجاع قيمة عبر مفتاح — رمز مادة، رمز عميل، معرّف. فالوصول مباشر، بينما تفرض المصفوفة الكلاسيكية المرور على العناصر. مع عشرة عناصر يكون الفرق غير مرئي؛ ومع عشرين ألف سطر استيراد متكرر يصبح حاسمًا. وتبقى المصفوفة الكلاسيكية مفضلة عندما يكون الترتيب مهمًا أو عند المرور المنهجي على المجموعة كلها.
لماذا تسبب تحويلات الأنواع هذا العدد الكبير من الأخطاء؟
لأن التحويل يفترض أن البيانات بالصيغة المتوقعة، وهو ما لا يكون مضمونًا غالبًا مع إدخال أو ملف خارجي. فاصلة أو نقطة عشرية، تاريخ بصيغة يوم/شهر أو شهر/يوم، مسافات الآلاف، قيمة فارغة: كلها حالات تنتج صفرًا أو قيمة خاطئة دون رسالة. والقاعدة بسيطة: تحقق قبل التحويل، وحدّد الصيغة المتوقعة.
أي نوع تختار لاسترجاع تسمية انطلاقًا من رمز مادة؟