string.format لإخراج النصوص
نسّق السلاسل النصية باستخدام %s و%d و%f ومواصفات التنسيق الأخرى
string.format لإخراج النصوص درس مجاني في Lua Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Lua Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Lua Academy 4 دروس في المجموع.
أساسيات string.format
تنسّق string.format(fmt, ...) القيم باستخدام محددات تنسيق على نمط C. وتُرجع سلسلة نصية منسّقة. تحتوي سلسلة التنسيق على نص حرفي ومحددات تحويل تبدأ بـ %. وهذه هي الطريقة الأساسية لإنتاج مخرجات دقيقة في Lua.
print(string.format("Hello, %s!", "Lua")) -- Hello, Lua!
print(string.format("Pi is %.4f", math.pi)) -- Pi is 3.1416
print(string.format("%d items at $%.2f each", 5, 2.99))%d و%i للأعداد الصحيحة
ينسّق %d و%i الأعداد الصحيحة. أضف عرضًا لتعبئة العدد: إذ يحاذي %5d العدد إلى اليمين ضمن 5 محارف. ويحاذي %-5d إلى اليسار. أما %05d فيملأ الخانات بالأصفار. تقتطع هذه المحددات الكسور العشرية من الأعداد العائمة؛ لذا استخدم math.floor() أولًا عند الحاجة.
print(string.format("%d", 42)) -- 42
print(string.format("%5d", 42)) -- 42 (right-aligned)
print(string.format("%-5d|", 42)) -- 42 | (left-aligned)
print(string.format("%05d", 42)) -- 00042
print(string.format("%+d", 42)) -- +42%f و%e للأعداد العائمة
ينسّق %f العدد بالصيغة العشرية الثابتة، بينما ينسّقه %e بالصيغة العلمية، ويختار %g الصيغة الأقصر. يتحكم محدد الدقة (مثل %.2f) في عدد المنازل العشرية. والدقة الافتراضية هي 6.
print(string.format("%.2f", 3.14159)) -- 3.14
print(string.format("%10.3f", 3.14)) -- 3.140
print(string.format("%e", 12345.678)) -- 1.234568e+04
print(string.format("%.2e", 0.001)) -- 1.00e-03
print(string.format("%g", 100.0)) -- 100%s للسلاسل النصية
يُدرج %s سلسلة نصية. وتُحوَّل القيم غير النصية باستخدام tostring. تعمل خيارات العرض والمحاذاة كما تعمل مع الأعداد. أما %q فيضع السلسلة بين علامات اقتباس بتنسيق يمكن لـ Lua قراءته (مع محارف الهروب)، وهو مفيد للتسلسل.
print(string.format("%-10s|", "hi")) -- hi |
print(string.format("%10s|", "hi")) -- hi|
print(string.format("%.3s", "hello")) -- hel (truncate)
print(string.format("%q", 'say "hi"'))-- "say \"hi\""
print(string.format("%s=%s", "key","val")) -- key=val%x و%o للقواعد الأخرى
ينسّق %x عددًا صحيحًا بالنظام الست عشري (بحروف صغيرة)، بينما ينسّقه %X بالنظام الست عشري بحروف كبيرة، و%o بالنظام الثماني، و%u كعدد صحيح غير موقّع. تفيد هذه المحددات في عرض أقنعة البتات، ورموز الألوان، والبرمجة منخفضة المستوى.
print(string.format("%x", 255)) -- ff
print(string.format("%X", 255)) -- FF
print(string.format("%#x", 255)) -- 0xff (with prefix)
print(string.format("%o", 8)) -- 10 (octal)
print(string.format("%08x", 0xDEAD)) -- 0000deadقيم متعددة
مرّر عددًا من الوسائط يساوي عدد محددات التنسيق. يجب أن يتطابق عدد الوسائط؛ فنقص الوسائط يسبب خطأً، بينما يتم تجاهل الوسائط الزائدة. استخدم سلاسل التنسيق لإنشاء مخرجات منظمة مثل الجداول والسجلات والتقارير.
local function printRow(name, score, grade)
print(string.format("%-12s %3d %s", name, score, grade))
end
printRow("Alice", 95, "A")
printRow("Bob", 87, "B")
printRow("Carol", 91, "A")
-- Alice 95 A
-- Bob 87 B
-- Carol 91 Aإنشاء قوالب التنسيق
خزّن سلاسل التنسيق كثوابت لإعادة استخدامها. يحافظ ذلك على اتساق المخرجات، ويسهّل تغيير التنسيق في موضع واحد. وتُعدّ تنسيقات السلاسل أساسًا للتسجيل وإخراج CSV وإنشاء التقارير.
local LOG_FMT = "[%s] %s: %s"
local function log(level, module, msg)
print(string.format(LOG_FMT, level, module, msg))
end
log("INFO", "server", "started on port 8080")
log("WARN", "db", "connection pool low")
log("ERROR", "auth", "token expired")التعبئة والمحاذاة
استخدم محددات العرض لمحاذاة المخرجات. يحاذي العرض الموجب إلى اليمين، والسالب إلى اليسار. ويفيد ذلك خصوصًا في الجداول والتقارير التي ينبغي أن تصطف أعمدتها. ادمجه مع string.rep لإنشاء أسطر فاصلة.
local fmt = "%-15s %6s %8s"
print(string.format(fmt, "Name", "Score", "Grade"))
print(string.rep("-", 31))
local data = {{"Alice",95,"A"},{"Bob",87,"B"},{"Dave",78,"C"}}
for _, r in ipairs(data) do
print(string.format(fmt, r[1], r[2], r[3]))
end%c و%% الحرفيان
يحوّل %c عددًا صحيحًا إلى محرف ASCII المناظر له. وينتج %% علامة النسبة المئوية الحرفية. يفيد ذلك في إنشاء المحارف الخاصة أو تضمين % في سلاسل التنسيق.
print(string.format("%c%c%c", 76, 117, 97)) -- Lua
print(string.format("100%%")) -- 100%
print(string.format("%.1f%%", 87.5)) -- 87.5%
-- Build a progress bar
local pct = 65
local filled = math.floor(pct / 5)
local bar = "[" .. string.rep("#",filled) .. string.rep(".",20-filled) .. "]"
print(bar .. " " .. pct .. "%")string.format مقابل tostring
استخدم tostring للتحويل البسيط لأي نوع، واستخدم string.format للتحكم في الدقة والتعبئة وتنسيق قيم متعددة. يستدعي string.format("%s", val) الدالة tostring داخليًا عند تحويل السلاسل النصية.
-- tostring: simple, any type
print(tostring(3.14)) -- 3.14
print(tostring(true)) -- true
print(tostring(nil)) -- nil
-- string.format: precision + structure
print(string.format("%.2f", 3.14159)) -- 3.14
print(string.format("%d", 255)) -- 255
-- print(string.format("%d", true)) -- ERRORتحقق سريع
ماذا تنتج string.format("%05.2f", 3.1)؟
مراجعة: string.format
الملخص:
%sسلسلة نصية،%dعدد صحيح،%fعدد عشري،%xست عشري- العرض:
%10dمحاذاة إلى اليمين،%-10dمحاذاة إلى اليسار،%010dتعبئة بالأصفار - الدقة:
%.2f(منزلتان عشريتان)،%.3s(3 محارف) - يضع
%qالسلسلة بين علامات اقتباس لتفسيرها في Lua %%علامة النسبة المئوية الحرفية
الأسئلة الشائعة
هل درس «string.format لإخراج النصوص» مجاني؟
نعم — نص درس «string.format لإخراج النصوص» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Lua Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Lua Academy 4 دروس في المجموع.
ماذا ستتعلم في «string.format لإخراج النصوص»؟
نسّق السلاسل النصية باستخدام %s و%d و%f ومواصفات التنسيق الأخرى تتمرن على Lua Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Lua Academy؟
لا تُشترط خبرة سابقة. Lua Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «string.format لإخراج النصوص»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Lua Academy هذا؟
نعم. كل درس في Lua Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- أساسيات السلاسل النصية: الربط والطول
- العثور على السلاسل الفرعية واستخراجها
- string.format لإخراج النصوص
- string.gsub وstring.gmatch