CSV to array
发布时间:2021-01-01 02:07:32 所属栏目:MySql教程 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 function csv_to_array (p_csv_line in varchar2,p_separator in varchar2 := g_default_separator) return t_str_arrayas type t_str_array as table
|
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 function csv_to_array (p_csv_line in varchar2,p_separator in varchar2 := g_default_separator) return t_str_array
as
type t_str_array as table of varchar2(4000);
l_returnvalue t_str_array := t_str_array();--返回的字符串数组类型
l_start_separator pls_integer := 0 ;
l_stop_separator pls_integer := 0 ;
l_length pls_integer := 0 ;--长度
l_idx binary_integer := 0 ;
l_quote_enclosed boolean := false ;
l_offset pls_integer := 1 ;
begin
/*
Purpose: convert CSV line to array of values
Remarks: based on code from http://www.experts-exchange.com/Database/Oracle/PL_SQL/Q_23106446.html
Who Date Description
------ ---------- --------------------------------
MBR 31.03.2010 Created
fartpig 07.03.2011 noted
*/
/*
相应的CSV中的注意 就是关于 "" 中包含分隔符,的情况,需要通过标记 是否有双引号的 变量来进行扫描查找
同时保存三个扫描量:扫描开始位置(扫描头),扫描结束位置(扫描尾),扫描偏移量(用来标记扫描的偏移)
*/
--获得长度
l_length := length(p_csv_line) ;
if l_length > 0 then
loop
--递增 标记的数据下标
l_idx := l_idx + 1;
l_quote_enclosed := false;
--判断开始分割的 下一个字符是否是 "
if substr(p_csv_line,l_start_separator + 1,1) = '"' then
--如果是 标记其 有双引号
l_quote_enclosed := true;
--设定 扫描偏移单位为 2
l_offset := 2;
--查找 下一个双引号的位置
l_stop_separator := instr(p_csv_line,'"',l_start_separator + l_offset,1);
else
--如果没有 双引号
--设定 扫描偏移单位为 1
l_offset := 1;
--查找 下一个 分割符 的位置
l_stop_separator := instr(p_csv_line,p_separator,1);
end if;
--如果 没有找到 扫描的下一个 位置
if l_stop_separator = 0 then
--设定 扫描的下一个位置为 总长度+1 从而推出循环
l_stop_separator := l_length + 1;
end if;
--将 扫描得到的 值 保存到数组中
l_returnvalue.extend;
l_returnvalue(l_idx) := substr(p_csv_line,(l_stop_separator - l_start_separator - l_offset));
--如果扫描到头 就推出循环
exit when l_stop_separator >= l_length;
--如果有 双引号
if l_quote_enclosed then
--将扫描位置 +1 从而过滤掉"
l_stop_separator := l_stop_separator + 1;
end if ;
--标记 扫描的开始位置 为 扫描到的位置
l_start_separator := l_stop_separator;
end loop;
end if;
-- 返回结果
return l_returnvalue;
end csv_to_array;
以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |



