آکادمی سیم پاور

قالب بندي رشته ها #C

قالب بندي رشته ها #C

 

هنگامي كه مي خواهيد با رشته ها كار كنيد، ممكن است نياز داشته باشيد كه نحوه نمايش كاراكتر هـا بـر صـفحه نمـايش را تغييـردهيد. مثلا در شكل 3-5 ، كادر پيغام نتيجه تقسيم را نمايش ميدهد، اما احتمالا شما به هر 14 رقم اعشار نياز نداريـد و 2 يـا 3 رقـمكفايت ميكند ! چيزي كه شما در اين قسمت نياز داريد اين است كه رشته را به گونه اي قالب بندي كنيد كه تمام كاراكتر هاي سمتچپ مميز و فقط 2 يا 3 رقم اعشار را نشان دهد. در بخش امتحان كنيد بعدي اين كار را انجام خواهيم داد

 

قالب بندي رشته ها

 

)1 برنامه Floating-Pt Math را كه قبلا در اين فصل ايجاد كرده بوديد باز كنيد .

)2 ويرايشگر كد را براي Form1 باز كنيد و تغيرات زير را در كد ايجاد كنيد:

// Set number, divide numbers, and display results

dblNumber = 13;

dblNumber /= 7;

// Display the results without formatting

MessageBox.Show(“Without formatting: ” + dblNumber,

“Floating Points”);

//Display the results with formatting

MessageBox.Show(“With formatting: ” +

String.Format(“{0:n3}”, dblNumber),

“Floating Points”);

 

)3 برنامه را اجرا كنيد . بعد از اينكه كادر پيغـام مربـوط بـه تـست عمـل ضـرب نمـايش داده شـد، كـادر پيغـام بعـدي عـدد1,71428571428571 را به عنوان نتيجه نمايش مي دهد .

)4 هنگامي كه روي OK كليك كنيد، كادر بعدي نتيجه 1,714 را نمايش خواهد داد.

 

تنها چيزي كه در اين كد ممكن است عجيب به نظر برسد، استفاده از تابع String.Format است. اين تابع قوي، به شـمااجازه ميدهد متن و يا اعداد خود را قالب بندي كنيد . تنها نكته مهمي كه اين تابع دارد، پارامتر اول آن است كـه مـشخص مـي كنـدخروجي تابع بايد در چه قالبي باشد .

//Display the results with formatting

MessageBox.Show(“With formatting: ” +

String.Format(“{0:n3}”, dblNumber),

“Floating Points”);

 

براي فراخواني متد String.Format بايد دو پارامتر را به آن بفرستيد . پارامتر اول، “{0:n3}”، قالب رشته اي استكه شما ميخواهيد از متد دريافت كنيد. پارامتر دوم، dblNumber، مقداري است كه ميخواهيد قالب بندي كنيد .عـدد صـفر در پـارامتر اول مـشخص ميكنـد كـه در حـال مـشخص كـردن قالـب اولـين پـارامتر بعـد از پـارامتر حاضـر يـا همـانdblNumber هستيد . قسمتي كه بعد از “:” آمده است مشخص ميكند كه به چه صورت مي خواه يد رشته را قالب بندي كنيد .در اين جا از n3 استفاده كرده ايد كه به معناي “يك عدد با مميز شناور و سه رقم اعشار” است. براي ايـن كـه عـدد را بـا دو رقـم اعشار داشته باشيد، به راحتي ميتوانيد از عبارت n2 استفاده كنيد .

 

قالب بندي بومي :

 

