رشته در سی شارپ

رشته در سی شارپ

نوشته شده توسط: مجید طاهری
تاریخ انتشار: ۱۹ آبان ۱۳۹۳
آخرین بروزرسانی: ۱۷ تیر ۱۴۰۳
زمان مطالعه: 17 دقیقه
۰
(۰)

 مقدمه

فرمت بندی رشته خروجی با استفاده از متد string.Format واقعا مفید است. این متد اکثر مواقعی که با زبان های سی شارپ و VB.NET برنامه می نویسید، استفاده می شود. string.Format اولین بار در .NET Framework 1.1 منتشر شد.
این متد برای جایگزین کردن فرمت هر آیتمی در یک رشته مشخص با رشته مساوی از مقدار یک آبجکت مترادف، استفاده می‌شود.
در این مقاله می خواهیم تمامی موارد مربوط به رشته در سی شارپ را بررسی کنیم.

Overload های متد string.Format

public static string Format(string format, Object arg0)
public static string Format(string format, params Object[] args)
public static string Format(IFormatProvider provider, string format, params Object[] args)
public static string Format(string format, Object arg0, Object arg1)
public static string Format(string format, Object arg0, Object arg1, Object arg2)

پارامترها

این لیست کامل از پارامترهای متد Format است؛ تمام پارامترهای استفاده شده در Overload های بالا قابل مشاهده هستند و فقط پارامتر format در همه Overload ها استفاده است.

حالت استفاده به صورت پیش فرض اینگونه است

string.Format(“Hello {0}”, “World”); // "Hello World"

همانطور که می بینید آرگومان داخل آکولاد باز و بسته یک فرمت رشته است که با آرگومان ۰ جایگزین می شو و دارای فرمت زیر است:
 

{index[,alignment][:formatString]}

براکت ها، اِلِمان های اختیاری را مشخص می کنند. پرانتزهای باز و بسته ضروری هستند.
آیتم فرمت دارای المان های زیر است:

 Index

یک اندیس مبنی بر صفر (اندیس هایی که از صفر شروع می شوند) که رشته را در این موقیعت نمایش می دهد. اگر این آرگومان null باشد یک رشته خالی در این موقعیت در قرار داده می شود.

Alignment

این آرگومان اختیاری است و یک عدد صحیح است که جمع طول فیلدی که در آرگومان قرار می گیرد و اینکه در سمت راست (یک عدد مثبت) یا سمت چپ (یک عدد منفی) باشد را نشان می دهد. اگر از این آرگومان صرف نظر کنید، نمایش رشته در یک فیلد بدون فاصله  قرار می گیرد.

FormatString

