challenge 文字列のセンタリング

文字列を指定のカラム幅にセンタリング配置する関数を示してください。文字列の長さが指定した幅より長い場合には文字列の両端をできるだけ均等に切り落して指定幅に収めてください。1文字は1カラムに収まるものと仮定してかまいません。

Posted feedbacks - Batchfile

バッチで書いてみました。文字列が半角空白を含まない場合は、引数をダブルクォーテー
ションで括る必要はありません。なお、18行目と20行目の行末に半角空白が 1つあるので
注意してください。

  e.g.
    C:\>@echo off & (for /l %i in (0,1,7) do center "abcde" %i) & @echo on
    []
    [c]
    [bc]
    [bcd]
    [abcd]
    [abcde]
    [abcde ]
    [ abcde ]

遅延環境変数展開を利用しているので、Windows NTでは動作しません。Windows 2000, XP, 
2003で動作を確認。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
:: center.bat

@echo off
  setlocal enabledelayedexpansion
    set l=0
    set m=0
    set n=0
    set t=%1
    set t=%t:"=%

    call :length "%t%" l

    if %2 gtr %l% (
      set /a m=%2-%l%
      set /a n=!m!/2
      :: パディング
      for /l %%i in (1,1,!n!) do set t= !t!
      for /l %%i in (1,1,!n!) do set t=!t! 
      set /a n=!m!%%2
      if !n! equ 1 set t=!t! 
    )

    if %l% gtr %2 (
      set /a m=%l%-%2
      set /a n=!m!/2
      :: トリミング
      for /l %%i in (1,1,!n!) do set t=!t:~1!
      for /l %%i in (1,1,!n!) do set t=!t:~0,-1!
      set /a n=!m!%%2
      if !n! equ 1 set t=!t:~0,-1!
    )

  endlocal & echo [%t%]
goto :EOF

:length
  setlocal
    set i=0
    set t=%1
    set t=%t:"=%

    :loop
      set t=%t:~1%
      set /a i+=1
    if not "%t%" == "" goto loop
  endlocal & set %2=%i%
goto :EOF

Index

Feed

Other

Link

Pathtraq

loading...