زماني كه برنامه اي را با NET. م ي نويسيد، بايد بدانيد كه كاربر شما ممكن است از قواعد علامت گذاري در زبان خود استفاده كندكه براي شما نا آشنا باشد . براي مثال اگر در ايالات متحده زندگي مي كنيد، از علامت نقطـه (.) بـراي مميـز بـين قـسمت اعـشار وقسمت صحيح عدد استفاده مي كنيد . اما براي كاربراني كه در فرانسه هستند اين علامت يك ويرگول ) ،( است. همينطور ممكن استبراي كاربران كشورهاي ديگر اين علامت تفاوت داشته باشد .

ويندوز ميتواند بر اساس تنظيمات محلي كامپيوتر كاربر، اين علامتها را براي شما انتخاب كند . اگر شما از چـارچوب NET. درسـتاستفاده كنيد، عموما ني ازي نيست در مورد اين علامت گذاري ها نگران باشيد. براي مثال در برنامه قبلـي مـا بـا اسـتفاده از n3، بـهNET. گفتيم كه مي خواهيم عدد خود را با جدا كننده هزارگان و همچنين با سه رقم اعشار در سمت راسـت نمـايش دهـيم . البتـهتقسيم قسمت قبلي به جداكننده هزارگان نيازي ندارد اما اگر تقسيم را به 12000 / 7 تغيير دهيم، عـدد 1،742 .286 را دريافـت مـيكنيم كه در صورت داشتن جداكننده هزارگان، راحت تر خوانده مي شود .

حال اگر كاربر تنظيمات محلي كامپيوتر خود را برابر تنظيمات فرانسوي قرار دهد و كد قبلي را اجرا كند (بدون اينكه هيچ تغيري را دركد به وجود آوريد)، نتيجه 1 714،286 را دريافت خواهد كرد .

 

نكته: براي تغيير تنظيمات محلي كامپيوتر خود ميتوانيد بـه Control Panel برويـد و روي آيكـون Regional and Language Options كليك كنيد و زبان خود را به زباني كه تمايل داريد تغيير دهيد. به اين صـورت علامـتگذاري زباني كه انتخاب كرده ايد در كامپيوتر شما استفاده مي شود .

 

در زبان فرانسه، جداكننده هزارگان يك فضاي خالي است نه يك ويرگول . همچنين براي مميز اعشاري نيز از ويرگول استفاده ميكنندنه از نقطه . با استفاده درست از متد String.Format ميتوانيد برنامه اي بنويسيد كه بـر اسـاس تنظيمـات محلـي كـاربر،اطلاعات را به نحوي صحيح نمايش دهد .

 

جايگزيني زيررشته ها :

يكي از كارهاي عمومي ديگري كه ممكن است هنگام كار با رشته ها به آن نياز پيدا كنيد، جـايگزيني يـك رشـته خـاص بـا رشـتهديگري در يك متن است . براي توضيح چگونگي اين كار، در بخش ام تحان كنيد بعدي، برنامه Strings خـود را بـه گونـه ايتغيير ميدهيم كه رشته “Hello” را با رشته “Goodbye” جايگزين كند .

)1 برنامه Strings را كه قبلا ايجاد كرده بوديد، باز كنيد .

)2 كنترل Button ديگري را به Form1 اضافه كنيد، خاصيت Name آ ن را برابر btnReplace و خاصيت

Text آن را برابر Replace قرار دهيد . روي دكمه دو بار كليك كنيد و كد مشخص شده در زير را به متد مربـوط

به رويداد Click آن اضافه كنيد.

private void btnReplace_Click(object sender, EventArgs e)

{

// Declare variables

string strData;

string strNewData;

// Get the text from the TextBox

strData = txtString.Text;

// Replace the string occurance

strNewData = strData.Replace(“Hello”, “Goodbye”);

// Display the new string

MessageBox.Show(strNewData, “Strings”);

}

 

)3 برنامه را اجرا كنيد و جمله !Hello World را در جعبه متني وارد كنيد .

)4 روي دكمه Replace كليك كنيد. كادر پيغامي را مشاهده خواهيد كرد كه عبـارت !Goodbye World رانمايش مي دهد.

 

متد Replace دو رشته را دريافت ميكند و در متن به دنبال رشته اول مي گ ردد. سپس در هر قسمتي از مـتن كـه رشـته اول راپيدا كرد آن را با رشته دوم جايگزين مي كند . بعد از اين كه رشته اول در تمام متن با رشته دوم جايگزين شد، عبارت جديد بـه شـمابرگردانده مي شود و مي توانيد آن را نمايش دهيد .

// Replace the string occurance

strNewData = strData.Replace(“Hello”, “Goodbye”);

 

با استفاده از اين كد، فقط Hello اول با Goodbye جايگزين نميشود، بلكه ميتوانيد در جعبه متني، عبارتي را وارد كنيـد كـهچندين Hello داشته باشد . به اين ترتيب تمام Helloهاي متن با Goodbye جايگزين ميشوند. اما به خاطر داشته باشيدكه كد بالا، كلمه Hello را با Goodbye جايگزين ميكند نه كلمه hello ( را يا هر حالت ديگري ). به عبارت ديگر ايـنتابع نسبت به كوچكي يا بزرگي حروف حساس است .

 

