ট্র্যাক
/
C#
C#
/
সিলেবাস
/
স্ট্রিং ফরম্যাটিং
স্

স্ট্রিং ফরম্যাটিং মধ্যে C#

13টি অনুশীলনী

স্ট্রিং ফরম্যাটিং সম্পর্কে

C#/.NET-এ স্ট্রিং ফরম্যাট করার পদ্ধতি নানান ও বিচিত্র: অবজেক্টের সাধারণ সংযোজন থেকে শুরু করে ওভাররাইড করা object.ToString() মেথড কল, এমনকি ICustomFormatter ব্যবহার পর্যন্ত (এই অনুশীলনীতে এটি আলোচনা করা হয়নি)।

স্ট্রিং ফরম্যাট করার দুটি সবচেয়ে কমন পদ্ধতি হলো স্ট্রিং ইন্টারপোলেশন এবং String.Format()। একাধিক লাইনের মতো জটিলতা থাকলে স্ট্রিং গড়ে তুলতে StringBuilder (cross-ref-tba) ক্লাসও ব্যবহার করা যায়।

ToString() ব্যবহার করে

System.Object() যেটি থেকে সব ক্লাস ও স্ট্রাক্ট উত্তরাধিকার করে, তার একটি ToString() মেথড আছে। উদাহরণস্বরূপ new DateTime(2019, 5, 23).ToString() "05/23/2019 00:00:00" রেন্ডার করবে (যুক্তরাষ্ট্রের কালচারে চলা একটি থ্রেডে, নিচে দেখুন)। স্ট্রিং সংযোজনের মতো কিছু পরিস্থিতি আছে যেখানে এই ডিফল্ট ToString() মেথডটি পরোক্ষভাবে আহ্বান করা হতে পারে। "" + new DateTime(2019, 5, 23) একই ফলাফল দেয়।

ডিফল্ট ToString() মেথডের পাশাপাশি, যেসব টাইপে ফরম্যাটিং একটি বিষয় হয়ে দাঁড়ায় সেগুলোর এমন ওভারলোডও থাকে যা একটি ফরম্যাট স্ট্রিং বা এমনকি একটি ফরম্যাট প্রোভাইডার নেয়। উল্লেখ্য, BCL (Base Class Library)-এ এগুলো হলো সংখ্যা, তারিখ, enum ও GUID।

কম্পোজিট ফরম্যাটিং

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

string.Format("I had {0} bitcoins on {1}, the day I forgot my password.", 55.5, new DateTime(2010, 2, 25))
// => "I had 55.5 bitcoins on 2/25/2010 00:00:00, the day I forgot my password." - US settings

যেখানে ফরম্যাটটি একধরনের টেমপ্লেট হিসেবে একাধিক এক্সপ্রেশনে ব্যবহৃত হয়, অথবা ফরম্যাট আর ফরম্যাট করার এক্সপ্রেশনগুলো একসঙ্গে লেখা খুব জটিল হয়ে পড়ে, যেমন [ভার্বেটিম স্ট্রিং][verbatim-strings]-এর ক্ষেত্রে, সেখানে ইন্টারপোলেশনের চেয়ে Format() ভালো পছন্দ হতে পারে।

এই পদ্ধতিকে প্রযুক্তিগতভাবে কম্পোজিট ফরম্যাটিং বলা হয়।

কম্পোজিট ফরম্যাটিং-এর সুবিধা নিয়ে স্ট্রিং উৎপাদনকারী মেথডের আরও পূর্ণ তালিকা এই নিবন্ধে দেওয়া আছে।

স্ট্রিং ইন্টারপোলেশন

ইন্টারপোলেটেড স্ট্রিংয়ের শুরুতে একটি $ থাকে এবং এতে ব্রেসের ভেতরে রান-টাইম এক্সপ্রেশন থাকে। ফরম্যাট আইটেমের সিনট্যাক্স হলো: $"{<interpolationExpression>[,<alignment>][:<formatString>]}"। এতে আলাদা আর্গুমেন্ট তালিকার প্রয়োজন থাকে না। ফলাফল কার্যত String.Format() পদ্ধতির সমতুল্য।

এক্সপ্রেশনটিতে স্কোপের যেকোনো কিছু থাকতে পারে। অ্যালাইনমেন্ট হলো সেই "ফিল্ড"-এর দৈর্ঘ্য যেখানে টেক্সটটি বসে। অ্যালাইনমেন্ট ধনাত্মক হলে টেক্সটের বাঁ দিকে স্পেস দিয়ে প্যাড করা হয়, আর ঋণাত্মক হলে প্যাডিং টেক্সটের ডান দিকে হয়।

var loadsOf = 55.5;
var thatDay = new DateTime(2010, 2, 25);
$"I had {loadsOf} bitcoins on {thatDay}, the day I forgot my password."
// => "I had 55.5 bitcoins on 2/25/2010 00:00:00, the day I forgot my password." - US settings

ফরম্যাট আইটেম

ব্রেসের ভেতরের টেক্সট, অর্থাৎ কম্পোজিট ফরম্যাটের ক্ষেত্রে প্লেসহোল্ডার আর স্ট্রিং ইন্টারপোলেশনের ক্ষেত্রে ইন্টারপোলেটেড এক্সপ্রেশন, তাকে ফরম্যাট আইটেম বলা হয়।

