0Pricing
R Academy · درس

حشو السلاسل النصية ومحاذاتها

استخدم formatC() وformat() لإخراج نص ثابت العرض ومحاذى.

حشو السلاسل النصية ومحاذاتها درس مجاني في R Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في R Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة R Academy 4 دروس في المجموع.

أهمية حشو السلاسل النصية

يُعد الإخراج بعرض ثابت أساسيًا للجداول النصية العادية وملفات السجل والتقارير. يوفر R الدالتين formatC() وformat() لحشو القيم حتى تصل إلى عرض ثابت، مما يضمن محاذاة الأعمدة بشكل صحيح في العروض ذات الخط أحادي المسافة.

# Unformatted: columns misalign
cat('Alice 85\n')
cat('Bob 9200\n')
# Padded: columns align
cat(formatC('Alice', width = 10), formatC(85,   width = 6), '\n')
cat(formatC('Bob',   width = 10), formatC(9200, width = 6), '\n')

formatC() — الحشو بمحاذاة إلى اليمين

تضيف formatC(x, width = n) حشوًا إلى القيمة لتبلغ عرضًا لا يقل عن n أحرف، مع محاذاتها إلى اليمين افتراضيًا. وتُضاف المسافات إلى اليسار. ويعمل ذلك مع الأعداد والسلاسل النصية على حد سواء.

formatC('hi',   width = 10)
formatC(42,     width = 10)
formatC(3.14,   width = 10)

المحاذاة إلى اليسار في formatC() باستخدام flag

يحوّل الوسيط flag = '-' المحاذاة إلى اليسار، إذ يحشو الجانب الأيمن بالمسافات. وهذا مثالي لتسميات السلاسل النصية في أعمدة الجداول عندما تريد أن تبدأ القيم من الحافة اليسرى.

items <- c('Pen', 'Notebook', 'Stapler')
prices <- c(1.5, 4.99, 7.25)
for (i in seq_along(items)) {
  cat(formatC(items[i], width = 12, flag = '-'),
      formatC(prices[i], format = 'f', digits = 2, width = 8),
      '\n')
}

استخدام formatC() مع التنسيقات العددية

تدعم formatC() رموز التنسيق التالية: 'f' للكسور العشرية الثابتة، و'e' للصيغة العلمية، و'g' لاختيار الأقصر بينهما، و'd' للأعداد الصحيحة. ويتحكم الوسيط digits في الدقة.

x <- 12345.6789
formatC(x, format = 'f', digits = 2)
formatC(x, format = 'e', digits = 3)
formatC(x, format = 'g', digits = 5)
formatC(42L, format = 'd', width = 8)

format() — المحاذاة في Base R

تُعد format(x, width = n, justify = 'left'/'right'/'centre') دالة المحاذاة العامة. وهي تعمل مع أي كائن من كائنات R وتعيد متجهًا محرفيًا من سلاسل متساوية العرض. وتكون المحاذاة الافتراضية للأعداد إلى اليمين، وللسلاسل إلى اليسار.

words <- c('cat', 'elephant', 'ox')
format(words, width = 10)
format(words, width = 10, justify = 'right')

استخدام format() للتحكم في الدقة العددية

تتحكم format() أيضًا في المنازل العشرية باستخدام nsmall (الحد الأدنى من الأرقام بعد الفاصلة العشرية) وbig.mark لفواصل الآلاف. وهذان الخياران مناسبان لعرض الأرقام المالية.

format(1234567.8,  big.mark = ',', nsmall = 2)
format(0.1,        nsmall = 4)
format(c(1.5, 100, 0.005), nsmall = 3)

strrep() — تكرار السلاسل النصية

تكرر strrep(x, times) سلسلة نصية عددًا محددًا من المرات. استخدمها لإنشاء أسطر الفواصل أو سلاسل الحشو أو العناصر الزخرفية المرئية من دون جمع الأحرف يدويًا.

strrep('-', 40)
strrep('=-', 20)
strrep(c('ab', 'cd'), c(3, 2))
# Draw a simple table border
cat(strrep('=', 30), '\n')

إنشاء جدول نصي بعرض ثابت

اجمع بين formatC() وcat() وstrrep() لإنشاء جدول نصي عادي ومنظم. ويشيع هذا النمط في أدوات CLI وملفات السجل.

