سؤال

هل يتعامل برنامجك مع أحرف السطر الجديد من الأنظمة الأخرى؟

Linux/BSD    linefeed         ^J    10     x0A
Windows/IBM  return linefeed  ^M^J  13 10  x0D x0A
old Macs     return           ^M    13     x0D
others?

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

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

المحلول

كما يقولون، كن صارما فيما تكتب وليبراليا فيما تقرأ.

يجب أن يكون تطبيقك قادرًا على العمل بشكل صحيح عند قراءة نهايتي السطرين.إذا كنت تريد استخدام خلاصات الأسطر، ومن المحتمل أن تزعج مستخدمي Windows، فلا بأس بذلك.

لكن باستثناء برنامج "المفكرة"، يبدو أن معظم البرامج التي ألعب بها تكون سعيدة بكلتا الطريقتين.

(وأنا أستخدم Cygwin على نظام التشغيل Windows، مما يجعل كل شيء مثيرًا للاهتمام)

نصائح أخرى

يأتي توزيع Python القياسي مع نصين برمجيين لسطر الأوامر (في الأدوات/البرامج النصية) يُسمى crlf.py وlfcr.py ويمكنهما التحويل بين نهايات أسطر Windows وUnix/Linux.

[مصدر]

في .NET، تتم الإشارة إلى الأسطر الجديدة بواسطة Environment.NewLine, ، لذلك تم تصميم إطار العمل بطريقة تأخذ ما هو سطر النظام الجديد (CR+LF أو CR فقط أو LF فقط) لاستخدامه في وقت التشغيل.بالطبع هذا مفيد في النهاية في Mono.

أظن أنك ستجد أن معظم برامج Windows الحديثة (باستثناء ملحوظ لبرنامج Notepad) تتعامل مع ملفات السطر الجديد فقط بشكل جيد.ومع ذلك، فإن الملفات التي تم إنشاؤها باستخدام برامج Windows لا تزال تميل إلى أن تكون لها نهايات crlf.

في معظم الأحيان، سيتم التعامل مع نهايات الأسطر تلقائيًا بطريقة خاصة بالنظام الأساسي بواسطة مكتبة وقت التشغيل.على سبيل المثال، برنامج C الذي يفتح ملفا مع fopen(..., "r") سوف ترى الخطوط بطريقة متسقة (تغذية الأسطر فقط) على أي نظام أساسي بغض النظر عن نهايات الأسطر الفعلية.

بقدر ما أعرف، فإن برنامج "المفكرة" هو الوحيد الذي يعاني من مشكلة فواصل الأسطر.تقريبًا أي برنامج آخر في العالم يقبل أيًا من هذه الأنواع الثلاثة من الفواصل، وإمكانية استخدام أنواع أخرى أيضًا.لسوء الحظ، يعد برنامج "المفكرة" هو محرر الملاذ الأول لمعظم مستخدمي الكمبيوتر هذه الأيام.أعتقد أنه من غير المسؤول على الإطلاق أن تسمح Microsoft بهذا الوضع.لم ألعب مطلقًا مع نظام التشغيل Vista، ولكن أعتقد أن المشكلة لا تزال موجودة هناك، كما هو الحال في نظام التشغيل XP.هل من أحد يعرف عن الإصدار القادم؟

كما قال آخرون، هناك الكثير من المحولات (التافهة جدًا) الموجودة، إذا دعت الحاجة إلى ذلك.لاحظ أنه إذا قمت بالنقل باستخدام FTP في وضع Ascii، فسيتم إجراء التحويل تلقائيًا...

وبالفعل يعتبر برنامج Notepad من أبرز البرامج التي تعاني من مشكلة إنهاء LF...

أكثر ما رأيته إزعاجًا هو الملفات النصية ذات النهايات المختلطة، والتي يتم إجراؤها بشكل أساسي بواسطة أشخاص يقومون بتحرير ملف Windows على Unix، أو تقوم الأدوات المساعدة بإضافة أشياء دون التحقق من التنسيق الصحيح.

لكي تكون سعيدًا، ما عليك سوى اتباع التوصية الواردة من المعيار.

http://unicode.org/standard/reports/tr13/tr13-5.html

وتقديم خيارات لحالات خاصة مثل نظام التشغيل MacOS القديم.أو تعامل مع الحالة تلقائيًا إذا كان بإمكانك اكتشافها بشكل موثوق.

أوصي بتنسيق النص الخاص بك بأسلوب Unix.نسيان مستخدمي Windows.لأنه لا يوجد مستخدمو Windows يستخدمون نصًا عاديًا للمستند أو البيانات.سوف ينزعجون إذا قمت بتمرير نص عادي.إنهم يتوقعون دائمًا مستند Word أو Excel.حتى أنهم يستخدمون ملفًا نصيًا عاديًا، فإن المشكلة الوحيدة التي سيواجهونها هي عرض النص بشكل غريب.

لكن مستخدمي Unix سيواجهون أن جميع الأدوات الخاصة بهم ستعمل بشكل غير صحيح.خاصة بالنسبة لنظام Unix، اتبع المعيار بدقة.

ملاحظة.أوه، إذا كان مستخدم Windows الخاص بك مطورًا، فما عليك سوى تنسيق النص في Unix، وأخبرهم أن هذا الملف من Unix.

لست متأكدًا مما تقصده عندما تقول "التعامل مع"، ولكن في الأساس يمكنك فقط قول شيء مثل:

string convertLineBreaks(String line, String lineBreakYouWant) {
  replace all ^M^J or ^M or ^J in line with lineBreakYouWant

  return line
}

يحرر: أظن بعد إعادة قراءة سؤالك أنك تقصد كيف تتعامل مع برامج الأشخاص الآخرين التي لا يمكنها التعامل مع فواصل الأسطر غير الصحيحة (بالنسبة للنظام المستهدف).

أود أن أقترح إما 1) استخدام برنامج يمكنه التعامل أو 2) تشغيل ملفاتك من خلال برنامج نصي يبحث عن فواصل الأسطر من أي نوع ثم يحولها إلى أي نوع مناسب لنظامك.

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