\ R এবং \ n এর মধ্যে পার্থক্য কী?


245

কিভাবে \rএবং \nপৃথক? আমি ইউনিক্স বনাম উইন্ডোজ বনাম ম্যাকের সাথে কিছু করার আছে বলে আমি মনে করি তবে তারা ঠিক কীভাবে আলাদা, এবং রেজিজেসগুলিতে কোনটি অনুসন্ধান করতে / ম্যাচ করতে হবে তা আমি নিশ্চিত নই।


1
এর জন্য একটি ভাষার ট্যাগ দরকার। বিভিন্ন ভাষার বিভিন্ন ব্যাখ্যা রয়েছে '\n'
অ্যাড্রিয়ান ম্যাকার্থি

উত্তর:


383

তারা বিভিন্ন চরিত্র। \rহ'ল ক্যারেজ রিটার্ন, এবং \nলাইন ফিড।

"পুরানো" মুদ্রকগুলিতে, \rমুদ্রণ শিরোনামটি আবার লাইনের শুরুতে প্রেরণ করে এবং \nকাগজটিকে এক লাইনে উন্নত করে। উভয়ই পরবর্তী লাইনে মুদ্রণ শুরু করা আবশ্যক ছিল।

অবশ্যই এটি এখন কিছুটা অপ্রাসঙ্গিক, যদিও কনসোলের উপর নির্ভর করে আপনি এখনও \rলাইনটির শুরুতে যেতে এবং বিদ্যমান পাঠ্যটি ওভাররাইট করতে ব্যবহার করতে সক্ষম হতে পারেন ।

আরও গুরুত্বপূর্ণ, ইউনিক্স \nএকটি লাইন বিভাজক হিসাবে ব্যবহার করতে ঝোঁক ; উইন্ডোজ \r\nএকটি লাইন বিভাজক এবং ম্যাকগুলি (ওএস 9 পর্যন্ত) লাইন বিভাজক হিসাবে ব্যবহৃত\r হিসাবে ব্যবহার করতে ঝোঁক । (ম্যাক ওএস এক্স ইউনিক্স-ওয়াই, সুতরাং \nপরিবর্তে ব্যবহার করে; কিছু সামঞ্জস্যের পরিস্থিতি থাকতে পারে যেখানে \rপরিবর্তে ব্যবহৃত হয়))

আরও তথ্যের জন্য, উইকিপিডিয়া নিউলাইন নিবন্ধটি দেখুন

সম্পাদনা: এটি ভাষা সংবেদনশীল। সি # এবং জাভাতে, উদাহরণস্বরূপ, \n সর্বদা ইউনিকোড ইউ + 000 এ এর ​​অর্থ লাইন ফিড হিসাবে সংজ্ঞায়িত। সি এবং সি ++ এর মধ্যে জলটি কিছুটা শঙ্কিত হয়, কারণ এর অর্থ প্ল্যাটফর্ম-নির্দিষ্ট। বিশদ জন্য মন্তব্য দেখুন।


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

35
পুরানো লোকদের জন্য আর একটি +1। আপনি এখনও উইন্ডোজ কমান্ড প্রম্পটে Ctrl + G টি আঘাত করতে পারেন, এন্টার টিপুন এবং পিসি স্পিকার বীপ করবে। এটি প্রাচীন কাল থেকে বাকি আছে।
ডেভ কার্লাইল

@ ক্রেপি কোডিং গাই সত্যি? ভিস্তার উপর, এটি কেবল বলেছেন "" 'অভ্যন্তরীণ বা বাহ্যিক আদেশ হিসাবে স্বীকৃত নয় "
পোনকাদুডল

2
@ অ্যাড্রিয়ানম্যাকার্থি: অবশ্যই প্রশ্নটি এখানে আসলে সি বা সি ++ নির্দিষ্ট করে না । C #, উদাহরণস্বরূপ \n হয় সম্পর্কে newline (অধ্যায় 2.4.4.4) হতে নিশ্চিত। অবশ্যই, ওপি প্ল্যাটফর্মটি নির্দিষ্ট করে দিলে এটি চমৎকার হবে ... তদুপরি, আমি মনে করি যে এই স্তরের বিশদটি কেবল তাত্পর্যপূর্ণ জিজ্ঞাসা করা কারও পক্ষে উপকারী হওয়ার চেয়ে আরও বিভ্রান্তিকর হবে।
জন স্কিটি

2
@AdrianMcCarthy কিন্তু অন্তত C # এবং জাভা, এটা হল লাইন ফিড। এটি ইউ +000 এ, যা ইউনিকোড দ্বারা নামকরণ করেছে "লাইন ফিড" (এবং নতুন লাইন)। আমি সি এবং সি ++ এর বিশেষ ক্ষেত্রে উল্লেখ করার জন্য সম্পাদনা করব, তবে আমি সত্যই বিশ্বাস করি যে এটি বিশেষ ক্ষেত্রে, অন্যভাবে নয়।
জন স্কিটি 21

91

সি এবং সি ++ এ, \nএকটি ধারণা, \rএকটি চরিত্র, এবং \r\n(প্রায় সর্বদা) একটি বহনযোগ্যতা বাগ।

একটি পুরানো টেলি টাইপ চিন্তা করুন। মুদ্রণ শিরোনামটি কিছু লাইনে এবং কিছু কলামে অবস্থিত। আপনি যখন মুদ্রণযোগ্য অক্ষরটি টেলি-টাইপে প্রেরণ করেন এটি অক্ষরটি বর্তমান অবস্থানে মুদ্রণ করে এবং পরবর্তী কলামে মাথাটি সরিয়ে দেয়। (এটি ধারণাগতভাবে টাইপরাইটার হিসাবে একই, টাইপ রাইটাররা সাধারণত মুদ্রণ শিরোনামের সাথে কাগজ সরিয়ে নিয়েছিল।)

আপনি যখন বর্তমান লাইনটি শেষ করতে এবং পরবর্তী লাইনে শুরু করতে চেয়েছিলেন তখন আপনাকে দুটি পৃথক পদক্ষেপ করতে হয়েছিল:

  1. প্রিন্ট হেডটিকে লাইনের শুরুতে ফিরে যান, তারপরে
  2. এটি পরের লাইনে নামান।

এএসসিআইআই এই দুটি ক্রিয়াকলাপকে দুটি স্বতন্ত্র নিয়ন্ত্রণের অক্ষর হিসাবে এনকোড করে:

  • \x0D(সিআর) মুদ্রণ শিরোনামটি লাইনের শুরুতে ফিরে যায়। (ইউনিকোড এটিকে এনকোড করে U+000D CARRIAGE RETURN))
  • \x0A(এলএফ) মুদ্রণ শিরোনামটি পরবর্তী লাইনে নামায়। (ইউনিকোড এটিকে এনকোড করে U+000A LINE FEED))

টেলি টাইপস এবং প্রারম্ভিক প্রযুক্তি মুদ্রকগুলির দিনগুলিতে লোকেরা প্রকৃতপক্ষে এই দুটি পৃথক ক্রিয়াকলাপ ছিল বলে সুবিধা গ্রহণ করেছিল। কোনও এলএফ দ্বারা অনুসরণ না করে সিআর প্রেরণ করে আপনি ইতিমধ্যে মুদ্রিত লাইনে মুদ্রণ করতে পারবেন। এটি অ্যাকসেন্ট, গা bold় প্রকার এবং আন্ডারলাইনের মতো প্রভাবগুলির অনুমতি দেয়। পাসওয়ার্ডগুলি হার্ডকপিতে দৃশ্যমান হতে বাধা দিতে কয়েকটি সিস্টেম বহুবার ওভারপ্রিন্ট করেছে। প্রারম্ভিক সিরিয়াল সিআরটি টার্মিনালগুলিতে, স্ক্রিনটিতে ইতিমধ্যে পাঠ্য আপডেট করার জন্য কার্সার অবস্থান নিয়ন্ত্রণের অন্যতম উপায় ছিল সিআর।

