با سلام خدمت کاربران گرامی سایت پی وی لرن و کاربرانی که علاقمندان به دوره آموزشی پرل Perl. در جلسه گذشته آموزش کار با References را به کاربران و علاقمندان دوره پرل ارائه کردیم. در این جلسه با آموزش کار با فرمت ها در پرل همراه شما هستیم.
پرل برای خروجی گزارش ها از قالب نوشتاری خاصی با عنوان ” فرمت ” استفاده می نماید.
برای استفاده از مزایا و ویژگی های پرل، نخست باید یک فرمت را تعریف کرده و سپس از آن فرمت برای نوشتن داده های فرمت شده استفاده نمایید.
در ادامه آموزش کار با فرمت ها در پرل شما را با تعریف سازی یک فرمت آشنا می نماییم.
سینتکس زیر فرمت پرل را تعریف می نماید.
1 2 3 4 5 6 | format FormatName = fieldline value_one, value_two, value_three fieldline value_one, value_two . |
در سیتنکس بالا FormatName نام فرمت را نشان می دهد.
fieldline روش خاصی است که نشان می دهد که داده ها چگونه بایستی فرمت شوند.
values lines نیز نشان دهنده مقادیری هستند که وارد field line می شوند.
می توان یک فرمت را با single period پایان داد.
fieldline بعدی می تواند حاوی هر متن یا fieldholders باشد.
fieldholders فضا را برای داده های بعدی که در آن جا جایگذاری می شوند نگه می دارد.
در زیر می توانید فرمت fieldholder را ببینید.
1 | @<<<< |
این fieldholder یک left-justified است که اندازه فضای آن است.
برای دانستن تعداد این فضاها باید تعداد علامت های @ و > را بشمارید.
fieldholders های دیگر شامل موارد زیر هستند.
1 2 3 4 | @>>>> right-justified @|||| centered @####.## numeric field holder @* multiline field holder |
یک نمونه از فرمت به صورت زیر خواهد بود.
1 2 3 4 5 6 7 8 | format EMPLOYEE = =================================== @<<<<<<<<<<<<<<<<<<<<<< @<< $name $age @#####.## $salary =================================== . |
در این مثال name$ به عنوان left justify با ۲۲ کاراکتر spaces نوشته شده است و بعد از آن age در درون دو spaces نوشته خواهد شد.
برای فراخوانی اعلامیه فرمت، از کلمه کلیدی write استفاده می کنیم.
1 | write EMPLOYEE; |
مشکل این است که نام فرمت معمولا نام یک فایل باز است و write statement را به عنوان خروجی به این فایل ارسال می نماید.
برای ارسال داده به STDOUT باید EMPLOYEE را به فایل STDOUT متصل نمود.
ابتدا باید مطمئن شد که STDOUT فایل انتخابی ما است برای این کار باید از تابع ()select استفاده کرد.
1 | select(STDOUT); |
با تنظیم نام جدید فرمت با STDOUT و استفاده از مقادیر خاص ~$ یا FORMAT_NAME$ مانند نمونه زیر می توان EMPLOYEE را به STDOUT متصل کرد.
1 | $~ = "EMPLOYEE"; |
وقتی که از تابع ()write استفاده کنیم؛ در آن صورت داده به STDOUT ارسال می شود.
به یاد داشته باشید :
اگر می خواهید به جای استفاده از STDOUT گزارش تان را در هر یک از فایل های دیگر بنویسید در آن صورت می توانید از تابع ()select استفاده کنید تا فایل و باقی logic را که باقی مانده است انتخاب نمایید.
بیایید مثال زیر را ببینیم. در اینجا فقط از مقادیر سخت افزاری را برای نمایش دادن آن ها استفاده می کنیم.
در حالت واقعی باید مقادیر را از فایل یا پایگاه داده بخوانید تا گزارش واقعی را تولید نمایید.
در نهایت لازم است که گزارش نهایی را در فایل بنویسید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #!/usr/bin/perl format EMPLOYEE = =================================== @<<<<<<<<<<<<<<<<<<<<<< @<< $name $age @#####.## $salary =================================== . select(STDOUT); $~ = EMPLOYEE; @n = ("Ali", "Raza", "Jaffer"); @a = (20,30, 40); @s = (2000.00, 2500.00, 4000.000); $i = 0; foreach (@n) { $name = $_; $age = $a[$i]; $salary = $s[$i++]; write; } |
اجرای کد بالا خروجی به شکل زیر خواهد داشت.
1 2 3 4 5 6 7 8 9 10 11 12 | =================================== Ali 20 2000.00 =================================== =================================== Raza 30 2500.00 =================================== =================================== Jaffer 40 4000.00 =================================== |
همه چیز به نظر خوب می رسد اما حالا وقت آن است که یک سر صفحه یا Header خوب ایجاد نمایید.
این هدر در بالای هر صفحه پرینت خواهد شد.
انجام این کار و اضافه کردن هدر بسیار ساده است.
جدا از تعریف قالب، شما باید هدر را نیز تعریف کنید و آن را به متغیر ^$ یا $ FORMAT_TOP_NAME$ اختصاص دهید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #!/usr/bin/perl format EMPLOYEE = =================================== @<<<<<<<<<<<<<<<<<<<<<< @<< $name $age @#####.## $salary =================================== . format EMPLOYEE_TOP = =================================== Name Age =================================== . select(STDOUT); $~ = EMPLOYEE; $^ = EMPLOYEE_TOP; @n = ("Ali", "Raza", "Jaffer"); @a = (20,30, 40); @s = (2000.00, 2500.00, 4000.000); $i = 0; foreach (@n) { $name = $_; $age = $a[$i]; $salary = $s[$i++]; write; } |
حالا ببینید که گزارش شما چطور به نظر می رسد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | =================================== Name Age =================================== =================================== Ali 20 2000.00 =================================== =================================== Raza 30 2500.00 =================================== =================================== Jaffer 40 4000.00 =================================== |
در صورتی که گزارش شما بیش از یک صفحه را مصرف کند در آن صورت چه اتفاقی می افتد؟
یک راه حل ساده وجود دارد :
استفاده از %$ یا استفاده از متغیر FORMAT_PAGE_NUMBER$ در طول هدر به شکل زیر :
1 2 3 4 5 6 | format EMPLOYEE_TOP = =================================== Name Age Page @< $% =================================== . |
در آن صورت خروجی ما به صورت زیر خواهد بود.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | =================================== Name Age Page 1 =================================== =================================== Ali 20 2000.00 =================================== =================================== Raza 30 2500.00 =================================== =================================== Jaffer 40 4000.00 =================================== |
می توانید تعداد خطوط در هر صفحه را با استفاده از متغیر خاص $ = ( یا FORMAT_LINES_PER_PAGE$ ) است.
به صورت پیش فرض $ = برابر با ۶۰ خواهد بود.
در حالی که ^$ یا FORMAT_TOP_NAME$ شامل نام فرمت هدر فعلی است، هیچ مکانیزم متناظر برای انجام خودکار آن به صورت مشابه برای پاورقی footer وجود ندارد.
اگر شما یک پاورپوینت ثابت دارید، می توانید با چک کردن متغیر -$ یا $ FORMAT_LINES_LEFT$ قبل از ()write و پرینت footer، اگر لازم باشد از دیگر فرمت های تعریف شده استفاده نمایید.
1 2 3 4 | format EMPLOYEE_BOTTOM = End of Page @< $% . |
در این جلسه آموزش کار با فرمت ها در پرل را به علاقمندان این دوره ارائه کردیم.
در جلسه بعدی مدیریت فایل ها در این زبان را بررسی می نماییم.
با پی وی لرن همراه باشید.