مرحبا يا هبر! هذه المقالة عن المكوّن الإضافي Rainbow CSV الذي كتبته لـ 5 محررات نصية:
VS Code ، Vim ، Sublime Text 3 ، Atom ، Gedit
أعتقد أن العديد من قراء هذه المقالة يواجهون بشكل دوري ملفات CSV (مفصولة بفواصل) ، TSV (مفصولة بعلامات جدولة) وملفات مماثلة. إذا حاولت فتحها في محرر نصوص (ولكن كيف يمكنك اكتشاف ما بداخلها؟) ، سيتم فتح صورة ذات مظهر كامل تمامًا كما هو الحال على الجانب الأيسر من الصورة. بالنظر إلى ذلك ، من الصعب تحديد عدد الأعمدة الموجودة في الجدول. على الجانب الأيمن من الصورة هو نفس الملف مع تشغيل RainbowCSV ، تم تحسين قابلية القراءة بشكل ملحوظ بسبب تمييز بناء الجملة.

ومن الغريب ، يتم تعيين بناء جملة هذا التمييز باستخدام سطر تعبير عادي واحد (وإن كان طويلًا):
((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?
يمكن العثور على قاعدة التظليل بالكامل ، على سبيل المثال ، هنا (نسخة لـ VS Code) ، ولكن بصرف النظر عن التعبير العادي نفسه ، لا يوجد شيء على الإطلاق للنظر إليه.
وبالمقارنة ، فإن ملفات البنية هي للغات للأغراض العامة مثل Python ، JS ، C ++ ، إلخ. عادة ما يأخذ عدة مئات من الأسطر من كود مقصور على فئة معينة.
لكي لا يتم تحميل المقالة بالتفصيل ، لتخمين الأجزاء الأساسية التي تتكون منها وكيف يتم تقديم هذا التعبير العادي للقراء.
تلميح: هنا تعبير بسيط ([^,]*,)?([^,]*,)?
- قم بتمييز ملف CSV بلونين مختلفين مختلفين ، ولكن لن يعمل بشكل صحيح على الفواصل الموجودة داخل الحقول التي تم تخطيها بعلامات اقتباس.
بالمناسبة ، فيما يلي وصف لنسخة Rainbow CSV لـ Visual Studio Code ، لأنه هذا هو إصدار المكون الإضافي الذي يعد حاليًا الأكثر تقدمًا وشعبية من الناحية التقنية (أكثر من 500 ألف عملية تنزيل).
لذلك ، بالإضافة إلى حقيقة أن Rainbow CSV يبرز الأعمدة ، يمكنه أيضًا:
- حدد العمود الذي يشير إليه المؤشر حاليًا: رقم العمود + الاسم من سطر العنوان الأول. إذا لم يكن هناك خط رأس في بداية الملف (يتم نقل البيانات على الفور) ، فيمكن للمستخدم تعيين رأسه "الظاهري".
- افحص الملف تلقائيًا بحثًا عن عدد مختلف من الإدخالات لكل سطر أو للاستخدام غير الصحيح لأحرف الهروب - "CSV Lint".
- قم بتشغيل استعلام يشبه SQL باستخدام مترجم RBQL المدمج ، والذي يسمح لك بتطبيق فئة واسعة جدًا من تحويلات النص على جدول الإدخال.
يدعم RBQL جميع عبارات SQL تقريبًا (SELECT و UPDATE و WHERE و ORDER BY و TOP / LIMIT و JOIN و GROUP BY) بالإضافة إلى جميع الوظائف والبيانات القياسية من JavaScript و Python.
RBQL هي تقنية منفصلة ، لكنها تتناسب جيدًا مع مفهوم Rainbow CSV ، وبالتالي يوفر هذا التكامل العديد من المزايا.
واحدة من أهم ميزات مكونات Rainbow CSV هي الاكتشاف التلقائي لملفات CSV حسب محتواها. هذه الوظيفة ضرورية بسبب غالبًا ما يكون لملفات CSV (أو TSV) امتداد ملف بخلاف .csv (.tsv). يمكنك أيضًا العثور على الملفات ذات الامتداد .csv حيث يتم استخدام الفاصلة المنقوطة بالفعل كفاصل ;
. إن خوارزمية تحديد ملف جدول حسب المحتوى بسيطة للغاية - فقط تحقق من أن عدد الخلايا في كل صف عند انقسام هذا الفاصل ثابت> 1.
مقارنة بين قوس قزح CSV والمحاذاة الرسومية
بشكل عام ، الطريقة التقليدية لعرض بيانات CSV هي استيرادها إلى محرر رسومات مثل Excel.
بالمقارنة مع هذه الطريقة ، فإن Rainbow CSV لها مزايا وعيوب:
المزايا:
- ما تراه هو ما تحصل عليه - يمكنك التأكد من أن ما هو مرئي على الشاشة هو المحتويات الفعلية للملف.
- محيط مألوف لمحرر النصوص المفضل لديك
- تجريد بتكلفة صفرية: تسليط الضوء على بناء الجملة "رخيص" للغاية من وجهة نظر حسابية مقارنة بالمحاذاة الرسومية.
- كثافة أكبر للمعلومات: تناسب المزيد من البيانات على شاشة واحدة - المحاذاة الرسومية "تلتهم" مساحة كبيرة بسبب مساحات المحاذاة.
- القدرة على ربط عمود واحد بشكل مرئي (مظلل بنفس اللون) من نوافذ مختلفة
العيوب:
- يستخدم التطبيق القياسي 10 ألوان مختلفة ، لذلك عندما يكون عدد الأعمدة أكثر من 10 ، تبدأ الألوان في التكرار وتنخفض كفاءة ترميز الألوان للأعمدة.
- لا يوجد دعم لالتفاف الصفوف في الخلايا التي يتم تجاوزها بعلامات اقتباس مزدوجة. هنا يمكنك قراءة تفاصيل هذه المشكلة. ومع ذلك ، أعتقد أن CSV مع فاصل الأسطر داخل الخلايا هو تنسيق غير عملي للغاية.
مقارنة مع محاذاة النص
هناك طريقة أخرى لزيادة إمكانية قراءة ملفات CSV وهي محاذاة المسافات ، ولكن هذه الطريقة تعدل محتويات الملف ، وبالتالي فإن قابلية تطبيقه محدودة للغاية.
أيضًا ، في رأيي ، سهولة قراءة الملف بعد تمييز قوس قزح النحوي أفضل من الملف الذي تمت محاذاته للمسافات.
القليل عن المشروع
تم كتابة الإصدار الأول من Rainbow CSV قبل 5 سنوات لـ Vim استنادًا إلى المكوّن الإضافي rainbow_parentheses . كما ترى ، من هذا المشروع ، استعرت ليس فقط جزءًا من الرمز ، ولكن أيضًا نصف الاسم =)
ظهرت إصدارات VSCode و Atom و Sublime Text 3 قبل عام.
تم اقتراح العديد من الميزات والتحسينات الهامة من قبل مستخدمي المكون الإضافي.
مقارنة بين عملية تطوير البرنامج المساعد لمختلف المحررين
في الختام ، يمكنني إجراء مقارنة صغيرة بين واجهات برمجة التطبيقات لمحرري النصوص الشائعة.
تتشابه واجهات برمجة التطبيقات للمكونات الإضافية لـ VSCode و Atom و Sublime Text 3 تمامًا ، والفرق الرئيسي هو أن امتدادات VS Code و Atom مكتوبة بلغة JavaScript ، و Sublime Text 3 في Python.
يستخدم جميع المحررين الثلاثة نفس محرك regex لإبراز بناء الجملة ، لذا فإن تحريك Rainbow CSV بين هؤلاء المحررين يتطلب فقط الحد الأدنى من التكيف مع النظامي.
بشكل عام ، يمكنني القول أن عملية تطوير المكونات الإضافية الأكثر راحة وملاءمة يتم توفيرها بواسطة VS Code. من ناحية أخرى ، كان لسبب ما أنه يفتقر في البداية إلى بعض الوظائف اللازمة للتشغيل الكامل لـ Rainbow CSV ، ولكن فريق VS Code قد قام بقبول وتحسين العلاقات العامة الخاصة بي ، مما أضاف الطريقة التي أحتاجها.
تختلف كتابة الإضافات لـ Vim اختلافًا كبيرًا عن هؤلاء المحررين الثلاثة الجدد. يستخدم Vim لغة VimScript الخاصة به ، بالإضافة إلى مجموعة متنوعة من الأوامر للتعامل مع محتويات الملفات المفتوحة. يختلف نموذج بناء الجملة الذي يستخدمه Vim للتمييز أيضًا تمامًا عما يقدمه VSCode و Atom و Sublime.
المراجع: