1
*&---------------------------------------------------------------------*
2
*& Include ZDB_UPLOAD_CONVERT_DATA *
3
*& *
4
5
6
*& This file is part of ZDB. *
7
8
*& ZDB_DOWNLOAD is free software: you can redistribute it and/or *
9
*& modify it under the terms of the GNU General Public License as *
10
*& published by the Free Software Foundation, either version 3 of the *
11
*& License, or any later version. *
12
13
*& ZDB_DOWNLOAD is distributed in the hope that it will be useful, *
14
*& but WITHOUT ANY WARRANTY; without even the implied warranty of *
15
*& MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
16
*& GNU General Public License for more details. *
17
18
*& You should have received a copy of the GNU General Public License *
19
*& along with ZDOWNLOAD. If not, see <http://www.gnu.org/licenses/>. *
20
21
22
23
*& Author: Ruediger von Creytz ruediger.creytz@globalbit.net *
24
*& Copyright: globalBIT, LLC http://www.globalbit.net *
25
26
27
28
29
*-----------------------------------------------------------------------
30
* form: csv2data
31
32
FORM csv2data USING
33
value(i_tabname) TYPE tabname
34
it_csv TYPE it_string.
35
DATA:
36
lt_dd03l TYPE STANDARD TABLE OF dd03l,
37
ls_dd02l TYPE dd02l,
38
l_fieldname TYPE fieldname,
39
l_position TYPE tabfdpos,
40
lt_value TYPE it_string,
41
l_value TYPE string,
42
l_csv TYPE string,
43
l_len TYPE i,
44
l_cnt TYPE i,
45
l_length TYPE string,
46
l_quot TYPE flag,
47
ls_fs TYPE REF TO data.
48
49
FIELD-SYMBOLS:
50
<ls_csv> TYPE string,
51
<ls_dd03l> TYPE dd03l,
52
<ls_fs> TYPE ANY,
53
<l_fs> TYPE ANY,
54
<l_value> TYPE ANY.
55
56
SELECT * FROM dd03l INTO TABLE lt_dd03l
57
WHERE tabname = i_tabname
58
AND as4local = 'A'
59
ORDER BY position.
60
61
SELECT SINGLE * FROM dd02l INTO ls_dd02l
62
63
AND as4local = 'A'.
64
65
*content
66
CREATE DATA ls_fs TYPE (i_tabname).
67
ASSIGN ls_fs->* TO <ls_fs>.
68
69
LOOP AT it_csv ASSIGNING <ls_csv>.
70
IF sy-tabix = 1.
71
CONTINUE.
72
ENDIF.
73
74
CLEAR l_cnt.
75
76
SPLIT <ls_csv> AT ';' INTO TABLE lt_value.
77
LOOP AT lt_value ASSIGNING <l_value>.
78
IF l_quot = abap_true.
79
CONCATENATE l_value ';' <l_value> INTO l_value.
80
ELSE.
81
l_value = <l_value>.
82
IF l_value <> space AND l_value+0(1) = '"'.
83
l_quot = abap_true.
84
l_value = l_value+1.
85
86
87
88
89
l_len = strlen( l_value ).
90
IF l_len > 0.
91
SUBTRACT 1 FROM l_len.
92
IF l_value+l_len(1) = '"'.
93
l_value = l_value+0(l_len).
94
l_quot = abap_false.
95
96
97
98
99
IF l_quot = abap_false.
100
ADD 1 TO l_cnt.
101
READ TABLE lt_dd03l ASSIGNING <ls_dd03l> INDEX l_cnt.
102
IF sy-subrc <> 0.
103
* message 'Cannot import data'.
104
EXIT.
105
106
107
IF <ls_dd03l>-fieldname <> 'MANDT'.
108
ASSIGN COMPONENT <ls_dd03l>-fieldname OF STRUCTURE <ls_fs>
109
TO <l_fs>.
110
<l_fs> = l_value.
111
112
113
ENDLOOP.
114
115
MODIFY (i_tabname) FROM <ls_fs>.
116
CLEAR <ls_fs>.
117
118
119
120
ENDFORM. "select_csv2data