Application Development and Automation 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: 
Read only

internal table concatenation

Former Member
0 Likes
1,146

How can I concatenate the data where CUDC = 1. Sample data:

CUDC RECORD DATA

1 1 002232:2:1-002223:2:3-002346:2:2-002306:2:3-002314:6:8-002321:6:8-002346:6:6-002333:7:3-002433:8:3-

002433:9:3-002413:10:10-002435:10

1 2 :3-002431:19:3-002430:20:3-002431:21:3-002431:22:3

expected result

1 1 [0022]32:2:1-23:2:3-46:2:2-[0023]06:2:3-14:6:8-21:6:8-46:6:6-[0024]33:7:3-33:8:3-33:9:3-13:10:10-35:10:3-

31:19:3-30:20:3-31:21:3-31:22:3

thanks in advance.

Edited by: kapishr on Jan 26, 2012 3:22 PM

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
1,111

let itab1 and itab2 both be copies of same data.

sort itab1 by cudc and delete adjacent duplicates comparing cudc.

loop at itab1.

loop at itab2 where cudc = itab1-cudc.
   concatenate itab1-record itab2-record to itab1-record.
endloop.

modify itab1. or use field symbols.
endloop.

above code is psuedocode, check respective syntaxes while implementing.

8 REPLIES 8
Read only

Former Member
0 Likes
1,112

let itab1 and itab2 both be copies of same data.

sort itab1 by cudc and delete adjacent duplicates comparing cudc.

loop at itab1.

loop at itab2 where cudc = itab1-cudc.
   concatenate itab1-record itab2-record to itab1-record.
endloop.

modify itab1. or use field symbols.
endloop.

above code is psuedocode, check respective syntaxes while implementing.

Read only

Former Member
0 Likes
1,111

hi kapishr,

can you make your tables more readable?

Read only

0 Likes
1,111

The three column of internal table are CUDC RECORD and DATA

CUDC

1

1

2

2

3

RECORD

1

2

1

2

1

Data

002232:2:1-002223:2:3-002346:2:2-002306:2:3-002314:6:8-002321:6:8-002346:6:6-002333:7:3-002433:8:3-002433:9:3-002413:10:10-002435:10

:3-002431:19:3-002430:20:3-002431:21:3-002431:22:3

002232:2:1-002223:2:3-002346:2:2-002306:2:3-002314:6:8-002321:6:8-002346:6:6-002333:7:3-002433:8:3-002433:9:3-002413:10:10-002435:10

:3-002431:19:3-002430:20:3-002431:21:3-002431:22:3:002431:19:3-000030:20:3-0000031:21:3-000031:22:3:000031:19:3-000030:20:3-000031:21:3

002431:19:3-002430:20:3-002431:21:3-002431:22:3

I have to concatenate the data based on CUDC and sort the record column accordingly

Thanks and regards

Edited by: kapishr on Jan 26, 2012 4:43 PM

Edited by: Rob Burbank on Jan 26, 2012 11:47 AM

Read only

0 Likes
1,111

Assuming the DATA has a field length of 20, and for each CUDC. its corresponding DATA has values of maximum 20... Therefore, may I ask how should your concatenated result be like?

I simplify your internal table as such(using ~ as delimiter), correct me if I'm wrong

CUDC(x1)RECORD(x1)DATA(x6)

11AAAAA

12BBBBBB

21CCCCCC

22DDDDDD

31EEEEEE

Using the above example, please explain how should the result be?

Edited by: bloodcool on Jan 27, 2012 11:44 AM

Read only

0 Likes
1,111

Hello Kapishr,

Here is a code you can use :

data : wa_tab like line of itab, "work area of your itab.
          temp1(50) type c, "itab - your internal table that is containing above fields.
          temp2(50) type c,  "assuming data length can not be more than 50 chars.
           " 
           "
         tempn(50) type c.