একটি ফরম্যাট আইটেমে সর্বোচ্চ ৩টি অংশ থাকতে পারে। প্রথমটি হলো আবশ্যক এক্সপ্রেশন বা আর্গুমেন্ট প্লেসহোল্ডার, যেমন উপরের উদাহরণ কোডে দেখা যায়। এছাড়া একটি ঐচ্ছিক অ্যালাইনমেন্ট (কমা "," দিয়ে শুরু) এবং একটি ঐচ্ছিক ফরম্যাট স্ট্রিং (কোলন ":" দিয়ে শুরু) থাকতে পারে।

{<interpolationExpression>[,<alignment>][:<formatString>]}

অ্যালাইনমেন্ট সেই "ফিল্ড"-এর দৈর্ঘ্য নির্দিষ্ট করে যেখানে টেক্সটটি রাখা হয়; অ্যালাইনমেন্ট ধনাত্মক হলে বাঁ দিকে স্পেস দিয়ে প্যাড করা হয়, আর ঋণাত্মক হলে ডান দিকে।

ফরম্যাট স্ট্রিং আউটপুট টেক্সটের রূপ নির্দিষ্ট করে, যেমন কোনো সংখ্যায় হাজার আলাদা করার চিহ্ন থাকবে কি না, বা DateTime অবজেক্টের কেবল তারিখের অংশ আউটপুট হবে কি না।

নিচের কোডটি দেখায় কীভাবে একটি DateTime অবজেক্টের তারিখের অংশ এবং একটি ফ্লোটিং-পয়েন্ট সংখ্যা সূচকীয় রূপে প্রদর্শিত হয়।

var loadsOf = 55.5;
var thatDay = new DateTime(2010, 2, 25);
$"I had {loadsOf:E} bitcoins on {thatDay:d}, the day I forgot my password."
// => I had 5.550000E+001 bitcoins on 02/25/2010, the day I forgot my password. - US settings

string.Format(
    "I had {0:E} bitcoins on {1:d}, the day I forgot my password.",
    loadsOf, thatDay)
// => I had 5.550000E+001 bitcoins on 02/25/2010, the day I forgot my password. - US settings

সংখ্যা ও তারিখ দুটোর জন্যই স্ট্যান্ডার্ড এবং কাস্টম ফরম্যাটিং আছে। কাস্টম আর স্ট্যান্ডার্ড-এর মধ্যে বিশেষ কোনো গুরুত্বপূর্ণ পার্থক্য নেই, শুধু আপনি ফরম্যাট ক্যারেক্টার দিয়ে কাস্টম ফরম্যাট স্ট্রিং নিজে গড়ে তুলতে পারেন। এই প্রসঙ্গে "custom"-এর সঙ্গে ICustomFormatter ইন্টারফেসের কোনো সম্পর্ক নেই; সেটি আপনার নিজের কাস্টম ফরম্যাটার তৈরি করার সময় ব্যবহৃত হয়।

BCL ফরম্যাটার ও ফরম্যাট স্ট্রিং

BCL (Base Class Library) দুটি ফরম্যাটার দেয়: DateTimeFormatInfo ও NumberFormatInfo, এবং ৬টি গ্রুপের ফরম্যাট স্ট্রিং।

ফরম্যাট স্ট্রিং-এর বিভিন্ন তালিকা নিচে দেওয়া হলো:

Enum ও GUID ফরম্যাট স্ট্রিং-কে স্ট্যান্ডার্ড হিসেবে ধরা যায়। যদিও enum ও GUID-এর এমন ToString() ওভারলোড আছে যা একটি IFormatProvider নেয়, তবে সেটি আসলে কিছু করে কি না তা স্পষ্ট নয়।

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

কালচার

এক্সিকিউশনের প্রতিটি থ্রেডের একটি ডিফল্ট কালচার থাকে, Thread.CurrentThread.CurrentCulture, যা CultureInfo-এর একটি ইনস্ট্যান্সে ধারণ করা হয়। থ্রেডের কালচারই নির্ধারণ করে আঞ্চলিক ভিন্নতা অনুসারে তারিখ ও সংখ্যা ডিফল্টভাবে কীভাবে ফরম্যাট হবে, যেমন যুক্তরাজ্যের প্রচলিত তারিখ ফরম্যাট DD/MM/YYYY আর যুক্তরাষ্ট্রের MM/DD/YYYY-এর পার্থক্য।

CultureInfo হলো IFormatProvider ইন্টারফেসের বাস্তবায়ন, যা String.Format()-এর নির্দিষ্ট কিছু ওভারলোডে পাঠানো যায়। এটি দিয়ে থ্রেডের কালচার ওভাররাইড করা যায়।

রেফারেন্স উপকরণ

GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি নতুন একটি উইন্ডো বা ট্যাবে খুলবে

স্ট্রিং ফরম্যাটিং শিখুন

অনুশীলন লক করা আছে

স্ট্রিং ফরম্যাটিং অনুশীলন করতে আরও 11টি অনুশীলনী আনলক করুন