তবে বেশিরভাগ সময় আপনি আসলে পরবর্তী লাইনে যেতে চেয়েছিলেন। নিয়ন্ত্রণ অক্ষরের জুটির প্রয়োজনের পরিবর্তে কিছু সিস্টেম কেবল একটি বা অন্যটিকে অনুমতি দেয়। উদাহরণ স্বরূপ:

  • ইউনিক্স ভেরিয়েন্টস (ম্যাকের আধুনিক সংস্করণ সহ) একটি নতুন লাইন চিহ্নিত করতে কেবল একটি এলএফ অক্ষর ব্যবহার করে।
  • পুরাতন (প্রাক-ওএসএক্স) ম্যাকিনটোস ফাইলগুলি একটি নতুন লাইন নির্দেশ করতে কেবল একটি সিআর অক্ষর ব্যবহার করেছে।
  • ভিএমএস, সিপি / এম, ডস, উইন্ডোজ এবং অনেক নেটওয়ার্ক প্রোটোকল এখনও উভয়ই প্রত্যাশা করে: সিআর এলএফ।
  • পুরাতন আইবিএম সিস্টেমগুলি যেগুলি এনবিতে ইবিসিডিআইসি প্রমিত করেছে - এমন একটি অক্ষর যা ASCII অক্ষর সেটটিতেও নেই। ইউনিকোডে, এনএল হ'ল U+0085 NEXT LINE, তবে আসল ইবিসিডিক মান 0x15

কেন বিভিন্ন সিস্টেম বিভিন্ন পদ্ধতি বেছে নিয়েছিল? কেবল কোনও সার্বজনীন মান ছিল না বলে। আপনার কীবোর্ডটি সম্ভবত "এন্টার" বলছে, পুরানো কীবোর্ডগুলি "রিটার্ন" বলত, যা ক্যারেজ রিটার্নের জন্য সংক্ষিপ্ত ছিল। আসলে, সিরিয়াল টার্মিনালে, রিটার্ন টিপলে সিআর চরিত্রটি প্রেরণ করা হয়। আপনি যদি কোনও পাঠ্য সম্পাদক লিখছিলেন, টার্মিনাল থেকে এটি আসার সাথে সাথে কেবল সেই চরিত্রটি ব্যবহার করার জন্য লোভনীয় হবে। সম্ভবত সে কারণেই পুরানো ম্যাকগুলি কেবল সিআর ব্যবহার করেছিল।

এখন যে আমাদের মান রয়েছে , লাইন ব্রেকগুলি উপস্থাপন করার আরও অনেক উপায় রয়েছে। যদিও বন্যের মধ্যে অত্যন্ত বিরল, ইউনিকোডে নতুন অক্ষর রয়েছে:

  • U+2028 LINE SEPARATOR
  • U+2029 PARAGRAPH SEPARATOR

ইউনিকোড বরাবর আসার আগেই প্রোগ্রামাররা অন্তর্নিহিত অক্ষর সেট সম্পর্কে চিন্তা না করে কিছু উপকারী নিয়ন্ত্রণ কোডের উপস্থাপনের সহজ উপায়গুলি চেয়েছিল। কন্ট্রোল কোডগুলি উপস্থাপনের জন্য সি এর কয়েকটি পালানোর ক্রম রয়েছে:

  • \a (সতর্কতার জন্য) যা টেলি টাইপ বেল বাজায় বা টার্মিনাল বীপ তৈরি করে
  • \f (ফর্ম ফিডের জন্য) যা পরবর্তী পৃষ্ঠার শুরুতে চলে যায়
  • \t (ট্যাবের জন্য) যা প্রিন্ট হেডটিকে পরবর্তী অনুভূমিক ট্যাব অবস্থানে নিয়ে যায়

(এই তালিকাটি ইচ্ছাকৃতভাবে অসম্পূর্ণ))

এই ম্যাপিংটি সংকলন-সময়ে ঘটে - সংকলকটি \aবেলটি বাজানোর জন্য যা কিছু ম্যাজিক মান ব্যবহৃত হয় তা দেখে এবং রাখে।

লক্ষ্য করুন যে এই স্মৃতিবিদ্যার বেশিরভাগের ASCII নিয়ন্ত্রণ কোডের সাথে সরাসরি সম্পর্ক রয়েছে। উদাহরণস্বরূপ, \aমানচিত্র করতে হবে 0x07 BEL। হোস্ট ক্যারেক্টার সেট (যেমন, EBCDIC) এর জন্য ASCII ব্যতীত অন্য কিছু ব্যবহার করে এমন একটি সিস্টেমের জন্য একটি সংকলক লেখা যেতে পারে। সুনির্দিষ্ট স্মৃতিবিজ্ঞানগুলির মধ্যে থাকা বেশিরভাগ নিয়ন্ত্রণ কোডগুলি অন্য চরিত্রের সেটগুলিতে কোডগুলি নিয়ন্ত্রণ করতে ম্যাপ করা যায়।

Huzzah! পোর্টেবিলিটি!

