كيفية تقسيم القيم المحددة بفواصل مفردة تحتوي على فواصل في روبي
-
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 سلسلة بأي شكل من الأشكال. اختيار الطريقة أنت تعرف أن يعمل أكثر من واحد أنيق.