Loop at itab into wa_tab.
     Case wa_tab-CUDC.
            When '1'
                      Concatenate temp1 wa_tab-DATA into temp1.
            When '2'
                       Concatenate temp2 wa_tab-DATA into temp2.
             "
             "
             "
            When 'n'
                        Concatenate tempn wa_tab-DATA into tempn.
     Endcase.
Endloop.

After using above code you can use temp1-temp2-......tempn data wherever you want.

Kind Regards,

Kerim.

Edited by: Kerim Merih Kılıç on Jan 27, 2012 7:23 AM

Read only

0 Likes
1,111

Thanks for helping me, I am new to programming and so I m having trouble explaining..

This is the data that I have

CUDCRECORDDATA~LENGTH

11002232:2:1-002223:2:3-002246:2:2-002306:2:3-002314:6:8-002321:6:8-002346:6:6-002433:7:3-002433:8:3-002433:9:3-002413:10:10-002435:10~132

12:3-002431:19:3-002430:20:3-002431:21:3-002431:22:3~50

21002232:2:1-002223:2:3-002246:2:2-002306:2:3-002314:6:8-002321:6:8-002346:6:6-002433:7:3-002433:8:3-002433:9:3-002413:10:10-002435:10~length

22:3-002431:19:3-002430:20:3-002431:21:3-002431:22:3-002431:19:3-000030:20:3-0000031:21:3-000031:22:3:000031:19:3-000030:20:3-000031:21:3~length

31002431:19:3-002430:20:3-002431:21:3-002431:22:3~length

Required output

CUDCRECORDDATA~LENGTH

11(0022)32:2:1-23:2:3-46:2:2-(0023)06:2:3-14:6:8-21:6:8-46:6:6-(0024)33:7:3-33:8:3-33:9:3-13:10:10-35:10:3-31:19:3-30:20:3-31:21:3-31:22:3~102

21(0022)32:2:1-23:2:3-46:2:2-(0023)06:2:3-14:6:8-21:6:8-46:6:6-(0024)33:7:3-33:8:3-33:9:3-13:10:10-35:10:3-31:19:3-30:20:3-31:21:3-31:22:3-31:19:3-(0000)30:20:3-31:21:3-31:22:3-31:19:3-30:20:3-31:21:3~length

31(0024)31:19:3-30:20:3-31:21:3-21:22:3~length

the length at end of each row is for calculating the length of the data

The first six digits is for time hhmmss,

I need to club (hhmm)ss-ss... and so on and club the records based on CUDC as well.

the digits after colon( is not to be analysed.

thanks and regards.

Read only

0 Likes
1,111

You can use the code I wrote above.

temp1-temp2-temp3 contains data that you want. If you don't want to concatenate data after ':' then you can take the part before it:.(ie concatenate tempx itab-DATA+6 into tempx)

Kind Regards,

Kerim.

Read only

0 Likes
1,111

you need to first breakdown data table into another internal table, before merging them back.

for identification sake, i named the table as below:

- CUDC_DATA, your original table

- CUDC_BREAKDOWN, the breakdown data table

- CUDC_RESULT, result table

1) Concatenate the DATA for each set of CUDC from CUDC_DATA table into a string variable (e.g. tmpstring)

2) Process each CUDC's tmpstring into CUDC_BREAKDOWN where you should

- get every single group of hhmmss:xx:xx, the delimiter should be '-'. Use SPLIT function

- break the group to 2 different fields, where the 1st 4 char(HHMM) is field #1, and the remaining field #2

- append the current CUDC value, field #1 and field #2 into CUDC_BREAKDOWN

3) Repeat the process until all CUDC's DATA has been breakdown into CUDC

Now, you should merge back the data back to CUDC_RESULT, from CUDC_BREAKDOWN table

4) For every CUDC, it would indicate a start of a new record

5) For each new set of field #1 encountered, concatenate the HHMM value to the data field in CUDC_RESULT

6) Then concatenate every field #2 to the data field in CUDC_RESULT

7) Do until all CUDC are completed.