কিভাবে Linux এবং উইন্ডোজগুলিতে \ n এবং \ r ভিন্নভাবে পরিচালিত হয়?


20

আমি মনে করি \n সুই নিচে, এবং \r একটি লাইন শুরু (বাম সারিবদ্ধ) সূঁচ সরানো? আমি নিশ্চিত, যদিও না। তাই, যদি আমি ভুল হয়ে যাই তবে আমাকে ঠিক করুন।

যাইহোক, আমি জানানো হয়েছিল যে উইন্ডোজ এবং লিনাক্স হ্যান্ডেল newlines এবং carriage returns ভিন্নভাবে। আমি কিভাবে তারা মনে রাখা গুরুত্বপূর্ণ যে তারা তাদের বিভিন্নভাবে এবং কিভাবে কিছু মনে রাখা পরিচালনা করতে চান। উত্তর করার জন্য ধন্যবাদ.


এতদূর আমি জানি যে \r\n কিন্তু উইন্ডোজ ঠিক আছে \n\r না, এবং আমি যে কারণ মনে রাখবেন \r\n নিবন্ধিত নার্স জন্য একটি পরিসংখ্যান। আমি যে শুনতে \n মানুষ কি লিনাক্সে ব্যবহার করে \r একই উদ্দেশ্যে জন্য একা ব্যবহার করা হয় না \r\n\r সত্যিই পুরানো MacOS ব্যবহার করা হয়। আমি এই তথ্য যাচাই না করে, যদিও।
千里ちゃん

4
তাদের কল করবেন না \r এবং \n, কিভাবে থেকে \n পরিচালনা করা হয় যেখানে আপনি এটি ব্যবহার করছেন উপর নির্ভর করে। তাদের কল ভাল CR এবং LF
Ignacio Vazquez-Abrams

Ignacio, যারা acronyms আমার কোন অর্থ আছে। আপনি এই কল কি: /? ওহ ... লাইন ফিড এবং ক্যারিয়ার রিটার্ন। ধন্যবাদ, sleske।
千里ちゃん

@ ইগনাসিওভেজুইজ-আব্রামস \ N LF এর সমান নয়? কোন ASCII চার্টে, অক্ষর নয় 13 = \ n = এলএফ?
barlop

1
@ বার্লপ: উইন্ডোজ এ আউটপুট করার সময় সি তে নেই।
Ignacio Vazquez-Abrams

উত্তর:


18

আমার মনে হয় \ n সুইকে নিচে নামিয়ে আনুন, এবং \ সূঁকে সরিয়ে নিন   একটি লাইন শুরু (বাম সারিবদ্ধ)? আমি নিশ্চিত, যদিও না

এই সত্য, আরো বা কম, কিন্তু বেশিরভাগই একটি ঐতিহাসিক কৌতূহল। মূলত, লাইনফিড (এলএফ) প্রিন্টার এবং হার্ডকপি টার্মিনালগুলির উপর এক লাইনের মাধ্যমে কাগজ আগাম করতে ব্যবহৃত হয় ( teleprinters ); গাড়ী ফেরত (সিআর) লাইন শুরুতে মুদ্রণ মাথা ফিরে।

"টেক্সট মোডে" ব্যবহৃত হলে এটি সম্ভবত আধুনিক মুদ্রকগুলিতে কাজ করে, তবে অন্যথায় এটি সামান্য প্রাসঙ্গিকতা নয়।

যাইহোক, আমাকে বলা হয়েছিল যে উইন্ডোজ এবং লিনাক্স নতুন লাইন এবং ক্যারেজ পরিচালনা করে   ভিন্নভাবে ফেরত।

পার্থক্যটি সহজভাবে: OS ফাইল ডিজাইনারদের কম্পিউটার ফাইলগুলির পাঠ্যতে একটি নতুন লাইনের শুরুকে কীভাবে উপস্থাপন করতে হবে তা চয়ন করতে হয়েছিল। বিভিন্ন ঐতিহাসিক কারণে, ইউনিক্স / লিনাক্স জগতে একটি একক এলএফ চরিত্রটি নতুন লাইন হিসাবে নির্বাচিত হয়েছিল; এমএস-ডস সিআর + এলএফ বেছে নিয়েছে, এবং উইন্ডোজ এটি উত্তরাধিকারী। সুতরাং বিভিন্ন প্ল্যাটফর্ম বিভিন্ন সম্মেলন ব্যবহার।

