Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
77
Task/Align-columns/ABAP/align-columns.abap
Normal file
77
Task/Align-columns/ABAP/align-columns.abap
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
report z_align no standard page header.
|
||||
start-of-selection.
|
||||
|
||||
data: lt_strings type standard table of string,
|
||||
lv_strings type string.
|
||||
append: 'Given$a$text$file$of$many$lines,$where$fields$within$a$line$' to lt_strings,
|
||||
'are$delineated$by$a$single$''dollar''$character,$write$a$program' to lt_strings,
|
||||
'that$aligns$each$column$of$fields$by$ensuring$that$words$in$each$' to lt_strings,
|
||||
'column$are$separated$by$at$least$one$space.' to lt_strings,
|
||||
'Further,$allow$for$each$word$in$a$column$to$be$either$left$' to lt_strings,
|
||||
'justified,$right$justified,$or$center$justified$within$its$column.' to lt_strings.
|
||||
types ty_strings type standard table of string.
|
||||
|
||||
perform align_col using 'LEFT' lt_strings.
|
||||
skip.
|
||||
perform align_col using 'RIGHT' lt_strings.
|
||||
skip.
|
||||
perform align_col using 'CENTER' lt_strings.
|
||||
|
||||
|
||||
form align_col using iv_just type string iv_strings type ty_strings.
|
||||
constants: c_del value '$'.
|
||||
data: lv_string type string,
|
||||
lt_strings type table of string,
|
||||
lt_tables like table of lt_strings,
|
||||
lv_first type string,
|
||||
lv_second type string,
|
||||
lv_longest type i value 0,
|
||||
lv_off type i value 0,
|
||||
lv_len type i.
|
||||
" Loop through the supplied text. It is expected at the input is a table of strings, with each
|
||||
" entry in the table representing a new line of the input.
|
||||
loop at iv_strings into lv_string.
|
||||
" Split the current line at the delimiter.
|
||||
split lv_string at c_del into lv_first lv_second.
|
||||
" Loop through the line splitting at every delimiter.
|
||||
do.
|
||||
append lv_first to lt_strings.
|
||||
lv_len = strlen( lv_first ).
|
||||
" Check if the length of the new string is greater than the currently stored length.
|
||||
if lv_len > lv_longest.
|
||||
lv_longest = lv_len.
|
||||
endif.
|
||||
if lv_second na c_del.
|
||||
" Check if the string is longer than the recorded maximum.
|
||||
lv_len = strlen( lv_second ).
|
||||
if lv_len > lv_longest.
|
||||
lv_longest = lv_len.
|
||||
endif.
|
||||
append lv_second to lt_strings.
|
||||
exit.
|
||||
endif.
|
||||
split lv_second at c_del into lv_first lv_second.
|
||||
enddo.
|
||||
|
||||
append lt_strings to lt_tables.
|
||||
clear lt_strings.
|
||||
endloop.
|
||||
|
||||
" Loop through each line of input.
|
||||
loop at lt_tables into lt_strings.
|
||||
" Loop through each word in the line (Separated by specified delimiter).
|
||||
loop at lt_strings into lv_string.
|
||||
lv_off = ( sy-tabix - 1 ) * ( lv_longest + 2 ).
|
||||
case iv_just.
|
||||
when 'LEFT'.
|
||||
write : at (lv_longest) lv_string left-justified.
|
||||
when 'RIGHT'.
|
||||
write at (lv_longest) lv_string right-justified.
|
||||
when 'CENTER'.
|
||||
write at (lv_longest) lv_string centered.
|
||||
endcase.
|
||||
endloop.
|
||||
skip.
|
||||
sy-linno = sy-linno - 1.
|
||||
endloop.
|
||||
endform.
|
||||
Loading…
Add table
Add a link
Reference in a new issue