قالب بندی fmt
تبدیل عدد و مقدار منطقی به متن، همترازی متن و ساختن رشته از یک قالب.
واردسازی قالب بندی
نام آرگومانها شناسهی خود کد است و معادل فارسی ندارد؛ گونهها، کلیدواژهها و نام بستهها با معادل فارسی نوشته میشوند.
وقتی میخواهید خروجی مرتب و خوانا بسازید، بستهی قالب بندی به کارتان میآید. با آن عددها را به متن تبدیل میکنید، متن را در ستونهایی با پهنای ثابت میچینید و جملهها را از یک قالب میسازید.
قالبها سادهاند: هر {} در قالب با عضو بعدی وکتور مقدارها پر میشود. چون مقدارها رشتهاند، عددها را پیش از آن با تابعهایی مثل عدد صحیح به متن تبدیل کنید.
اگر با printf یا Go آشنایید، به اینها دقت کنید:
- نشانههایی مثل
%dیا{:.2}وجود ندارد. جای خالی همیشه یک{}ساده است؛ پهنا و تعداد رقم اعشار را با قالببندی خود مقدار، پیش از گذاشتن در قالب، تعیین کنید، مثلاً باپرکردن چپیاعدد اعشار با دقت. - نمیتوان خود
{}را در متن قالب نوشت، چون راهی برای گریز از آن نیست. شانزدهوعدد بی علامتمقدارطبیعی۶۴میگیرند؛ پس عددصحیحرا باید تبدیل کرد:قالب بندی.شانزده(n برگردان طبیعی۶۴).
چاپ یک جدول
جدول در متن ساده یعنی ردیفی از خانههای پرشده. ستونهای متنی وقتی با پرکردن راست از ابتدا همتراز شوند خواناترند، و ستونهای عددی با پرکردن چپ از انتها، تا رقمهای هر مرتبه زیر هم بیایند. یک تابع کمکی که یک ردیف را میسازد، همهی خطهای جدول را، سرستون هم، یکشکل نگه میدارد.
واردسازی قالب بندی
ساختار خرید:
همگانی نام: رشته = ""
همگانی تعداد: صحیح = ۰
همگانی قیمت: اعشار۶۴ = ۰.۰
پایان
تابع ردیف(الف: رشته، ب: رشته، پ: رشته): رشته:
برگشت قالب بندی.پرکردن راست(الف، ۱۲) + قالب بندی.پرکردن چپ(ب، ۵) + قالب بندی.پرکردن چپ(پ، ۱۰)
پایان
تابع ریشه:
اقلام := [خرید { نام = "قهوه"، تعداد = ۲، قیمت = ۳.۵ }، خرید { نام = "کروسان"، تعداد = ۳، قیمت = ۲.۲۵ }، خرید { نام = "آب"، تعداد = ۱، قیمت = ۱.۰ }]
سرچاپ "|" + قالب بندی.وسط چین("رسید خرید"، ۲۵) + "|"
سرچاپ ردیف("کالا"، "تعداد"، "مبلغ")
ناپایا جمع := ۰.۰
هر قلم در اقلام:
مبلغ := قلم.قیمت * قلم.تعداد
جمع += مبلغ
سرچاپ ردیف(قلم.نام، قالب بندی.عدد صحیح(قلم.تعداد)، قالب بندی.عدد اعشار با دقت(مبلغ، ۲))
پایان
سرچاپ ردیف("جمع"، ""، قالب بندی.عدد اعشار با دقت(جمع، ۲))
پایانمبلغها با عدد اعشار با دقت و دو رقم اعشار چاپ میشوند، پس 7 به شکل 7.00 درمیآید و همهی مبلغها همپهنا میشوند. پهنا بر حسب حرف شمرده میشود، نه بایت، پس نامهای فارسی هم درست همتراز میشوند. مقداری که از ستونش بلندتر باشد هیچوقت بریده نمیشود، فقط بقیهی ردیف را جلوتر میبرد؛ پهناها را به اندازهی بلندترین مقدارتان انتخاب کنید.
اگر جدول را در پایانهای راستبهچپ نگاه کنید، جای ستونها ممکن است جابهجا دیده شود، چون نمایش متن فارسی و عدد کنار هم به الگوریتم دوسویهی یونیکد بستگی دارد. خود رشتهها درستاند؛ برای نمایش دقیق در وب از جدول HTML استفاده کنید.
پر کردن قالب یک پیام
قالب رشته هر {} را با رشتهی بعدیِ یک وکتور پر میکند. نگه داشتن جمله در یک قالب، بهجای زنجیرهای بلند از +، خواندن و تغییر دادنش را آسان میکند و میشود بعداً قالب را با ترجمهاش عوض کرد. عدد و مقدار منطقی اول با عدد صحیح، عدد اعشار یا منطقی به متن تبدیل میشوند، چون همهی مقدارها رشتهاند.
واردسازی قالب بندی
ساختار سفارش:
همگانی مشتری: رشته = ""
همگانی شماره: صحیح = ۰
همگانی پرداخت شده: منطقی = نادرست
پایان
تابع پیام سفارش(س: سفارش): رشته:
ناپایا مقدارها := وکتور {} برگردان وکتور<رشته>
دیرکن مقدارها.آزادکن()
مقدارها.بیفزا(س.مشتری)
مقدارها.بیفزا(قالب بندی.عدد صحیح(س.شماره))
مقدارها.بیفزا(س.پرداخت شده ? "پرداخت شده" : "در انتظار پرداخت")
برگشت قالب بندی.قالب رشته("{} عزیز، سفارش {} {} است."، مقدارها)
پایان
تابع ریشه:
سرچاپ پیام سفارش(سفارش { مشتری = "نیما"، شماره = ۱۰۴۲، پرداخت شده = درست })
سرچاپ پیام سفارش(سفارش { مشتری = "لیلا"، شماره = ۱۰۴۳ })
پایانوکتور مقدارها مال شماست، پس وقتی پیام ساخته شد آزادش کنید. اگر نتیجه باید به پرونده برود نه به یک رشته، قالب نوشتن همان قالب و مقدارها را میگیرد و در یک پرونده* باز مینویسد.
خروجی مبنای شانزده
شانزده عدد را در مبنای شانزده با حروف کوچک و بدون 0x مینویسد و صفر پیشرو نمیگذارد. قالبهایی با پهنای ثابت، مثل رنگ CSS که هر کانالش دقیقاً دو رقم است، باید آن صفر را خودشان اضافه کنند.
واردسازی قالب بندی
تابع دو رقم شانزده(ع: صحیح): رشته:
ش := قالب بندی.شانزده(ع برگردان طبیعی۶۴)
اگر ش.طول() < ۲:
برگشت "0" + ش
پایان
برگشت ش
پایان
تابع رنگ وب(سرخ: صحیح، سبز: صحیح، آبی: صحیح): رشته:
برگشت "#" + دو رقم شانزده(سرخ) + دو رقم شانزده(سبز) + دو رقم شانزده(آبی)
پایان
تابع ریشه:
سرچاپ رنگ وب(۲۵۵، ۱۶۵، ۰)
سرچاپ رنگ وب(۰، ۱۲۸، ۱۲۸)
سرچاپ رنگ وب(۹، ۹، ۹)
ناپایا روشنی := ۰
تا روشنی <= ۲۵۵:
سرچاپ قالب بندی.پرکردن چپ(قالب بندی.عدد صحیح(روشنی)، ۳)، رنگ وب(روشنی، روشنی، روشنی)
روشنی += ۸۵
پایان
پایانپرکردن چپ همیشه با فاصله پر میکند؛ برای ستون روشنی در سمت چپ درست است، اما برای رقمهای شانزدهشانزدهی نه. برای عددهای بزرگتر از یک بایت، طول را با پهنای لازم مقایسه کنید و به تعداد کمبود صفر بگذارید.
کدام تابع برای کدام کار
| کار | تابع |
|---|---|
| عدد صحیح به متن | عدد صحیح، یا عدد بی علامت برای طبیعی۶۴ |
| عدد اعشاری در کوتاهترین شکل | عدد اعشار |
| عدد اعشاری با تعداد رقم اعشار ثابت | عدد اعشار با دقت |
| همترازی متن در ستون | پرکردن راست (همترازی از ابتدا)، پرکردن چپ (از انتها)، وسط چین |
| جملهای با مقدارهایی در آن | قالب رشته، یا قالب نوشتن برای نوشتن در پرونده |
| مبنای شانزده | شانزده |
برای تبدیل متن به عدد، صفحهی تبدیل را ببینید. برای قالبهایی با نام، حلقه و شرط، مثل صفحهی HTML یا ایمیل، از قالب استفاده کنید.
تابعها
عدد صحیح Int
تابع عدد صحیح(i: صحیح۶۴): رشتهواردسازی قالب بندی
تابع ریشه:
سرچاپ "[" + قالب بندی.عدد صحیح(-۴۲) + "]"
سرچاپ "[" + قالب بندی.عدد بی علامت(۴۲ برگردان طبیعی۶۴) + "]"
سرچاپ "[" + قالب بندی.عدد اعشار(۳.۲۵) + "]"
سرچاپ "[" + قالب بندی.عدد اعشار با دقت(۳.۱۴۱۵۹، ۲) + "]"
سرچاپ "[" + قالب بندی.منطقی(درست) + "]"
سرچاپ "[" + قالب بندی.شانزده(۲۵۵ برگردان طبیعی۶۴) + "]"
پایانعدد اعشار Float
تابع عدد اعشار(f: اعشار۶۴): رشته1.0 میشود 1، 0.1 همان 0.1 میماند و 1.0 / 3.0 میشود 0.3333333333333333. عددهای خیلی بزرگ یا خیلی کوچک با توان نوشته میشوند، مثل 1e+21. اگر تعداد رقم اعشار باید ثابت باشد، عدد اعشار با دقت را به کار ببرید.نمونهی این مورد همراه با موارد بالاتر آمده است: fmt-Int.salam
منطقی Bool
تابع منطقی(b: منطقی): رشته"true" یا "false" تبدیل میکند.نمونهی این مورد همراه با موارد بالاتر آمده است: fmt-Int.salam
پرکردن چپ PadLeft
تابع پرکردن چپ(s: رشته، width: صحیح): رشتهwidth کوتاهتر باشد، سمت چپش فاصله میگذارد تا به آن پهنا برسد. پهنا بر حسب حرف شمرده میشود، پس برای متن فارسی هم درست کار میکند. در ستون عددها، این تابع عددها را از راست همتراز میکند.واردسازی قالب بندی
تابع ریشه:
سرچاپ "[" + قالب بندی.پرکردن چپ("42"، ۶) + "]"
سرچاپ "[" + قالب بندی.پرکردن راست("42"، ۶) + "]"
سرچاپ "[" + قالب بندی.وسط چین("42"، ۶) + "]"
سرچاپ "[" + قالب بندی.پرکردن چپ("سلام"، ۱۰) + "]"
پایانپرکردن راست PadRight
تابع پرکردن راست(s: رشته، width: صحیح): رشتهپرکردن چپ، ولی فاصلهها را سمت راست متن میگذارد.نمونهی این مورد همراه با موارد بالاتر آمده است: fmt-PadLeft.salam
وسط چین Center
تابع وسط چین(s: رشته، width: صحیح): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: fmt-PadLeft.salam
قالب رشته Sprintf
تابع قالب رشته(tmpl: رشته، args: وکتور<رشته>): رشته{} را بهترتیب با عضوهای وکتور args پر میکند. اگر مقدار کم بیاید، جای خالیها تهی میمانند و مقدارهای اضافه نادیده گرفته میشوند.واردسازی قالب بندی
تابع ریشه:
ناپایا مقدارها := وکتور {} برگردان وکتور<رشته>
دیرکن مقدارها.آزادکن()
مقدارها.بیفزا("سارا")
مقدارها.بیفزا(قالب بندی.عدد صحیح(۱۹))
سرچاپ قالب بندی.قالب رشته("{} نمرهی {} گرفت."، مقدارها)
پایانقالب نوشتن Fprintf
تابع قالب نوشتن(f: پرونده*، tmpl: رشته، args: وکتور<رشته>): صحیحقالب رشته، ولی نتیجه را مستقیم در پروندهی باز مینویسد و تعداد بایتهای نوشتهشده را برمیگرداند.واردسازی قالب بندی
واردسازی ورودی خروجی
واردسازی سیستم عامل
تابع ریشه:
ناپایا مقدارها := وکتور {} برگردان وکتور<رشته>
دیرکن مقدارها.آزادکن()
مقدارها.بیفزا("۲۵")
پ := سیستم عامل.بازکردن("دما.txt"، "wb")
قالب بندی.قالب نوشتن(پ، "دمای امروز {} درجه است\n"، مقدارها)
ورودی خروجی.بستن(پ)
چاپ ورودی خروجی.خواندن پرونده("دما.txt")
پایانعدد اعشار با دقت FloatPrec
تابع عدد اعشار با دقت(f: اعشار۶۴، prec: صحیح): رشته2.675 با دو رقم 2.68 میشود و -1.5 بدون رقم اعشار -2.نمونهی این مورد همراه با موارد بالاتر آمده است: fmt-Int.salam
عدد بی علامت Uint
تابع عدد بی علامت(u: طبیعی۶۴): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: fmt-Int.salam
شانزده Hex
تابع شانزده(u: طبیعی۶۴): رشته0x و بدون صفرهای آغازی. ورودیاش طبیعی۶۴ است، پس عدد صحیح را با برگردان طبیعی۶۴ تبدیل کنید.نمونهی این مورد همراه با موارد بالاتر آمده است: fmt-Int.salam