كيفية استخدام طريقة "سبليت" في روبي

كما تعلمون ، السلاسل في روبي هي ما يعرف ب كائنات من الدرجة الأولى التي تستخدم عددًا من الأساليب للاستعلامات والتلاعب.

واحدة من أبسط التلاعب بالسلسلة الإجراءات هي تقسيم سلسلة إلى سلاسل فرعية متعددة. يتم ذلك ، على سبيل المثال ، إذا كان لديك سلسلة مثل"فو ، بار ، باز" وتريد الأوتار الثلاثة "foo" و "bar" و "baz". ال انشق، مزق طريقة فئة السلسلة يمكن أن تحقق ذلك لك.

الاستخدام الأساسي لـ "سبليت"

الاستخدام الأساسي لل انشق، مزق الطريقة هي تقسيم سلسلة على أساس حرف واحد أو تسلسل ثابت من الأحرف. إذا كانت الوسيطة الأولى لـ split عبارة عن سلسلة ، يتم استخدام الأحرف في تلك السلسلة كمحدد فاصل للسلسلة ، بينما في البيانات المحددة بفواصل ، يتم استخدام الفاصلة لفصل البيانات.

#! / usr / bin / env ruby
str = "foo، bar، baz"
يضع str.split ("،")
$ ./1.rb
فو
شريط
باز

أضف مرونة مع التعابير العادية

هناك طرق أسهل لتحديد خيط. استخدام تعبير عادي كمحدد يجعل طريقة التقسيم أكثر مرونة.

مرة أخرى ، خذ على سبيل المثال السلسلة "فو ، بار ، باز". هناك مسافة بعد الفاصلة الأولى ، ولكن ليس بعد الثانية. إذا تم استخدام السلسلة "،" كمحدد ، ستظل مسافة موجودة في بداية السلسلة "bar". إذا تم استخدام السلسلة "،" (مع مسافة بعد الفاصلة) ، فستطابق الفاصلة الأولى فقط لأن الفاصلة الثانية لا تحتوي على مسافة بعدها. إنها محدودة للغاية.

instagram viewer

الحل لهذه المشكلة هو استخدام تعبير عادي كوسيطة محدد بدلاً من سلسلة. تسمح لك التعبيرات المنتظمة بمطابقة ليس فقط التتابعات الثابتة للأحرف ولكن أيضًا عدد غير محدد من الأحرف والأحرف الاختيارية.

كتابة التعابير العادية

عند كتابة تعبير عادي عن المحدد الخاص بك ، فإن الخطوة الأولى هي أن تصف بالكلمات ما هو المحدد. في هذه الحالة ، تكون العبارة "فاصلة قد تتبعها مسافة واحدة أو أكثر" معقولة.

هناك عنصران لهذا التعبير العادي: الفاصلة والمسافات الاختيارية. ستستخدم المسافات المُحَدِّد * (النجم أو النجمة) ، والذي يعني "صفر أو أكثر". سيطابق أي عنصر يسبق هذا صفر مرات أو أكثر. على سبيل المثال ، التعبير العادي /a*/ ستطابق تسلسلاً من صفر أو أكثر من الأحرف.

#! / usr / bin / env ruby
str = "foo، bar، baz"
يضع str.split (/، * /)
$ ./2.rb
فو
شريط
باز

تحديد عدد الانقسامات

تخيل سلسلة قيمة مفصولة بفواصل مثل "10،20،30 ، هذه سلسلة اعتباطية". هذا التنسيق هو ثلاثة أرقام متبوعة بعمود تعليق. يمكن أن يحتوي عمود التعليق هذا على نص عشوائي ، بما في ذلك النص الذي يحتوي على فواصل فيه. كى تمنع انشق، مزق من تقسيم نص هذا العمود ، يمكننا تعيين الحد الأقصى لعدد الأعمدة للتقسيم.

ملحوظة: لن يعمل هذا إلا إذا كانت سلسلة التعليق مع النص التعسفي هي العمود الأخير من الجدول.

للحد من عدد الانقسامات التي ستؤديها طريقة التقسيم ، قم بتمرير عدد الحقول في السلسلة كوسيطة ثانية إلى طريقة التقسيم ، كما يلي:

#! / usr / bin / env ruby
str = "10،20،30 و عشرة وعشرون وثلاثون"
يضع str.split (/، * /، 4)
$ ./3.rb
10
20
30
عشرة وعشرون وثلاثون

مثال المكافأة!

ماذا لو كنت تريد استخدامه انشق، مزق للحصول على جميع العناصر ولكن العنصر الأول؟

إنه في الواقع بسيط للغاية:

أولا ، * بقية = مثال الانقسام (/ ، /)

معرفة القيود

طريقة الانقسام لديها بعض القيود الكبيرة إلى حد ما.

خذ على سبيل المثال السلسلة '10، 20، "Bob، Eve and Mallory"، 30 '. المقصود هو رقمان ، يليهما سلسلة مقتبسة (قد تحتوي على فواصل) ثم رقم آخر. لا يمكن للانقسام فصل هذه السلسلة بشكل صحيح إلى حقول.

للقيام بذلك ، يجب أن يكون الماسح الضوئي سلسلة الدولة، مما يعني أنه يمكن أن يتذكر ما إذا كان داخل سلسلة مقتبسة أم لا. الماسح الضوئي المقسم ليس بحالة ، لذلك لا يمكنه حل مشاكل مثل هذه.