این آرگومان اختیاری است و یک رشته است که فرمت آرگومان مربوطه رشته خروجی را تعیین می کند. اگر از این آرگومان صرف نظر کنید، آرگومان مربوطه متد ToString بدون پارامتر (برای نمایش رشته مربوطه) فراخوانی می شود. اگر یک formatString تعیین کنید، آرگومانی که بوسیله آیتم فرمت رجوع داده می شود باید اینترفیس IFormattable را پیاده سازی کند.
(برای یادگیری نحوه پیاده سازی IFormattable به آدرس http://msdn.microsoft.com/en-us/library/system.iformattable.aspx مراجعه کنید.)

نوع داده هایی که از رشته های فرمت دار پشتیبانی می کنند عبارتند از

• تمام نوع داده های صحیح و اعشاری
• نوع داده هایDateTime  و DateTimeOffset
• تمام نوع داده های شمارشی
• مقادیر TimeSpan
• GUID ها (برای اطلاعات بیشتر به آدرس http://msdn.microsoft.com/en-us/library/System.Guid.aspx مراجعه کنید.)
توجه داشته باشید که هر نوعِ سفارشی می تواند اینترفیس IFormattable را پیاده سازی کند و یا یک نوع IFormattable پیاده سازی شده را توسعه دهد.
 مثال ۱( قطعه کد زیر از آرگومانهای alignment وformatString  برای تولید خروجی فرمت دار استفاده می کند:

// ساخت یک ارایه از اطلاعات جمعیت امریکا
Tuple<string, DateTime, int, DateTime, int>[] cities =
{ Tuple.Create("Los Angeles", new DateTime(1940, 1, 1), 1504277,
new DateTime(1950, 1, 1), 1970358),
Tuple.Create("New York", new DateTime(1940, 1, 1), 7454995,
new DateTime(1950, 1, 1), 7891957),};
// نمایش هدر
string header = String.Format("{0,-12}{1,8}{2,12}{1,8}{2,12}{3,14}\n",
"City", "Year", "Population", "Change (%)");
Console.WriteLine(header);
string output;
foreach (var city in cities) {
output = String.Format("{0,12}{1,8:yyyy}{2,12:N0}{3,8:yyyy}{4,12:N0}{5,14:P1}",
city.Item1, city.Item2, city.Item3, city.Item4, city.Item5,
(city.Item5 - city.Item3)/ (double)city.Item3){;
Console.WriteLine(output);

همانطور که در خط ۱۳ مشاهده می کنید برای نمایش دومین آرگومان، از فرمت رشته {۱,۸:yyyy} استفاده شده است. این فرمت رشته، مقدار سال مربوط به نوع DateTime را با ۸ فاصله از آرگومان قبلی نمایش می دهد. همچنین آرگومان سوم که یک عدد صحیح است با ۱۲ فاصله و بصورت ۳تایی از هم جدا شده، نمایش داده می شود.
خروجی قطعه کد بالا بصورت زیر است:
مثال ۲( قطعه کد زیر شامل دو آیتم است؛ یکی برای نمایش مقدار دهدهی (decimal) یک عدد و دیگری برای نمایش مقدار شانزده شانزدهی  (hexadecimal):

short[] values= { Int16.MinValue, -27, 0, 1042, Int16.MaxValue };
Console.WriteLine("{0,10}  {۱,۱۰}\n", "Decimal", "Hex");
foreach (short value in values)
{
string formatString = String.Format("{0,10:G}: {0,10:X}", value);
Console.WriteLine(formatString);
}

خروجی قطعه کد بصورت زیر است:
 مثال ۳( قطعه کد زیر از متدString.Format(IFormatProvider, String, Object[])  برای نمایش تاریخ و مقادیر عددی آنها (به چند زبان مختلف) استفاده می کند:

 
string[] cultureNames = { "en-US", "fr-FR", "de-DE", "fa-IR" };
DateTime dateToDisplay = new DateTime(2009, 9, 1, 18, 32, 0);
double value = 9164.32;
Console.WriteLine("Culture     Date                                Value\n");
foreach (string cultureName in cultureNames)
{
CultureInfo culture = new CultureInfo(cultureName);
string output = String.Format(culture, "{0,-11} {1,-35:D} {2:N}",
culture.Name, dateToDisplay, value);
Console.WriteLine(output);
}

خروجی قطعه کد بصورت زیر است:
 نکته: برنامه های تحت کنسول از یونیکد پشتیبانی نمی‌کنند؛ بنابراین مقدار تاریخ سطر آخر (که مربوط به زبان فارسی است) بصورت ؟؟؟ چاپ شده است.
 چند مثال دیگر:

 String.Format("{0:000000}", 200);          // "۰۰۰۲۰۰"
String.Format("{0:000000}", -200);         // "-۰۰۰۲۰۰"
String.Format("{0,6:0000}", 22);          // "  ۰۰۲۲"
String.Format("{0,-6:0000}", 22);         // "۰۰۲۲  "
String.Format("{0:+### ### ### ###}", 447900123456); // "+447 900 123 456"
String.Format("{0:##-####-####}", 8958712551);       // "۸۹-۵۸۷۱-۲۵۵۱"
String.Format("{0:0.00}", 123.4);         // "۱۲۳.۴۰"
String.Format("{0:0.##}", 123.4567);      // "۱۲۳.۴۶"
String.Format("{0:00.0}", -3.4567);       // "-۰۳.۵"
String.Format("{0:0,0.0}", 12345.67);     // "۱۲,۳۴۵.۷"
String.Format("{0:0.00;minus 0.00;zero}", -123.4567);  // "minus 123.46"
String.Format("{0:0.00;minus 0.00;zero}", 0.0);        // "zero"

برای کسب اطلاعات و مثال های بیشتر به مستندات String.Formatدر MSDN و مقاله ی چیزهایی که با String.Format می‌توانید انجام دهیدمراجعه کنید.

چه رتبه ای می‌دهید؟

میانگین ۰ / ۵. از مجموع ۰

اولین نفر باش

title sign
معرفی نویسنده
مجید طاهری
مقالات
1 مقاله توسط این نویسنده
محصولات
0 دوره توسط این نویسنده
مجید طاهری
title sign
دیدگاه کاربران

    •  سلام

      تشکر از مطلب مفیدتون . پشنهادم اینه که سری مقالاتی رو در این زمینه به صورت سریالی و پیوسته تهیه کنید …

      ممنون