تبديل نوع هاي داده اي :

 

در انجام محاسبات بر روي متغيير ها و يا ذخيره مقدار يك متغيير در متغييري ديگر، نوع داده اي آنها همواره بايد يكسان باشد. بـرايمثال يك عدد صحيح را فقط مي توان بر يك عدد صحيح ديگر تقسيم كرد و يا مقدار يك متغيير اعـشاري را نمـي تـوان بـه يـك1 متغيير از نوع عدد صحيح نسبت داد. در هنگام محاسبات اگر نوع هاي متغيير ها با هم تفاوت داشته باشد، يكي از متغيير ها بـه نـوع داده اي متغيير ديگر تبديل مي شود . تبديل نوع داده اي متغيير ها به دو روش مي تواند انجام شود : به صورت اتوماتيك و به صـورت صريح. در بيشتر مواقع اين تبديل نوع به صورت اتوماتيك توسط كامپايلر انجام مي شود . اما در مواقعي كه ايـن تبـديل نـوع ممكـن است منجر به از دست رفتن اطلاعات شود، برنامه نويس بايد آن را به صورت صريح انجام دهد .

براي مثال فرض كنيد مي خواهيد مقدار يك متغيير از نوع اعشاري را در يك متغيير از نوع صحيح قـرار دهيـد . در ايـن حالـت نمـيتوانيد به صورت معمولي از عملگر تساوي استفاده كنيد، زيرا ب ا اين كار قسمت اعشار عدد از بين ميرود . به همين علت كامپـايلر ايـنتبديل را به صورت اتوماتيك انجام نمي دهد . اما اگر بخواهيد يك متغيير از نوع عدد صحيح را در يك متغييـر از نـوع اعـشاري قـراردهيد مي توانيد از عملگر تساوي استفاده كنيد . زيرا با تغيير نوع از عدد صحيح به عدد اعشاري امكان از دست رفتن اطلاعـات وجـودندارد و اين تبديل نوع به صورت خودكار توسط كامپايلر انجام مي شود .در بخش امتحان كنيد بعد، چگونگي تبديل نوع داده اي يك متغيير به طور صريح را بررسي خواهيم كرد

.

تبديل نوع هاي داده اي

 

)1 در محيط ويژوال استوديو 2005 روي منوي File كليك كنيد و سپس New Project را انتخاب كنيد.در پنجره New Project يك برنامه ويندوزي به نام Casting Demo ايجاد كنيد .

)2 در قسمت طراحي Form1 يك كنترل Button قرار داده، خاصيت Name آن را بـه btnCast و Textآن را به Cast تغيير دهيد.

)3 بر رو ي دكمه فرمان دو بار كليك كنيد تا متد مربوط به رويداد كليك آن ايجاد شود . سپس كد مشخص شده در زيـر را درآن وارد كنيد.

 

private void btnCast_Click(object sender, EventArgs e)

{

حتي اگر مقدار آن متغيير فاقد قسمت اعشار باشد، باز هم نمي توان مقدار آن را در يك عدد صحيح قرار داد .

int intNumber = 2;

double dblNumber = 3.4;

intNumber = dblNumber;

MessageBox.Show(“The value of intNumber is: ” +

intNumber);

}

)4 برنامه را اجرا كنيد. مشاهده مي كنيد كه كامپايلر در خط سوم برنامه با خطا مواجه مي شود .

)5 كد متد btCast_Click را به صورت زير تغيير دهيد:

 

private void btnCast_Click(object sender, EventArgs e)

{

int intNumber = 2;

double dblNumber = 3.4;

dblNumber = intNumber;

MessageBox.Show(“The value of dblNumber is: ” +

dblNumber);

}

 

)6 برنامه را اجرا كنيد و بر روي دكمه فرمان كليك كنيد . مشاهده خواهيد كرد كه مقدار متغيير dblNumber به عدد 2تغيير كرده است .

)7 كد موجود در متد را مجدداً تغيير دهيد تا به صورت زير درآيد:

 

