2013 Mar 21 7:44 AM
Hi All,
im trying to delete rows from my internal table using the below logic but its giving a dump.
Pls help.
LOOP at itabINTO wa.
lv_int = strlen( wa ).
lv_int = lv_int - 3.
IF wa+lv_int(3) = 'XYZ'.
DELETE itab FROM wa.
ENDIF.
ENDLOOP.
Thanks & regards,
Faiz
Hi All,
im trying to delete rows from my internal table using the below logic but its giving a dump.
Pls help.
LOOP at itabINTO wa.
lv_int = strlen( wa ).
lv_int = lv_int - 3.
IF wa+lv_int(3) = 'XYZ'.
DELETE itab FROM wa.
ENDIF.
ENDLOOP.
Thanks & regards,
Faiz
2013 Mar 21 7:53 AM
Hello,
Do not delete within a loop. Take a flag field into your internal table. set flag for the record which you want to delete. Delete outside the loop, Delete the records where flag = 'X'.
Thanks,
Abhijit
2013 Mar 21 7:58 AM
Hi Faizur,
Dont use DELETE statement with in LOOP.
u can use below code.
take one field into ur Internal Table.
Like field DEL
data : lv_tabix type sytabix.
LOOP at itabINTO wa.
lv_tabix = sy-tabix.
lv_int = strlen( wa ).
lv_int = lv_int - 3.
IF wa+lv_int(3) = 'XYZ'.
now wa-del = 'X'.
modify itab from wa index l v_tabix.
ENDIF.
ENDLOOP.
DELETE ITAB WHERE DEL = 'X'.
It will work properly.
Thanks
tarak
2013 Mar 21 8:02 AM
hi,
the reason for the dump is because of this statement only..
LOOP at itabINTO wa.
lv_int = strlen( wa ).
lv_int = lv_int - 3.
IF wa+lv_int(3) = 'XYZ'.
DELETE itab FROM wa.
ENDIF.
ENDLOOP.
lv_int = strlen( wa ). lv_int = lv_int - 3. this statement wont work definitely ..
wa must be a character type data object , i mean data type( C, N, D, T or STRING)
otherwise strlen wont work..
thanks,
Mathan R.
2013 Mar 21 8:04 AM
Remove the "from WA". It is interpreted as a FROM idx1 [TO idx2] option and should have raised a CONVT_NO_NUMBER
Regards,
Raymond
2013 Mar 21 8:05 AM
Hi Faizur,
Check this code below.
Put a field flag type char1 in the structure of wa/itab.
Field-Symbol: <lfs_wa> type (structure name).
LOOP at itab assigning <lfs_wa>.
lv_int = strlen( <lfs_wa> ).
lv_int = lv_int - 3.
IF <lfs_wa>+lv_int(3) = 'XYZ'.
<lfs_wa>-flag = 'X'.
ENDIF.
ENDLOOP.
DELETE itab where flag EQ 'X'.
Regards,
Debopriya Ghosh
2013 Mar 21 8:09 AM
Hi Faizur,
You can try like dis.
DELETE table itab FROM wa.
Regards,
Santanu Mohapatra.
2013 Mar 21 8:43 AM
The best is to use index. It is accurate way of deleting the correct line of the itab.
LOOP at itab INTO wa.
lf_index = sy-tabix.
** all your checks.
lv_int = strlen( wa ).
lv_int = lv_int - 3.
IF wa+lv_int(3) = 'XYZ'.
" DELETE itab FROM wa.
delete itab index lf_index.
ENDIF.
clear : lf_index.
ENDLOOP.
2013 Mar 21 9:31 AM
2013 Mar 21 9:32 AM
Hi Faizur,
dont use the delete statement inside the loop.like this scenario use any flag and moidify the itab transporting the flag. after that try to delete where FLAG = 'X'.
Regards,
Gurunath Kumar D
2013 Mar 21 9:58 AM
Dear Faizur,
Its better to use index while deleting.
please check the below code.
data: lv_index type sy-index.
LOOP at itabINTO wa.
lv_index = sy-tabix.
lv_int = strlen( wa ).
lv_int = lv_int - 3.
IF wa+lv_int(3) = 'XYZ'.
DELETE itab index lv_index.
ENDIF.
clear: lv_index.
ENDLOOP.
Hope this helps you.
Kindly let me know your feedback.
Thanks & Regards,
Vignesh Yeram
2013 Mar 21 10:04 AM
Dear Rehman,
I think You are getting Null Value into the work area.
Use Sy-subrc After reading an internal table into Work Area .
And Put Ur Logic in the if Condition.
Read table into wa.
if sy-subrc = 0.
*****************
ur logic
*****************
End if.
This may help u.
Thanks & Regards
Kranthi Kumar Reddy G
Message was edited by: Kranthi Kumar Reddy
2013 Mar 21 11:02 AM
hi,
Declare all fields in wa of type C, N, D or T...
Try this..
LOOP at itab INTO wa.
lv_index = sy-tabix.
lv_int = strlen( wa ).
lv_int = lv_int - 3.
IF wa+lv_int(3) = 'XYZ'.
wa-delete = 'X'.
MODIFY itab from wa index sy-tabix.
endif.
endloop.
DELETE itab where delete = 'X'.
| User | Count |
|---|---|
| 3 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |