‎2007 Sep 20 3:24 PM
Hi ,
I have an ITAB the fields....f1 ,f2 & f3 .
The values in f3 are same sometimes .Like 2 records in f3 have the same value 384 in such cases I need put value into f2 as 2 or else it should be 1.
f1 f2 f3 f4
a 1 321 smith
b 1 276 ben
c 2 384 john
d 2 384 mark
e 3 546 ruby
f 3 546 wodd
g 3 546 todd
Please help me with the code ...how to do this.
‎2007 Sep 20 4:10 PM
This code works for the functionality u wanted.....
data : begin of itab3 occurs 0,
name1 type c,
num1 type i,
num2 type i,
name(10) type c,
end of itab3.
data : begin of itab4 occurs 0,
name1 type c,
num1 type i,
num2 type i,
name(10) type c,
end of itab4.
data : begin of itab occurs 0,
num1 type i,
num2 type i,
end of itab.
data : begin of itab1 occurs 0,
num1 type i,
num2 type i,
end of itab1.
data : num1 type i, num2 type i.
data : v_flag type c.
itab3-name1 = 'a'.
itab3-num2 = 321.
itab3-name = 'smith'.
append itab3.
clear itab3.
itab3-name1 = 'b'.
itab3-num2 = 276.
itab3-name = 'ben'.
append itab3.
clear itab3.
itab3-name1 = 'c'.
itab3-num2 = 384.
itab3-name = 'john'.
append itab3.
clear itab3.
itab3-name1 = 'd'.
itab3-num2 = 384.
itab3-name = 'marc'.
append itab3.
clear itab3.
itab3-name1 = 'e'.
itab3-num2 = 546.
itab3-name = 'ruby'.
append itab3.
clear itab3.
itab3-name1 = 'f'.
itab3-num2 = 546.
itab3-name = 'wodd'.
append itab3.
clear itab3.
itab3-name1 = 'g'.
itab3-num2 = 546.
itab3-name = 'todd'.
append itab3.
clear itab3.
sort itab3 by num2.
loop at itab3.
move-corresponding itab3 to itab.
append itab.
endloop.
loop at itab.
at new num2.
clear num1.
num1 = num1 + 1.
v_flag = 'X'.
endat.
if not v_flag = 'X'.
num1 = num1 + 1.
else.
clear v_flag.
endif.
at end of num2.
itab1-num1 = num1.
itab1-num2 = itab-num2.
append itab1.
endat.
endloop.
loop at itab3.
read table itab1 with key num2 = itab3-num2.
if sy-subrc = 0.
itab4-name1 = itab3-name1.
itab4-num1 = itab1-num1.
itab4-num2 = itab3-num2.
itab4-name = itab3-name.
append itab4.
clear itab4.
endif.
endloop.
sort itab4 by name1.
loop at itab4.
write 😕 itab4-name1 , itab4-num1 , itab4-num2 , itab4-name.
endloop.
Regards
Vasu
‎2007 Sep 20 3:31 PM
Have you tried to do it yourself? I so, please post the code so we can help you to correct it...Best way to learn, is to try yourself first -;)
Greetings,
Blag.
‎2007 Sep 20 4:00 PM
Data: begin of i_tab occurs 0,
f1(1),
f2 type i,
f3 type i,
f4(10),
end of i_tab.
data: l_counter type i,
l_test type i.
**assume you internal table is populated with the data you mentioned at this point**
This code should do it:
loop at i_tab.
l_counter = l_counter + 1.
l_test = i_tab-f3.
at end of f3.
i_tab-f2 = l_counter.
modify i_tab TRANSPORTING f2 where f3 = l_test.
clear l_counter.
clear l_test.
endat.
endloop.
Mithun.
‎2007 Sep 20 4:01 PM
hi ,
try this logic...its workin fine
data : cnt type i value 0,
temp type i. <-------in ur case
sort itab by f3.
loop at itab.
if temp = itab-f3.
cnt = cnt + 1.
temp = itab-f3.
itab-f3 = cnt.
modify itab .
else.
cnt =0.
temp = itab-f3.
endif.
endloop.
regards,
karthik.
Message was edited by:
karthikeyan sukumar
‎2007 Sep 20 4:10 PM
This code works for the functionality u wanted.....
data : begin of itab3 occurs 0,
name1 type c,
num1 type i,
num2 type i,
name(10) type c,
end of itab3.
data : begin of itab4 occurs 0,
name1 type c,
num1 type i,
num2 type i,
name(10) type c,
end of itab4.
data : begin of itab occurs 0,
num1 type i,
num2 type i,
end of itab.
data : begin of itab1 occurs 0,
num1 type i,
num2 type i,
end of itab1.
data : num1 type i, num2 type i.
data : v_flag type c.
itab3-name1 = 'a'.
itab3-num2 = 321.
itab3-name = 'smith'.
append itab3.
clear itab3.
itab3-name1 = 'b'.
itab3-num2 = 276.
itab3-name = 'ben'.
append itab3.
clear itab3.
itab3-name1 = 'c'.
itab3-num2 = 384.
itab3-name = 'john'.
append itab3.
clear itab3.
itab3-name1 = 'd'.
itab3-num2 = 384.
itab3-name = 'marc'.
append itab3.
clear itab3.
itab3-name1 = 'e'.
itab3-num2 = 546.
itab3-name = 'ruby'.
append itab3.
clear itab3.
itab3-name1 = 'f'.
itab3-num2 = 546.
itab3-name = 'wodd'.
append itab3.
clear itab3.
itab3-name1 = 'g'.
itab3-num2 = 546.
itab3-name = 'todd'.
append itab3.
clear itab3.
sort itab3 by num2.
loop at itab3.
move-corresponding itab3 to itab.
append itab.
endloop.
loop at itab.
at new num2.
clear num1.
num1 = num1 + 1.
v_flag = 'X'.
endat.
if not v_flag = 'X'.
num1 = num1 + 1.
else.
clear v_flag.
endif.
at end of num2.
itab1-num1 = num1.
itab1-num2 = itab-num2.
append itab1.
endat.
endloop.
loop at itab3.
read table itab1 with key num2 = itab3-num2.
if sy-subrc = 0.
itab4-name1 = itab3-name1.
itab4-num1 = itab1-num1.
itab4-num2 = itab3-num2.
itab4-name = itab3-name.
append itab4.
clear itab4.
endif.
endloop.
sort itab4 by name1.
loop at itab4.
write 😕 itab4-name1 , itab4-num1 , itab4-num2 , itab4-name.
endloop.
Regards
Vasu
‎2007 Sep 20 4:23 PM
Hi,
You can use this code to get your desired output.
REPORT ZTEST.
data : begin of itab occurs 0,
field1 type c,
field2 type i,
field3 TYPE i,
field4(6) type c,
end of itab.
data : itab1 like itab OCCURS 0 with header line.
data : lv_counter type i,
lv_name type i.
itab-field1 = 'a'.
*itab-field2 = '1'.
itab-field3 = '321'.
itab-field4 = 'Smith'.
append itab.
clear itab.
itab-field1 = 'b'.
*itab-field2 = '1'.
itab-field3 = '276'.
itab-field4 = 'Ben'.
append itab.
clear itab.
itab-field1 = 'c'.
*itab-field2 = '2'.
itab-field3 = '384'.
itab-field4 = 'John'.
append itab.
clear itab.
itab-field1 = 'd'.
*itab-field2 = '2'.
itab-field3 = '384'.
itab-field4 = 'Mark'.
append itab.
clear itab.
itab-field1 = 'e'.
*itab-field2 = '3'.
itab-field3 = '546'.
itab-field4 = 'Ruby'.
append itab.
clear itab.
itab-field1 = 'f'.
*itab-field2 = '3'.
itab-field3 = '546'.
itab-field4 = 'Wodd'.
append itab.
clear itab.
itab-field1 = 'g'.
*itab-field2 = '3'.
itab-field3 = '546'.
itab-field4 = 'Todd'.
append itab.
clear itab.
itab1[] = itab[].
loop at itab.
lv_name = itab-field3.
loop at itab1 where field3 = itab-field3.
lv_counter = LV_COUNTER + 1.
endloop.
move : lv_counter to itab-field2.
modify itab.
clear itab.
clear lv_counter.
clear lv_name.
endloop.
loop at itab.
write :-------
endloop.
Thanks,
Sriram Ponna.