تغيير std::endl لاخماد CR+LF بدلا من إن
سؤال
أنا أكتب برنامج على لينكس منصة توليد نص الملفات التي سيتم عرضها على وحتما منصة ويندوز.
الآن يمر std::endl
في ostream
يولد CR حرف فقط أسطر.بطبيعة الحال هذه الملفات النصية نظرة خاطئة في MS "المفكرة".
- هل هناك طريقة لتغيير
std::endl
من النوع الذي يستخدم CR+اذا السطر بدلا من إذا ؟ - وأنا أعلم أنني يمكن أن أكتب بلدي مخصص مناور مثل
win_endl
, لتوليد بلدي أسطر ، ولكن يمكنني استخدامstd::endl
الرمز في الكثير من الأماكن ، مثل العديد من المبرمجين لديهم ميل إلى فعل الشيء الذي يتطلب أقل عمل ممكن.يمكنني ببساطة الزائدstd::endl
لإنتاج CR+LF أو أن هذه فكرة غبية الصيانة?
ملحوظة::تفقدت هذا السؤال, لكنه يسأل عن طريقة أخرى و تقبل الإجابة تبدو غير مكتملة.
المحلول
فتح ملف في وضع النص يجب أن يسبب std::endl
يمكن تحويلها إلى الخط المناسب إنهاء النظام الأساسي الخاص بك.المشكلة أن السطر هو ملاءمة النظام الأساسي الخاص بك, ولكن الملفات التي تقوم بإنشائها لا يقصد النظام الأساسي الخاص بك.
لست متأكدا كيف كنت تخطط على الحمولة الزائدة أو تغيير endl
, وتغيير سلوكها بالتأكيد يكون مفاجئا لأي المطورين جديدة إلى المشروع الخاص بك.أنصح التحول إلى win_endl (يجب أن تكون بسيطة البحث و استبدال) أو ربما الانتقال من معيار ostream
إلى دفعة.Iostreams تصفية تيار للقيام التحويل بالنسبة لك.
نصائح أخرى
std::endl
هو أساسا:
std::cout << "\n" << std::flush;
حتى مجرد استخدام "\r\n"
بدلا من ذلك وحذفت دافق.انها أسرع من هذا الطريق أيضا!
من ostream رأس الملف على endl:
هذا مناور كثير من الأحيان عن طريق الخطأ عند بسيطة السطر المطلوب ، مما يؤدي إلى سوء التخزين المؤقت الأداء.
المفكرة Windows هو الى حد كبير فقط برنامج ويندوز ستجد أن لا تحمل LF-فقط الملفات بشكل صحيح.كل شيء آخر تقريبا (بما في ذلك الدفتر) مقابض LF-الملفات فقط على ما يرام.
هذه المشكلة هو خلل في "المفكرة".
لا يجب استخدام .مجرد استخدام ، لكن ثم فتح تيار في "النص" الوضعية التي من شأنها التحويل بالنسبة لك.قد لا يهتمون عبر منصة ، ولكن هذه هي الطريقة الرسمية من القيام بذلك.
بهذه الطريقة نفس القانون سوف يبصقون بها على يونكس ، على ويندوز ، على ماك.
هنا كان لي حل لهذه المشكلة.انها قليلا من الهريس متابعة من جميع المعلومات المقدمة في الردود:
أنا إنشاء ماكرو في win_endl.ساعة الملف عن السطر أردت:
#define win_endl "\r\n"
ثم عملت بحث و استبدال:
sheepsimulator@sheep\_machine > sed -i 's/std::endl/win_endl' *
وضمان كل ما عندي من الملفات المدرجة win_endl.h
.