كيفية تقسيم القيم المحددة بفواصل مفردة تحتوي على فواصل في روبي

StackOverflow https://stackoverflow.com/questions/819563

  •  03-07-2019
  •  | 
  •  

سؤال

لنفترض أن لدي سلسلة تحتوي على قيم محددة بفواصل ومحاطة بعلامات اقتباس مفردة قد تتضمن أو لا تتضمن فواصل، مثل هذا:

"'apples,bananas','lemons'"

وأريد تقسيم ذلك إلى مصفوفة

["apples,bananas", "lemons"]

على ما يبدو، إذا أنا split(',') السلسلة التي أحصل عليها

[ "'apples", "bananas'", "lemons" ]

الذي لا أفهمه.الطريقة الوحيدة للقيام بذلك التي توصلت إليها هي

a = []
s = "'apples,bananas','lemons'"
s.scan(/\'([^\']+)\'/){|i| a << i[0]}

# result is ["apples,bananas", "lemons"]

ولكن هل هناك طريقة أكثر أناقة؟هل هناك شيء في طريقة التقسيم لم أفهمه مما يسبب النتيجة الغريبة؟

هل كانت مفيدة؟

المحلول

في الواقع الانقسام يعمل بالطريقة التي من المفترض أن يعمل بها.ولكن يبدو أنك تحاول تقسيم القيم المفصولة بفواصل.ويوجد بالفعل حل لها في Ruby's stdlib:

http://www.ruby-doc.org/stdlib/libdoc/csv/rdoc/index.html

أو إذا كنت تريد مكتبة خارجية (من المفترض أن تكون أفضل وأسرع ...) فاستخدمها أسرعCSV.

نصائح أخرى

ونتيجة #split أمر طبيعي تماما، ليس من المفترض طريقة لtokenize سلسلة بأي شكل من الأشكال. اختيار الطريقة أنت تعرف أن يعمل أكثر من واحد أنيق.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top