উত্তর:
তারা বিভিন্ন চরিত্র। \r
হ'ল ক্যারেজ রিটার্ন, এবং \n
লাইন ফিড।
"পুরানো" মুদ্রকগুলিতে, \r
মুদ্রণ শিরোনামটি আবার লাইনের শুরুতে প্রেরণ করে এবং \n
কাগজটিকে এক লাইনে উন্নত করে। উভয়ই পরবর্তী লাইনে মুদ্রণ শুরু করা আবশ্যক ছিল।
অবশ্যই এটি এখন কিছুটা অপ্রাসঙ্গিক, যদিও কনসোলের উপর নির্ভর করে আপনি এখনও \r
লাইনটির শুরুতে যেতে এবং বিদ্যমান পাঠ্যটি ওভাররাইট করতে ব্যবহার করতে সক্ষম হতে পারেন ।
আরও গুরুত্বপূর্ণ, ইউনিক্স \n
একটি লাইন বিভাজক হিসাবে ব্যবহার করতে ঝোঁক ; উইন্ডোজ \r\n
একটি লাইন বিভাজক এবং ম্যাকগুলি (ওএস 9 পর্যন্ত) লাইন বিভাজক হিসাবে ব্যবহৃত\r
হিসাবে ব্যবহার করতে ঝোঁক । (ম্যাক ওএস এক্স ইউনিক্স-ওয়াই, সুতরাং \n
পরিবর্তে ব্যবহার করে; কিছু সামঞ্জস্যের পরিস্থিতি থাকতে পারে যেখানে \r
পরিবর্তে ব্যবহৃত হয়))
আরও তথ্যের জন্য, উইকিপিডিয়া নিউলাইন নিবন্ধটি দেখুন ।
সম্পাদনা: এটি ভাষা সংবেদনশীল। সি # এবং জাভাতে, উদাহরণস্বরূপ, \n
সর্বদা ইউনিকোড ইউ + 000 এ এর অর্থ লাইন ফিড হিসাবে সংজ্ঞায়িত। সি এবং সি ++ এর মধ্যে জলটি কিছুটা শঙ্কিত হয়, কারণ এর অর্থ প্ল্যাটফর্ম-নির্দিষ্ট। বিশদ জন্য মন্তব্য দেখুন।
\n
হয় সম্পর্কে newline (অধ্যায় 2.4.4.4) হতে নিশ্চিত। অবশ্যই, ওপি প্ল্যাটফর্মটি নির্দিষ্ট করে দিলে এটি চমৎকার হবে ... তদুপরি, আমি মনে করি যে এই স্তরের বিশদটি কেবল তাত্পর্যপূর্ণ জিজ্ঞাসা করা কারও পক্ষে উপকারী হওয়ার চেয়ে আরও বিভ্রান্তিকর হবে।
সি এবং সি ++ এ, \n
একটি ধারণা, \r
একটি চরিত্র, এবং \r\n
(প্রায় সর্বদা) একটি বহনযোগ্যতা বাগ।
একটি পুরানো টেলি টাইপ চিন্তা করুন। মুদ্রণ শিরোনামটি কিছু লাইনে এবং কিছু কলামে অবস্থিত। আপনি যখন মুদ্রণযোগ্য অক্ষরটি টেলি-টাইপে প্রেরণ করেন এটি অক্ষরটি বর্তমান অবস্থানে মুদ্রণ করে এবং পরবর্তী কলামে মাথাটি সরিয়ে দেয়। (এটি ধারণাগতভাবে টাইপরাইটার হিসাবে একই, টাইপ রাইটাররা সাধারণত মুদ্রণ শিরোনামের সাথে কাগজ সরিয়ে নিয়েছিল।)
আপনি যখন বর্তমান লাইনটি শেষ করতে এবং পরবর্তী লাইনে শুরু করতে চেয়েছিলেন তখন আপনাকে দুটি পৃথক পদক্ষেপ করতে হয়েছিল:
এএসসিআইআই এই দুটি ক্রিয়াকলাপকে দুটি স্বতন্ত্র নিয়ন্ত্রণের অক্ষর হিসাবে এনকোড করে:
\x0D
(সিআর) মুদ্রণ শিরোনামটি লাইনের শুরুতে ফিরে যায়। (ইউনিকোড এটিকে এনকোড করে U+000D CARRIAGE RETURN
))\x0A
(এলএফ) মুদ্রণ শিরোনামটি পরবর্তী লাইনে নামায়। (ইউনিকোড এটিকে এনকোড করে U+000A LINE FEED
))টেলি টাইপস এবং প্রারম্ভিক প্রযুক্তি মুদ্রকগুলির দিনগুলিতে লোকেরা প্রকৃতপক্ষে এই দুটি পৃথক ক্রিয়াকলাপ ছিল বলে সুবিধা গ্রহণ করেছিল। কোনও এলএফ দ্বারা অনুসরণ না করে সিআর প্রেরণ করে আপনি ইতিমধ্যে মুদ্রিত লাইনে মুদ্রণ করতে পারবেন। এটি অ্যাকসেন্ট, গা bold় প্রকার এবং আন্ডারলাইনের মতো প্রভাবগুলির অনুমতি দেয়। পাসওয়ার্ডগুলি হার্ডকপিতে দৃশ্যমান হতে বাধা দিতে কয়েকটি সিস্টেম বহুবার ওভারপ্রিন্ট করেছে। প্রারম্ভিক সিরিয়াল সিআরটি টার্মিনালগুলিতে, স্ক্রিনটিতে ইতিমধ্যে পাঠ্য আপডেট করার জন্য কার্সার অবস্থান নিয়ন্ত্রণের অন্যতম উপায় ছিল সিআর।
তবে বেশিরভাগ সময় আপনি আসলে পরবর্তী লাইনে যেতে চেয়েছিলেন। নিয়ন্ত্রণ অক্ষরের জুটির প্রয়োজনের পরিবর্তে কিছু সিস্টেম কেবল একটি বা অন্যটিকে অনুমতি দেয়। উদাহরণ স্বরূপ:
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
।\r\n
এবং লাইনগুলি আলাদাভাবে তালিকাভুক্ত উপাদানগুলিতে সঠিকভাবে বিভক্ত করার একমাত্র উপায়। এটি আমাকে বিস্মিত করে তোলে যে এটি কিছু অদ্ভুত এইচটিএমএল আর্টিফ্যাক্ট কিনা, বা পাইথন যেভাবে আমার request
অবজেক্ট থেকে স্ট্রিংটি ইনজেক্ট করে তার সাথে যদি এটি করতে হয় ।
"\ n" => নিউলাইন বা লাইনফিড (শব্দার্থবিজ্ঞান)
ইউনিক্স ভিত্তিক সিস্টেমগুলি পাঠ্যের একটি লাইন শেষ করতে কেবল "\ n" ব্যবহার করে।
সংক্ষেপে \ r এর ASCII মান 13 (সিআর) এবং \ n এর ASCII মান 10 (এলএফ) রয়েছে। ম্যাক সিআরটি লাইন ডিলিমিটার হিসাবে ব্যবহার করে (কমপক্ষে, এটি আগে করেছে, আমি আধুনিক ম্যাকের জন্য নিশ্চিত নই), * নিক্স এলএফ ব্যবহার করে এবং উইন্ডোজ উভয়ই (সিআরএলএফ) ব্যবহার করে।
riage r গাড়ী ফেরতের জন্য ব্যবহৃত। (ASCII মান 13) line n নতুন লাইনের জন্য ব্যবহৃত। (এএসসিআইআই মান 10)
'\n'
।