سؤال

لدي سلسلة في روبي، s (قل) والتي قد يكون لها أي من نهايات الخط القياسية (\n, \r\n, \r). اريد تحويل كل من \nس. ما هي أفضل طريقة؟

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

أنيقة، حلول الاصطلاحية الروبي هي الأفضل.

تحرير: أدرك ذلك ^M و \r هي نفسها. ولكن لا تزال هناك ثلاث حالات. (يرى ويكيبيديا.)

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

المحلول

الأفضل فقط للتعامل مع الحالتين الذي تريد تغييره على وجه التحديد وليس محاولة الحصول على ذكي للغاية:

s.gsub /\r\n?/, "\n"

نصائح أخرى

منذ روبي 1.9 يمكنك استخدام String::encode مع universal_newline: true للحصول على جميع خطوطك الجديدة إلى \n مع الحفاظ على ترميزك دون تغيير:

s.encode(s.encoding, universal_newline: true)

مرة واحدة في ولاية نيولين معروفة يمكنك تحويلها بحرية إلى CRLF باستخدام :crlf_newline. وبعد على سبيل المثال: لتحويل ملف غير معروف (ربما مختلط) ينتهي CRLF (على سبيل المثال)، اقرأها في الوضع الثنائي، ثم:

s.encode(s.encoding, universal_newline: true).encode(s.encoding, crlf_newline: true)

أعتقد أن أنظف الحل أنظف هو استخدام تعبير منتظم:

s.gsub! /\r\n?/, "\n"

حاول فتحها على Netbeans IDE - طلبتني من قبل، في أحد المشاريع التي فتحتها من مكان آخر، إذا أردت إصلاح النهايات الخطية. أعتقد أنه قد يكون هناك خيار قائمة للقيام بذلك أيضا، ولكن هذا سيكون أول شيء سأحاوله.

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