অনুশীলনে, এটি একটি সমস্যা কম এবং কম হয়ে উঠছে। নিউলাইন মার্কারটি কেবলমাত্র "প্লেইন পাঠ্য" প্রক্রিয়াগুলির জন্য কেবলমাত্র পোগ্রামের জন্য প্রাসঙ্গিক এবং এটি অনেকগুলি নয় - এটি বেশিরভাগই কেবল প্রোগ্রাম সোর্স কোড, কনফিগারেশন ফাইল এবং ডকুমেন্টেশন সহ কিছু সহজ পাঠ্য ফাইলকে প্রভাবিত করে। আজকাল এই ধরনের ফাইল পরিচালনা করা (সম্পাদক, কম্পাইলার ইত্যাদি) বেশিরভাগ প্রোগ্রামই নতুন লাইনের কনভেনশনগুলি পরিচালনা করতে পারে, তাই এটি কোনও ব্যাপার নয় যা আপনি চয়ন করেন।

এমন কিছু ক্ষেত্রে যেখানে সরঞ্জামগুলি "তাদের" নতুন লাইনের কনভেনশনগুলিতে উদ্বুদ্ধ হয় (উদাঃ ইউনিক্স শেল স্ক্রিপ্টগুলিতে CR + LF ব্যবহার করা উচিত নয়), এই ক্ষেত্রে আপনাকে সঠিকটি ব্যবহার করতে হবে।


প্রশ্ন একই লাইন: প্রোগ্রাম ভাষা চিনতে না \n\r এবং \n একই হচ্ছে? উদাহরণস্বরূপ, যদি আমি অন্য কোনও পিসির উপর সম্পাদনা করা একটি পাঠ্য ফাইল বিশ্লেষণ করছিলাম এবং লাইন বিরতির লিনাক্স এবং উইন্ডোজ সংস্করণ উভয়ই অন্তর্ভুক্ত করতাম তবে preg_match জন্য \n এবং \n\r আমাকে বিভিন্ন ফলাফল দিতে?
千里ちゃん

@ 千里 ち ゃ ん: এটি সম্পূর্ণরূপে প্রোগ্রামিং ভাষা, কম্পাইলার ইত্যাদির উপর নির্ভর করে। বিশেষ করে, আপনি যদি রেজেক্স ব্যবহার করেন তবে এটি আপনার ব্যবহৃত রেজেক ইঞ্জিনের উপর নির্ভর করবে - কিছু ভিন্ন লাইন শেষের মধ্যে পার্থক্য করে, কিছু না করে (বেশিরভাগই কোন ভাবেই কনফিগার করা যেতে পারে, আমি বিশ্বাস করি).
sleske

@ 千里 ち ゃ ん: আপনার যদি কোন সিস্টেম / প্রোগ্রামিং ভাষা / নিয়মিত অভিব্যক্তি ইঞ্জিন বিভিন্ন নতুন লাইন কনভেনশনগুলি পরিচালনা করে তবে এটি একটি পৃথক প্রশ্ন হিসাবে জিজ্ঞাসা করুন।
sleske

আপনি লিখুন উচিত \ r \ n আপনি ভুল পথে রাউন্ড না। প্রোগ্রামিং ভাষা হিসাবে, তারা পৃথক অক্ষর পড়তে সক্ষম হবে এবং আপনি প্রোগ্রামার ইনপুট ব্যবহার করতে পারেন দেখতে পারেন, এবং আপনি আউটপুট জন্য ইচ্ছুক হিসাবে প্রোগ্রামার এছাড়াও করতে পারেন। ঠিক যেমন আপনি বলতে পারেন "এবিসি লিখুন \ r \ r \ r \ n" কোনও অক্ষর যা আপনি শেষ করতে চান! কিছু অন্যান্য অক্ষর অ মুদ্রণযোগ্য হতে পারে এবং কোন গ্রাফিকাল বা যাই হোক না কেন। তারা কিছু println মত ফাংশন নির্মিত হতে পারে, এবং তারা তাদের নতুন লাইন জন্য ব্যবহার কি এক বা অন্য হতে পারে, এটা উভয় হতে পারে না।
barlop