private void btnCast_Click(object sender, EventArgs e)

{

int intNumber = 2;

double dblNumber = 3.4;

intNumber = (int)dblNumber;

MessageBox.Show(“The value of intNumebr is: ” +

intNumber);

}

)8 برنامه را اجرا كرده و بر روي دكمه فرمان كليك كنيد . مشاهده خواهيد كرد كـه مقـدار متغييـر intNumber تغيـركرده و برابر با قسمت صحيح عدد dblNumber شده است .

در اين برنامه ابتدا سعي كرده ايم مقدار يك متغيير اعشاري را در يك متغيير از نوع صحيح قرار دهيم . همانطور كه مي دانيد بـا ايـنكار بخش اعشار عدد از بين مي رود . به همين دليل كامپايلر اين تبديل را به صورت اتوماتيك انجام نمي دهد و برنامه با خطا مواجـهمي شود .

 

intNumber = dblNumber;

MessageBox.Show(“The value of intNumber is: ” +

intNumber);

 

در بخش بعد سعي كرده ايم مقدار يك متغيير از نوع صحيح را در يك متغيير اعشاري قرار دهيم . به علت اينكه در اين حالت احتمـالاز دست رفتن اطلاعات وجود ندارد و مقدار موجود در متغيير به صورت كامل در متغيير اعشاري ذخيره مي شود، اين تبديل به صورتاتوماتيك توسط كامپايلر انجام مي شود .

 

dblNumber = intNumber;

MessageBox.Show(“The value of dblNumber is: ” +

dblNumber);

 

با اجراي برنامه و كليك بر روي دكمه فرمان مشاهده خواهيد كـرد كـه مقـدار متغييـر intNumber يعنـي عـدد 2 در متغييـرdblNumber قرار گرفته است .براي اينكه بتوانيم مقدار يك متغيير اعشاري را در يك متغيير از نوع عدد صحيح نگهداري كنيم بايد به طـور صـريح آن را بـه عـددصحيح تبديل كنيم . در زبان #C اين كار به وسيله عملگر پرانتز () انجام مي شود . براي تبديل يك متغيير بـه يـك نـوع داده اي خاص و ذخيره آن، بايد قبل از نام متغيير يك پرانتز قرار دهيد و سپس داخل پرانتز نام نوع داده اي مقصد را وارد كنيد. براي مثال:

 

intNumber = (int)dblNumber;

MessageBox.Show(“The value of intNumebr is: ” +

intNumber);

 

در اين كد متغيير dblNumber كه از نوع double است با استفاده از عملگر پر انتز بـه نـوع داده اي int تبـديل شـدهاست و سپس در متغييري از اين نوع ذخيره شده است .البته دقت داشته باشيد كه از اين روش براي تبديل متغيير هاي رشته اي به عددي و بر عكس نمي توانيد استفاده كنيد . اگر رشته ايكه شامل يك عدد است (مانند “234.14”) را بخواهيد به عدد ت بديل كنيد بايد از تابع Parse در نوع داده اي عدد استفادهكنيد. براي مثال فرض كنيد متغيير str1، رشته اي حاوي يك عدد اعشاري است و مي خواهيـد آن را در متغييـر dblNum1كه از نوع اعشاري است ذخيره كنيد. براي اين كار بايد از تابع ()double.Parse به صورت زير استفاده ك .نيد

 

dblNum1 = double.Parse(str1);

 

به همين ترتيب براي تبديل يك رشته شامل عدد صحيح به عدد صحيح بايد از تابع int.Parse استفاده كنيد .براي تبديل يك عدد به رشته هم بايد از تابع ()ToString مربوط به متغيير عددي استفاده كنيد . براي مثـال اگـر بخواهيـدمقدار متغيي ر dblNumber را در يك متغيير رشـته اي ذخيـره كنيـد بايـد از تـابع ()dblNumber.ToStringاستفاده كنيد

سعید عربعامری
من سعید عربعامری نویسنده کتاب 28 گام موثر در فتح متلب مدرس کشوری متلب و سیمولینک و کارشناس ارشد مهندسی برق قدرتم . بعد از اینکه دیدم سایتهای متعدد یک مجموعه کامل آموزش متلب و سیمولینک ندارند به فکر راه اندازی این مجموعه شدم
http://sim-power.ir

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *