Hi you can use the StringTokenizer to separate your string in a single-Column Array
and read this array in your array.
Maybe there is a easier way, but it works:
define g_temp string
define g_arr dynamic array of record
r_code char(3),
r_desc char(100),
r_date date
end record
define g_tmparray dynamic array of record
tmpfield string
end record,
g_tmpfield string
define g_token base.StringTokenizer,
g_z1 smallint,
g_z2 smallint,
g_z3 smallint
main
let g_temp = "<<<<1<<ABC<<<<2<<TESTING<<<<3<<10/MAY/2016<<<<1<<ZXY<<<<2<<LOOK AT THIS<<<<3<<31/AUG/2016<<<<1<<REG<<<<2<<NICE ONE<<<<3<<04/NOV/2016"
call g_arr.clear()
call g_tmparray.clear()
let g_z1 = 0
let g_z3 = 0
let g_token = base.StringTokenizer.create(g_temp, "<<<<")
while g_token.hasMoreTokens()
let g_tmpfield = g_token.nextToken()
case g_tmpfield --remove your "string counter" before inserted in the tmparray
when 1
continue while
when 2
continue while
when 3
continue while
end case
let g_z1 = g_z1 + 1
let g_tmparray[g_z1].tmpfield = g_tmpfield
end while
--show the tmparray
for g_z1 = 1 to g_tmparray.getLength()
display g_tmparray[g_z1].*
end for
--now build your g_arr from the tmparray
let g_z2 = 1
for g_z1 = 1 to g_tmparray.getLength()
if g_z2 = 1 then
let g_z2 = g_z2 + 1
let g_z3 = g_z3 + 1
let g_arr[g_z3].r_code = g_tmparray[g_z1].tmpfield
continue for
end if
if g_z2 = 2 then
let g_z2 = g_z2 + 1
let g_arr[g_z3].r_desc = g_tmparray[g_z1].tmpfield
continue for
end if
if g_z2 = 3 then
let g_z2 = 1 --imporant
let g_arr[g_z3].r_date = g_tmparray[g_z1].tmpfield
continue for
end if
end for
--result
for g_z1 = 1 to g_arr.getLength()
display g_arr[g_z1].r_code, " ", g_arr[g_z1].r_desc, " ", g_arr[g_z1].r_date
end for
end main
HTH Stefan