@ 千里 ち ゃ ん এবং কিছু প্রোগ্রামিং ভাষা আপনাকে কোনটি তাদের অন্তর্নির্মিত ফাংশনগুলির মধ্যে একটি সেটিং হিসাবে শেষ করতে দেয় তা চয়ন করতে পারে, তাই এমন একটি অন্তর্নির্মিত ফাংশনেও যা আপনি করতে পারেন .. যাই হোক না কেন। + উল্লিখিত হিসাবে, অনুশীলনে আপনি যে লাইনে শেষ করতে চান তা লিখতে পারেন ... যদিও আপনি একটি println ফাংশনের মতো দক্ষতার সাথে এটি করতে সক্ষম হবেন না।
barlop

12

সিআর এবং এলএফ

আমেরিকান ইন্টারন্যাশনাল কোড ফর ইনফরমেশন ইন্টারচেঞ্জ (এএসসিআইআই) কেরিয়ারেজ-রিটার্ন (সিআর) এবং লাইন-ফিড (এলএফ) সহ কন্ট্রোল-ক্যারেক্টার সংজ্ঞায়িত করেছিল যা (এবং এখনও) প্রিন্টারগুলিতে মুদ্রণকারীর অবস্থানের সাথে সামঞ্জস্যপূর্ণ প্রাথমিক কম্পিউটার প্রিন্টার আগে যে যান্ত্রিক টাইপরাইটার।

প্ল্যাটফর্ম নির্ভরতা

উইন্ডোজগুলিতে টেক্সট ফাইলে ঐতিহ্যগত লাইন-বিভাজক সিআর অনুসরণ করে LF অনুসরণ করে

পুরোনো (প্রাক ওএসএক্স) অ্যাপল ম্যাকিনটোশ সিস্টেমগুলি পাঠ্য ফাইলগুলিতে ঐতিহ্যগত লাইন বিভাজক সিআর ছিল

ইউনিক্স এবং লিনাক্সে, পাঠ্য ফাইলগুলিতে ঐতিহ্যগত লাইন-বিভাজক এলএফ হয়।

\ n এবং \ r

অনেক প্রোগ্রামিং এবং স্ক্রিপ্টিং ভাষায় \n মানে "নতুন লাইন"। কখনও কখনও (কিন্তু সর্বদা নয়) এর অর্থ হচ্ছে অ্যাসি লাইন-ফিড চরিত্র (এলএফ), যা আপনি বলছেন, কার্সারটি (বা মুদ্রণ অবস্থান) এক লাইনের নীচে সরানো হয়। একটি প্রিন্টার বা টাইপরাইটারে, আসলে এটি একটি লাইনকে উপরে সরানো হবে।

invariably \r এর মানে হল আস্সি ক্যারিয়ার-রিটার্ন চরিত্র (সিআর) যার নাম আসলে যান্ত্রিক টাইপরাইটারগুলির কাছ থেকে আসে যেখানে একটি ক্যারিয়ার-রিটার্ন কী ছিল যা রোলার ("ক্যারেজ") তৈরি করেছিল যা কাগজটিকে ডানদিকে সরানোর জন্য একটি বসন্ত দ্বারা চালিত করেছিল, যেমন যতদূর যেতে হবে। সুতরাং বর্তমান টাইপিং অবস্থান বাম মার্জিন সেট।

প্রোগ্রামিং

কিছু প্রোগ্রামিং ভাষায় \n একটি অক্ষরগুলির একটি প্ল্যাটফর্ম-নির্ভর ক্রম যার অর্থ একটি টেক্সট ফাইলে শেষ বা আলাদা হতে পারে। উদাহরণস্বরূপ পার্ল, print "\n" উইন্ডোজের চেয়ে লিনাক্সে অক্ষরের একটি ভিন্ন ক্রম তৈরি করে।

জাভাতে, সর্বোত্তম অনুশীলনগুলি, আপনি রানটাইম প্ল্যাটফর্মের জন্য নেটিভ লাইন শেষ ব্যবহার করতে চান তবে এটি ব্যবহার করা হয় না \n অথবা \r সব। আপনি ব্যবহার করা উচিত System.getProperty("line.separator")। আপনি ব্যবহার করা উচিত \n এবং \r প্ল্যাটফর্মের নির্বিশেষে আপনি এলএফ এবং সিআর চান যেখানে (HTTP, FTP এবং অন্যান্য ইন্টারনেট যোগাযোগ প্রোটোকলগুলিতে ব্যবহৃত)।

ইউনিক্স স্টটি