ভাল প্রায়. সি-তে আমি লিখতে পারি যে printf("\aHello, World!");কোনটি বেল বাজায় (বা বিপস) এবং একটি বার্তা আউটপুট করে। তবে আমি যদি পরবর্তী লাইনে কিছু মুদ্রণ করতে চাইতাম তবে হোস্ট প্ল্যাটফর্মটি আউটপুট পরবর্তী পংক্তিতে যেতে কী প্রয়োজন তা আমার এখনও জানতে হবে। সিআর এলএফ? সি আর? এলএফ? এন এল? অন্যকিছু? বহনযোগ্যতার জন্য এত।

সি / তে I / O এর জন্য দুটি মোড রয়েছে: বাইনারি এবং পাঠ্য। বাইনারি মোডে, যা কিছু ডেটা প্রেরণ করা হয় তা যেমন হয় তেমন সঞ্চারিত হয়। তবে পাঠ্য মোডে একটি রান-টাইম অনুবাদ রয়েছে যা হোস্ট প্ল্যাটফর্মকে নতুন লাইনের (এবং তদ্বিপরীত) জন্য যা কিছু প্রয়োজন তা বিশেষ চরিত্রকে রূপান্তর করে।

দুর্দান্ত, তাহলে বিশেষ চরিত্রটি কী?

ভাল, যে বাস্তবায়ন নির্ভরশীল, অত্যধিক, কিন্তু এটা উল্লেখ করার একটি বাস্তবায়ন স্বাধীন উপায়: \n। একে সাধারণত "নিউলাইন চরিত্র" বলা হয়।

এটি একটি সূক্ষ্ম তবে গুরুত্বপূর্ণ বিষয়: একটি বাস্তবায়ন-সংজ্ঞায়িত সংকলন সময়ে\n ম্যাপ করা হয় চরিত্র মান যা (পাঠ্য মোডে) তাহলে আবার ম্যাপ করা হয় রান টাইম পদক্ষেপ অন্তর্নিহীত প্ল্যাটফর্ম দ্বারা প্রয়োজন প্রকৃত চরিত্র (অথবা অক্ষরের ক্রম) এর পরের লাইনে

\nঅন্যান্য ব্যাকস্ল্যাশ আক্ষরিক চেয়ে পৃথক কারণ সেখানে দুটি ম্যাপিং জড়িত। এই দ্বি-পদক্ষেপের ম্যাপিং করে\n এমনকি \rসিআর (বা অন্তর্নিহিত অক্ষর সেট যাই হোক না কেন সর্বাধিক অনুরূপ নিয়ন্ত্রণ কোড) এর একটি সংকলন-সময় ম্যাপিং যা তুলনায় উল্লেখযোগ্যভাবে আলাদা করে ।

এটি অনেক সি এবং সি ++ প্রোগ্রামারকে ট্রিপ করে। আপনি যদি তাদের মধ্যে 100 টি পোল করে থাকেন তবে কমপক্ষে 99 জন আপনাকে তা জানিয়ে দেবে\n লাইন ফিডের অর্থ । এই সম্পূর্ণ সত্য নয়। সর্বাধিক (সম্ভবত সমস্ত) সি এবং সি ++ বাস্তবায়নগুলি এলএফকে যাদু মধ্যবর্তী মান হিসাবে ব্যবহার করে \n, তবে এটি বাস্তবায়নের বিশদ। সংকলকটির জন্য আলাদা মান ব্যবহার করা সম্ভব। প্রকৃতপক্ষে, হোস্ট চরিত্রের সেটটি যদি ASCII (যেমন, এটি যদি EBCDIC) এর সুপারসেট না হয় তবে \nঅবশ্যই প্রায়শই LF হবে না।

সুতরাং, সি এবং সি ++ এ:

  • \r আক্ষরিক অর্থে গাড়ি চালানো।
  • \nএকটি ম্যাজিক মান যা রান-টাইমে অনুবাদ হয় (পাঠ্য মোডে)হোস্ট প্ল্যাটফর্মের নতুন লাইন শব্দার্থক শব্দটি / / পাঠানো
  • \r\nপ্রায় সর্বদা একটি বহনযোগ্যতা বাগ। পাঠ্য মোডে, এটি সিআর অনুবাদ করে প্ল্যাটফর্মের নতুন লাইনের ক্রম অনুসরণ করবে - সম্ভবত কি উদ্দেশ্য নয়। বাইনারি মোডে, এটি সিআর অনুবাদ করে কিছু জাদু মান অনুসরণ করবে যা নাও পারে এলএফ হতে পারে - সম্ভবত কী উদ্দেশ্য নয়।
  • \x0Aকোনও এএসসিআইআই এলএফ নির্দেশ করার সর্বাধিক বহনযোগ্য উপায়, তবে আপনি কেবল বাইনারি মোডে এটি করতে চান। বেশিরভাগ পাঠ্য-মোড বাস্তবায়নগুলি এরকম আচরণ করবে \n

