سؤال

أنا أكتب برنامج على لينكس منصة توليد نص الملفات التي سيتم عرضها على وحتما منصة ويندوز.

الآن يمر std::endl في ostream يولد CR حرف فقط أسطر.بطبيعة الحال هذه الملفات النصية نظرة خاطئة في MS "المفكرة".

  1. هل هناك طريقة لتغيير std::endl من النوع الذي يستخدم CR+اذا السطر بدلا من إذا ؟
  2. وأنا أعلم أنني يمكن أن أكتب بلدي مخصص مناور مثل 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-الملفات فقط على ما يرام.

هذه المشكلة هو خلل في "المفكرة".

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

بهذه الطريقة نفس القانون سوف يبصقون بها على يونكس ، على ويندوز ، على ماك.

هنا كان لي حل لهذه المشكلة.انها قليلا من الهريس متابعة من جميع المعلومات المقدمة في الردود:

  1. أنا إنشاء ماكرو في win_endl.ساعة الملف عن السطر أردت:

    #define win_endl "\r\n"
    
  2. ثم عملت بحث و استبدال:

    sheepsimulator@sheep\_machine > sed -i 's/std::endl/win_endl' *
    

وضمان كل ما عندي من الملفات المدرجة win_endl.h.

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