+ procedure matrix_append_csv string row \r
+ local integer l_iMax l_iValues l_i\r
+ local string l_sBuf\r
+ \r
+ forward get item_count to l_iMax\r
+ \r
+ send delete_data to (mTokens2(current_object))\r
+ send set_string_csv to (mTokens2(current_object)) row\r
+ get token_count of (mTokens2(current_object)) to l_iValues\r
+ \r
+ for l_i from 0 to l_iValues \r
+ get token_value of (mTokens2(current_object)) item l_i to l_sBuf\r
+ indicate err false\r
+ set matrix_value item l_iMax item l_i to l_sBuf \r
+ if (err) forward send delete_item l_iMax\r
+ if (err) break\r
+ loop\r
+\r
+ end_procedure\r
+ \r
+ procedure matrix_copy_csv string fname\r
+ local string l_sBuf\r
+ \r
+ if (does_exist(fname)) begin\r
+ direct_input channel DEFAULT_FILE_CHANNEL fname\r
+ while not (seqeof)\r
+ readln channel DEFAULT_FILE_CHANNEL l_sBuf\r
+ if (seqeof) break\r
+ if (trim(l_sBuf) <> "") begin\r
+ send matrix_append_csv l_sBuf\r
+ end\r
+ loop\r
+ close_input channel DEFAULT_FILE_CHANNEL\r
+ end\r
+ else;\r
+ custom_error ERROR_CODE_FILE_NOT_FOUND$ ERROR_MSG_FILE_NOT_FOUND ERROR_DETAIL_FILE_NOT_FOUND fname \r
+ end_procedure \r
+ \r