Logo

Programming-Idioms

This language bar is your friend. Select your favorite languages!

Idiom #215 Pad string on the left

Prepend extra character c at the beginning of string s to make sure its length is at least m.
The length is the number of characters, not the number of bytes.

uses LazUtf8;
s := UTF8PadLeft(s,m,c);
s = s.PadLeft(m, c);
s = s.padLeft(m, c);
repeat(x,max(n-len(s),0)) // s
import "strings"
import "utf8"
if n := utf8.RuneCountInString(s); n < m {
	s = strings.Repeat(c, m-n) + s
}
--              BaseString      PadChar      MinOutputLength     PaddedString/Output
padLeft ::       String ->     Char ->          Int ->                String
padLeft s c m = let 
   isBaseLarger =  length s > m
   padder s c m False = [ c | _ <- [1..(m-length s)]] ++ s
   padder s _ _ True = s
      in 
         padder s c m isBaseLarger
s = s.padStart(m, c);
while (s.length() < m) s = c + s;
$s = $c x ($m - length($s)) . $s;
s = s.rjust(m, c)
s = f'{s:{c}>{m}}'
s.rjust(m, c)
use unicode_width::{UnicodeWidthChar, UnicodeWidthStr};
if let Some(columns_short) = m.checked_sub(s.width()) {
    let padding_width = c
        .width()
        .filter(|n| *n > 0)
        .expect("padding character should be visible");
    // Saturate the columns_short
    let padding_needed = columns_short + padding_width - 1 / padding_width;
    let mut t = String::with_capacity(s.len() + padding_needed);
    t.extend((0..padding_needed).map(|_| c)
    t.push_str(&s);
    s = t;
}

New implementation...