85 lines
2.3 KiB
Batchfile
85 lines
2.3 KiB
Batchfile
@echo off
|
|
setlocal enabledelayedexpansion
|
|
mode con cols=103
|
|
|
|
echo Given$a$text$file$of$many$lines,$where$fields$within$a$line$ >file.txt
|
|
echo are$delineated$by$a$single$'dollar'$character,$write$a$program! >>file.txt
|
|
echo that$aligns$each$column$of$fields$by$ensuring$that$words$in$each$>>file.txt
|
|
echo column$are$separated$by$at$least$one$space.>>file.txt
|
|
echo Further,$allow$for$each$word$in$a$column$to$be$either$left$>>file.txt
|
|
echo justified,$right$justified,$or$center$justified$within$its$column.>>file.txt
|
|
|
|
for /f "tokens=1-13 delims=$" %%a in ('type file.txt') do (
|
|
call:maxlen %%a %%b %%c %%d %%e %%f %%g %%h %%i %%j %%k %%l %%m )
|
|
echo.
|
|
for /f "tokens=1-13 delims=$" %%a in ('type file.txt') do (
|
|
call:align 1 %%a %%b %%c %%d %%e %%f %%g %%h %%i %%j %%k %%l %%m )
|
|
echo.
|
|
for /f "tokens=1-13 delims=$" %%a in ('type file.txt') do (
|
|
call:align 2 %%a %%b %%c %%d %%e %%f %%g %%h %%i %%j %%k %%l %%m )
|
|
echo.
|
|
for /f "tokens=1-13 delims=$" %%a in ('type file.txt') do (
|
|
call:align 3 %%a %%b %%c %%d %%e %%f %%g %%h %%i %%j %%k %%l %%m )
|
|
|
|
exit /B
|
|
|
|
:maxlen &::sets variables len1 to len13
|
|
set "cnt=1"
|
|
:loop1
|
|
if "%1"=="" exit /b
|
|
call:strlen %1 length
|
|
if !len%cnt%! lss !length! set len%cnt%=!length!
|
|
set /a cnt+=1
|
|
shift
|
|
goto loop1
|
|
|
|
:align
|
|
setlocal
|
|
set cnt=1
|
|
set print=
|
|
:loop2
|
|
if "%2"=="" echo(%print%&endlocal & exit /b
|
|
set /a width=len%cnt%,cnt+=1
|
|
set arr=%2
|
|
if %1 equ 1 call:left %width% arr
|
|
if %1 equ 2 call:right %width% arr
|
|
if %1 equ 3 call:center %width% arr
|
|
set "print=%print%%arr% "
|
|
shift /2
|
|
goto loop2
|
|
|
|
:left %num% &string
|
|
setlocal
|
|
set "arr=!%2! "
|
|
set arr=!arr:~0,%1!
|
|
endlocal & set %2=%arr%
|
|
exit /b
|
|
|
|
:right %num% &string
|
|
setlocal
|
|
set "arr= !%2!"
|
|
set arr=!arr:~-%1!
|
|
endlocal & set %2=%arr%
|
|
exit /b
|
|
|
|
:center %num% &string
|
|
setlocal
|
|
set /a width=%1-1
|
|
set arr=!%2!
|
|
:loop3
|
|
if "!arr:~%width%,1!"=="" set "arr=%arr% "
|
|
if "!arr:~%width%,1!"=="" set "arr= %arr%"
|
|
if "!arr:~%width%,1!"=="" goto loop3
|
|
endlocal & set %2=%arr%
|
|
exit /b
|
|
|
|
:strlen StrVar &RtnVar
|
|
setlocal EnableDelayedExpansion
|
|
set "s=#%~1"
|
|
set "len=0"
|
|
for %%N in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
|
|
if "!s:~%%N,1!" neq "" set /a "len+=%%N" & set "s=!s:~%%N!"
|
|
)
|
|
endlocal & set %~2=%len%
|
|
exit /b
|