Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

how to compare values

Former Member
0 Kudos

i have values in an internal table.

ex.

character val1 val2 val3 val4 val5 etc

dimension 10 20 11.65 67 89

dim1 20.50 10 ...............................

in this i want to find min and max values for each row .this data is present in an internal table .how to code .

6 REPLIES 6

Former Member
0 Kudos

use sort int_table by field descending ( Here you get min value (Lowest value)

use sort int_table by field ascending ( Here you get max value (highest value)

naimesh_patel
Active Contributor
0 Kudos

You can try this way:

REPORT  ZTEST_NP.

data: begin of itab occurs 0,
      val1 type bseg-dmbtr,
      val2 type bseg-dmbtr,
      val3 type bseg-dmbtr,
      val4 type bseg-dmbtr,
      val5 type bseg-dmbtr,
      end   of itab.

data: begin of it_sort occurs 0,
      val type bseg-dmbtr,
      end   of it_sort.

itab-val1 = 11.
itab-val2 = 12.
itab-val3 = 16.
itab-val4 = 8.
itab-val5 = 10.
append itab.

itab-val1 = 211.
itab-val2 = 142.
itab-val3 = 156.
itab-val4 = 84.
itab-val5 = 120.
append itab.

field-symbols: <fs> type any.

loop at itab.
  refresh it_sort.
  do.
    assign COMPONENT sy-index OF STRUCTURE itab to <fs> .
    if sy-subrc <> 0.
      exit.
    endif.
    it_sort-val = <fs>.
    append it_sort.
  enddo.
  new-line.
  sort it_sort by val ascending .
  read table it_sort index  1.
  write: 'min' , it_sort-val.
  sort it_sort by val descending.
  read table it_sort index 1.
  write: 'Max' , it_sort-val.
endloop.

Regards,

Naimesh Patel

former_member194669
Active Contributor
0 Kudos

Hi,

Try this way.


field-symbols <value> like itab-val1.
data : inc type i.
data : min type i.
data : max type i.
Loop at itab.
clear : min, max.
do.
  inc = sy-index  - 1.
  assign itab-val1 increment inc to <value> range itab.
  if sy-subrc = 0.
    if min < <value>.
      min = <value>.
    endif.
    if min > max.
      max = min.
    endif.
  else.
    exit.
  endif.
enddo.
" store the min and max value to another internal table according to itab key field
endloop.

Former Member
0 Kudos

Hi Veera,


"Create an internal table itab1 with one field for holding Val.
data: begin of wa1,
          field like val1, "of the type field with max length
        end of wa1,
        itab1 like table of wa1.

Loop at Itab.  "Your internal table
  move itab-val1 to wa1-field.
  append wa1 to itab1.
  move itab-val2 to wa1-field.
  append wa1 to itab1.
  move itab-val3 to wa1-field.
  append wa1 to itab1.
  move itab-val4 to wa1-field.
  append wa1 to itab1.
  move itab-val5 to wa1-field.
  append wa1 to itab1.

  Sort itab1 descending.
  read itab1 index 1. "This will give you the <b>maximum</b> value
  Sort Itab1 ascending.
  read itab1 index 1. "This will give you the <b>minimum</b> value
endloop.

Lokesh

Message was edited by:

Lokesh Aggarwal

former_member191735
Active Contributor
0 Kudos

there is no such function to get low value in internal table but you can do like the following program.

TYPES: BEGIN OF t_tab,

f1 TYPE char10,

f2 TYPE char10,

f3 TYPE char10,

f4 TYPE char10,

END OF t_tab.

DATA: it_tab TYPE TABLE OF t_tab,

wa_tab TYPE t_tab.

FIELD-SYMBOLS: <fs_tab> TYPE t_tab,

<field> TYPE ANY.

DATA: t_low TYPE char10.

START-OF-SELECTION.

wa_tab-f1 = 5.

wa_tab-f2 = 6.

wa_tab-f3 = 8.

wa_tab-f4 = 2.

APPEND wa_tab TO it_tab.

CLEAR wa_tab.

wa_tab-f1 = 4.

wa_tab-f2 = 3.

wa_tab-f3 = 5.

wa_tab-f4 = 6.

APPEND wa_tab TO it_tab.

CLEAR wa_tab.

wa_tab-f1 = 1.

wa_tab-f2 = 4.

wa_tab-f3 = 5.

wa_tab-f4 = 9.

APPEND wa_tab TO it_tab.

CLEAR wa_tab.

LOOP AT it_tab ASSIGNING <fs_tab>.

DATA: l_cnt TYPE i.

l_cnt = 1.

DO.

ASSIGN COMPONENT l_cnt OF STRUCTURE <fs_tab> TO <field>.

IF sy-subrc <> 0.

EXIT.

ENDIF.

IF l_cnt = 1.

t_low = <field>.

ELSE.

IF t_low > <field>.

t_low = <field>.

ENDIF.

ENDIF.

l_cnt = l_cnt + 1.

ENDDO.

write: t_low. "this is your final value.

ENDLOOP.

copy and paste it . execute to know how it works.

0 Kudos

Hi ,

Try this. you have to add one more if condition if you have more fields.

DATA: BEGIN OF itab OCCURS 0,
       val1 TYPE i,
       val2 TYPE i,
       val3 TYPE i,
       val4 TYPE i,
      END   OF itab,

      BEGIN OF itab1 OCCURS 0,
       maxi TYPE i,
       mini TYPE i,
      END OF itab1.

DATA: max TYPE i,
      min TYPE i,
      max1 TYPE i,
      min1 TYPE i,
      maxi TYPE i,
      mini TYPE i.

itab-val1 = 11.
itab-val2 = 12.
itab-val3 = 16.
itab-val4 = 8.
APPEND itab.

itab-val1 = 211.
itab-val2 = 142.
itab-val3 = 156.
itab-val4 = 84.
APPEND itab.

LOOP AT itab.
  IF itab-val1 > itab-val2.
    max = itab-val1.
    min = itab-val2.
  ELSE.
    max = itab-val2.
    min = itab-val1.
  ENDIF.

  IF itab-val3 > itab-val4.
    max1 = itab-val3.
    min1 = itab-val4.
  ELSE.
    max1 = itab-val4.
    min1 = itab-val3.
  ENDIF.

  IF max1 > max.
    maxi = max1.
  ELSE.
    maxi = max.
  ENDIF.

  IF min1 > min.
    mini = min.
  ELSE.
    mini = min1.
  ENDIF.

  itab1-maxi = maxi.
  itab1-mini = mini.
  APPEND itab1.
  WRITE: 'MAX =', maxi,'MIN =',mini.
ENDLOOP.