C#/.NET-এ স্ট্রিং ফরম্যাট করার দুটি প্রধান পদ্ধতি রয়েছে। একটি হলো String.Format()-এর ব্যবহার, আর অন্যটি স্ট্রিং ইন্টারপোলেশন।
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
এই পদ্ধতিটিকে কারিগরি ভাষায় কম্পোজিট ফরম্যাটিং বলা হয়।
ইন্টারপোলেটেড স্ট্রিংয়ের শুরুতে একটি $ থাকে এবং এতে বন্ধনীর ভেতরে রান-টাইম এক্সপ্রেশন থাকে। ফরম্যাট আইটেমের সিনট্যাক্স হলো $"{<interpolationExpression>}"। এতে আলাদা আর্গুমেন্ট তালিকার দরকার পড়ে না। ফলাফল কার্যকরভাবে 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
সংখ্যা ও তারিখ দুটোর জন্যই স্ট্যান্ডার্ড এবং কাস্টম ফরম্যাটিং আছে। কাস্টম আর স্ট্যান্ডার্ড-এর মধ্যে বিশেষ কোনো পার্থক্য নেই, শুধু আপনি চাইলে ফরম্যাট অক্ষর দিয়ে নিজের কাস্টম ফরম্যাট স্ট্রিং গড়ে তুলতে পারেন।
প্রতিটি থ্রেডের একটি ডিফল্ট কালচার থাকে, Thread.CurrentThread.CurrentCulture, যা CultureInfo-এর একটি ইনস্ট্যান্সে ধারণ করা হয়। থ্রেডের কালচার ঠিক করে দেয় তারিখ ও সংখ্যা আঞ্চলিক ভিন্নতা অনুযায়ী কীভাবে ফরম্যাট হবে, যেমন যুক্তরাজ্যের প্রচলিত DD/MM/YYYY আর যুক্তরাষ্ট্রের MM/DD/YYYY তারিখ ফরম্যাটের পার্থক্য।
CultureInfo ইন্টারফেসটি হলো IFormatProvider, যা String.Format()-এর কিছু নির্দিষ্ট ওভারলোডে পাঠানো যায়। এটি দিয়ে থ্রেডের কালচার ওভাররাইড করা যায়।
ভার্বাটিম স্ট্রিং দিয়ে একাধিক লাইনের স্ট্রিং লেখা যায়। এগুলোর শুরুতে একটি @ থাকে।
string str = @"
See no wretched
quotes everywhere
";
এই অনুশীলনীতে আপনি স্কুলজীবনের প্রেমিক যুগলকে সোশ্যাল মিডিয়ায় তাদের ভালোবাসা প্রকাশ করতে সাহায্য করবেন।
অনুগ্রহ করে static HighSchoolSweethearts.DisplaySingleLine() মেথডটি ইমপ্লিমেন্ট করুন, যেটি দুটি নাম নিয়ে সেগুলোকে একটি হৃদয় দিয়ে আলাদা করে প্রদর্শন করবে।
ফরম্যাট করা টেক্সটটি ৬১ অক্ষর চওড়া হবে এবং হৃদয়টি স্ট্রিংয়ের কেন্দ্রে থাকবে।
সব নাম লাইনের চওড়ার মধ্যে সহজেই এঁটে যাবে বলে নিশ্চিত করা হয়েছে।
HighSchoolSweethearts.DisplaySingleLine("Lance Green", "Pat Riley");
// => " Lance Green ♡ Pat Riley "
static HighSchoolSweethearts.DisplayBanner() মেথডটি ইমপ্লিমেন্ট করুন, যেটি আদ্যক্ষরের দুটি সেটকে একটি প্লাস চিহ্ন দিয়ে আলাদা করে প্রদর্শন করে।
HighSchoolSweethearts.DisplayBanner("L. G.", "P. R.");
// see the ascii art below
****** ******
** ** ** **
** ** ** **
** * **
** **
** L. G. + P. R. **
** **
** **
** **
** **
** **
** **
***
*
static HighSchoolSweethearts.DisplayGermanExchangeStudents() মেথডটি ইমপ্লিমেন্ট করুন, যেটি আমাদের জার্মান এক্সচেঞ্জ শিক্ষার্থীদের সম্পর্ক শুরুর তারিখ ও সম্পর্কের সময়কাল দেখায়।
HighSchoolSweethearts.DisplayGermanExchangeStudents("Norbert", "Heidi", new DateTime(2019, 1, 22), 1535.22f);
// => "Norbert and Heidi have been dating since 22.01.2019 - that's 1.535,22 hours"
Exercism-এ সাইন আপ করুন, C# ট্র্যাকের 62টি কনসেপ্ট178টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।