header <- paste0(formatC('Name',  width=12,flag='-'),
                 formatC('Score', width=8,flag='-'),
                 formatC('Grade', width=8,flag='-'))
cat(header, '\n')
cat(strrep('-', 28), '\n')
row1 <- paste0(formatC('Alice',  width=12,flag='-'),
               formatC(92,width=8),formatC('A',width=8,flag='-'))
cat(row1, '\n')

formatC() وsprintf() للحشو

يمكن لكل من formatC() وsprintf() إنتاج إخراج محشو. وتكون sprintf() أكثر اختصارًا في الحالات البسيطة، بينما تتميز formatC() بمرونة أكبر عند تطبيق التنسيق نفسه على متجه كامل.

x <- 42
# sprintf approach
sprintf('%10d', x)
sprintf('%-10s', 'hello')
# formatC approach
formatC(x,       width = 10)
formatC('hello', width = 10, flag = '-')

التحكم في الصيغة العلمية

يتحكم formatC(x, format='e', digits=n) أو options(scipen=999) في الوقت الذي ينتقل فيه R إلى الصيغة العلمية. وخيار scipen هو قيمة جزائية؛ فكلما زادت قيمته، تأخر استخدام الصيغة العلمية مدة أطول.

# Default scipen
print(0.0001234)
print(1234567890)
# Force scientific
formatC(0.0001234, format = 'e', digits = 3)
# Suppress scientific globally
old <- options(scipen = 999)
print(0.0001234)
options(old)

تطبيق عملي: حشو المعرفات والتسميات

من الاحتياجات الشائعة إنشاء معرفات مسبوقة بأصفار أو تسميات مسبوقة بحشو في التقارير. تتولى formatC() الأمرين: استخدم flag = '0' لحشو الأعداد بالأصفار، وflag = '-' لمحاذاة السلاسل إلى اليسار.

ids    <- c(1, 12, 123)
names  <- c('Alice', 'Bob', 'Carol')
scores <- c(88.5, 91.0, 76.25)
for (i in seq_along(ids)) {
  cat(formatC(ids[i], width=5, format='d', flag='0'),
      formatC(names[i], width=10, flag='-'),
      formatC(scores[i], width=8, format='f', digits=2),
      '\n')
}

تحقق سريع

أي وسيط في formatC() يجعل الإخراج بمحاذاة إلى اليسار ضمن العرض المحدد؟

الحشو والمحاذاة: أهم النقاط

أهم النقاط المتعلقة بحشو السلاسل النصية ومحاذاتها:

  • formatC(x, width=n) يحشو إلى اليمين حتى العرض n؛ وflag='-' يحاذي إلى اليسار
  • formatC(x, format='f', digits=2) للكسور العشرية الثابتة؛ و'e' للصيغة العلمية
  • format(x, justify='left'/'right'/'centre') للمحاذاة العامة
  • format(x, big.mark=',', nsmall=2) لفواصل الآلاف والمنازل العشرية اللاحقة
  • strrep(s, n) تكرر سلسلة نصية n مرة — وهي ممتازة لأسطر الفواصل
  • اجمعها مع cat() لإخراج الجداول النصية العادية
cat(strrep('=', 30), '\n')
cat(formatC('Item', width=12, flag='-'),
    formatC('Price', width=10), '\n')
cat(strrep('-', 30), '\n')
cat(formatC('Apple', width=12, flag='-'),
    formatC(1.99, width=10, format='f', digits=2), '\n')

الأسئلة الشائعة

هل درس «حشو السلاسل النصية ومحاذاتها» مجاني؟

نعم — نص درس «حشو السلاسل النصية ومحاذاتها» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة R Academy، انتقل إلى CoddyKit PRO. تتضمن دورة R Academy 4 دروس في المجموع.

ماذا ستتعلم في «حشو السلاسل النصية ومحاذاتها»؟

استخدم formatC() وformat() لإخراج نص ثابت العرض ومحاذى. تتمرن على R Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ R Academy؟

لا تُشترط خبرة سابقة. R Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «حشو السلاسل النصية ومحاذاتها»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس R Academy هذا؟

نعم. كل درس في R Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

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

  1. بناء السلاسل النصية باستخدام paste() وpaste0()
  2. المخرجات المنسّقة باستخدام sprintf()
  3. عرض المخرجات باستخدام cat() وprint()
  4. حشو السلاسل النصية ومحاذاتها
← العودة إلى R Academy