0Pricing
Lua Academy · درس

‏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 يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. أساسيات السلاسل النصية: الربط والطول
  2. العثور على السلاسل الفرعية واستخراجها
  3. ‏string.format لإخراج النصوص
  4. ‏string.gsub وstring.gmatch
← العودة إلى Lua Academy