একটি ইউনিক্স শেল, মধ্যে stty শেলকে এই বিভিন্ন সম্মেলনের মধ্যে অনুবাদ করার জন্য কমান্ড ব্যবহার করা যেতে পারে। উদাহরণ স্বরূপ stty -onlcr শেলটি পরবর্তীতে সিআর এলএফ-এ সমস্ত আউটগোয়িং এলএফগুলিকে অনুবাদ করতে পারে।

লিনাক্স এবং ওএসএক্স ইউনিক্স কনভেনশন অনুসরণ করুন

টেক্সট ফাইল

টেক্সট ফাইল এখনও অত্যন্ত গুরুত্বপূর্ণ এবং ব্যাপকভাবে ব্যবহৃত হয়। উদাহরণস্বরূপ, এইচটিএমএল এবং এক্সএমএল টেক্সট ফাইল উদাহরণ। বেশিরভাগ গুরুত্বপূর্ণ ইন্টারনেট প্রোটোকল, যেমন HTTP, টেক্সট-ফাইল কনভেনশনগুলি অনুসরণ করে এবং লাইন-শেষের জন্য বিশেষ উল্লেখগুলি অন্তর্ভুক্ত করে।

প্রিন্টার্স

খুব সস্তা তুলনায় অন্যান্য প্রিন্টার, এখনও সিআর এবং এলএফ সম্মান। আসলে তারা সবচেয়ে ব্যাপকভাবে ব্যবহৃত পৃষ্ঠা বর্ণনা ভাষাগুলির জন্য মৌলিক - পিসিএল এবং পোস্টস্ক্রিপ্ট।


1
জাভাতে উল্লেখ্য: এটি সাধারণত সত্য নয় যে আপনাকে "\ n বা \ r \ r ব্যবহার করা উচিত নয়"। এটা শুধু জাভাতে, "\ n" সর্বদা LF, এবং "\ r" সর্বদা CR হয়। এই may আপনি যা চান তা হ'ল: যদি আপনি একটি নির্দিষ্ট লাইন শেষ স্টাইল চান তবে তাদের ব্যবহার করুন; যদি আপনি স্পষ্টতই যে স্থানীয় কম্পিউটারটি চালু করছেন সেটি শেষ করতে চান, তারপর ব্যবহার line.separator। এটা সত্যিই আপনি চান কি উপর নির্ভর করে।
sleske

এবং বিটিডব্লিউ, println() স্বয়ংক্রিয়ভাবে ব্যবহার করে line.separator, তাই যদি আপনি নেটিভ লাইন শেষ করতে চান, আপনি ব্যবহার করতে পারেন println() (এবং যদি আপনার কোনও নির্দিষ্ট নির্দিষ্ট লাইন সমাপ্তির প্রয়োজন হয়, তবে এটি ব্যবহার করবেন না, তবে "\ n" ইত্যাদি স্পষ্টভাবে ব্যবহার করুন)।
sleske

@ এসলেস্ক: ভাল পয়েন্ট। আমি সেই অনুযায়ী আমার উত্তর আপডেট করব।
RedGrittyBrick

1
যেখানে কোন ভাষা বা কম্পাইলার আছে \n ASCII LF (EBCDIC- ভিত্তিক সিস্টেমের ব্যতীত) ছাড়া অন্য কোনও নিয়ন্ত্রণ চরিত্র? আমি কি উল্লেখ করছি \n একটি স্ট্রিং বা চরিত্র আক্ষরিক অর্থ, এটি একটি ফাইল বা আউটপুট ডিভাইসে পাঠানোর প্রভাব নয়।
Keith Thompson

1
@ কিথ থম্পসন: জাভা জন্য: হ্যাঁ, \n সর্বদা ASCII (এবং ইউনিকোড) কোড 10, কারণ JLS স্পষ্টভাবে বলে (JLS 3.10.6, "ক্যারেক্টার এবং স্ট্রিং লিটারেলস এর জন্য অ্যাক্সেস সিকোয়েন্সস" - আমি চেক করেছি :-))। অন্যান্য ভাষার জন্য - ভাল প্রশ্ন।
sleske

3

সংক্ষেপে, প্রিন্টারের জন্য প্রয়োজন ছিল, কিন্তু এখন অপারেটিং সিস্টেমগুলি এটি ভিন্নভাবে করে। বেশিরভাগ ক্ষেত্রেই এটি ঠিক করে সিআর এবং এলএফ উভয়ই করা ভাল \r\n এবং অধিকাংশ ক্ষেত্রে, এই জরিমানা কাজ করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.