পাইথনে <টেক্সটের </a> ইনপুট কীভাবে বিভক্ত করা যায় তা নির্ধারণের চেষ্টা করার সময় এই পোস্টটি জুড়ে এসেছিল \r\nএবং লাইনগুলি আলাদাভাবে তালিকাভুক্ত উপাদানগুলিতে সঠিকভাবে বিভক্ত করার একমাত্র উপায়। এটি আমাকে বিস্মিত করে তোলে যে এটি কিছু অদ্ভুত এইচটিএমএল আর্টিফ্যাক্ট কিনা, বা পাইথন যেভাবে আমার requestঅবজেক্ট থেকে স্ট্রিংটি ইনজেক্ট করে তার সাথে যদি এটি করতে হয় ।
প্যাট জোন্স

11
  • "\ r" => ফিরে আসুন
  • "\ n" => নিউলাইন বা লাইনফিড (শব্দার্থবিজ্ঞান)

  • ইউনিক্স ভিত্তিক সিস্টেমগুলি পাঠ্যের একটি লাইন শেষ করতে কেবল "\ n" ব্যবহার করে।

  • ডক্স পাঠ্যের একটি লাইন শেষ করতে "\ r \ n" ব্যবহার করে।
  • কিছু অন্যান্য মেশিন কেবল একটি "\ r" ব্যবহার করেছে। (কমোডোর, অ্যাপল দ্বিতীয়, ওএস এক্স এর আগে ম্যাক ওএস ইত্যাদি।)

5

\r একটি লাইনের শুরুতে নির্দেশ করতে ব্যবহৃত হয় এবং সেখান থেকে পাঠ্যটি প্রতিস্থাপন করতে পারে, যেমন

main()
{
printf("\nab");
printf("\bsi");
printf("\rha");
}

এই আউটপুট উত্পাদন:

hai

\n নতুন লাইনের জন্য


4

সংক্ষেপে \ r এর ASCII মান 13 (সিআর) এবং \ n এর ASCII মান 10 (এলএফ) রয়েছে। ম্যাক সিআরটি লাইন ডিলিমিটার হিসাবে ব্যবহার করে (কমপক্ষে, এটি আগে করেছে, আমি আধুনিক ম্যাকের জন্য নিশ্চিত নই), * নিক্স এলএফ ব্যবহার করে এবং উইন্ডোজ উভয়ই (সিআরএলএফ) ব্যবহার করে।


1
ম্যাক ওএস এক্স সিস্টেমগুলি ডিফল্টরূপে এলএফ ব্যবহার করে (যেহেতু এটি বিএসডি ইউনিক্সের উপর ভিত্তি করে)।
ড্রিমলাক্স

3

@ জনের স্কিটের উত্তর ছাড়াও:

Ditionতিহ্যগতভাবে উইন্ডোজ \ r \ n, ইউনিক্স and n এবং ম্যাক \ r ব্যবহার করেছে, তবে নতুন ম্যাকগুলি ইউনিক্স ভিত্তিক হওয়ায় \ n ব্যবহার করে।


2

সি # তে আমি দেখতে পেলাম যে তারা স্ট্রিংয়ে \ r \ n ব্যবহার করে।


2

r ক্যারিজ রিটার্ন; । n হ'ল নতুন লাইন (লাইন ফিড) ... প্রতিটি অর্থ কী তা ওএসের উপর নির্ভর করে। 'C. n' এবং '\ r \ n' এর মধ্যে পার্থক্য সম্পর্কে আরও জানতে এই নিবন্ধটি পড়ুন ... সিতে


1

riage r গাড়ী ফেরতের জন্য ব্যবহৃত। (ASCII মান 13) line n নতুন লাইনের জন্য ব্যবহৃত। (এএসসিআইআই মান 10)

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