如何从CSV数据集中的最后一个字段中真正删除CRLF(#)?

2020-09-07 16:24发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好!

请注意:我昨天大部分时间都在搜索SDN并阅读有关此主题的各种线程。 是的,我知道,关于该主题还有其他话题,但是昨天下午我花了整个时间尝试发布的每个解决方案,但没有任何效果。 因此,据我所知,尚无人针对此问题发布明确的解决方案。

我正在从我们的应用程序服务器中读取逗号分隔的CSV文件。 它最初是在Microsoft Excel中,但另存为CSV文件。 我按如下所示打开文件:

OPEN DATASET p_fname,用于在默认情况下以文本模式输入。

这是我的循环,可将整个文件读取到一个内部表中,并将其拆分为各个字段:

读取数据集p_fname INTO wa_unsplit。

sy-subrc EQ 0。

向w_unsplit_tot加1。

在w_comma INTO中拆分wa_unsplit:

wa_split-massn

wa_split-massg

wa_split-curr

wa_split-persg

wa_split-pernr

wa_split-persid

wa_split-persk

wa_split-stat2

wa_split-fisc_year

wa_split-funds_center

wa_split-plans

wa_split-orgeh

wa_split-abkrs

wa_split-werks

wa_split-sem_posit

wa_split-ansal

wa_split-bsgrd

wa_split-adm_adj_amt

wa_split-hourly_rate。

附加wa_split到它_split。

清除:wa_unsplit,

wa_split。

读取数据集p_fname INTO wa_unsplit。

结束。

问题是最后一个字段wa_split-hourly_rate(定义为字符长度17)在其末尾附加了一个"#"。 每条记录都会发生这种情况,它似乎是CR/LF字符(十六进制的值与cl_abap_char_utilities => cr_lf相同)。

我已经尝试了所有以前建议的从我的hourly_rate字段中删除该字符的方法。 我尝试了另一个STRIP命令。 我已经尝试过REPLACE和TRANSLATE以及很多其他功能。 尽管SDN上存在所有与此相关的线程,但我还没有找到真正可行的方法。

当然,我不能成为第一位从Application Server读取文件并遇到此问题的人。

请不要发布指向无效的解决方案的链接! 凡能解决挑战的人将获得满分。

谢谢大家! ????

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好!

请注意:我昨天大部分时间都在搜索SDN并阅读有关此主题的各种线程。 是的,我知道,关于该主题还有其他话题,但是昨天下午我花了整个时间尝试发布的每个解决方案,但没有任何效果。 因此,据我所知,尚无人针对此问题发布明确的解决方案。

我正在从我们的应用程序服务器中读取逗号分隔的CSV文件。 它最初是在Microsoft Excel中,但另存为CSV文件。 我按如下所示打开文件:

OPEN DATASET p_fname,用于在默认情况下以文本模式输入。

这是我的循环,可将整个文件读取到一个内部表中,并将其拆分为各个字段:

读取数据集p_fname INTO wa_unsplit。

sy-subrc EQ 0。

向w_unsplit_tot加1。

在w_comma INTO中拆分wa_unsplit:

wa_split-massn

wa_split-massg

wa_split-curr

wa_split-persg

wa_split-pernr

wa_split-persid

wa_split-persk

wa_split-stat2

wa_split-fisc_year

wa_split-funds_center

wa_split-plans

wa_split-orgeh

wa_split-abkrs

wa_split-werks

wa_split-sem_posit

wa_split-ansal

wa_split-bsgrd

wa_split-adm_adj_amt

wa_split-hourly_rate。

附加wa_split到它_split。

清除:wa_unsplit,

wa_split。

读取数据集p_fname INTO wa_unsplit。

结束。

问题是最后一个字段wa_split-hourly_rate(定义为字符长度17)在其末尾附加了一个"#"。 每条记录都会发生这种情况,它似乎是CR/LF字符(十六进制的值与cl_abap_char_utilities => cr_lf相同)。

我已经尝试了所有以前建议的从我的hourly_rate字段中删除该字符的方法。 我尝试了另一个STRIP命令。 我已经尝试过REPLACE和TRANSLATE以及很多其他功能。 尽管SDN上存在所有与此相关的线程,但我还没有找到真正可行的方法。

当然,我不能成为第一位从Application Server读取文件并遇到此问题的人。

请不要发布指向无效的解决方案的链接! 凡能解决挑战的人将获得满分。

谢谢大家! ????

付费偷看设置
发送
11条回答
Bunny_CDM
1楼 · 2020-09-07 16:39.采纳回答

您可以使用cl_abap_char_utilities => cr_lf来拆分wa_split-hourly_rate:

 拆分wa_split-hourly_rate AT cl_abap_char_utilities => cr_lf INTO:wa_split-hourly_rate aux。
 

致谢

三十六小时_GS
2楼-- · 2020-09-07 16:44

您只是想删除每个记录末尾出现的#(CRLF)吗?

为什么不立即在xxx处拆分为fileds操作之前执行以下操作。

用``代替wa_unsplit中所有出现的cl_abap_char_utilities => cr_lf。

致谢

Raja

nice_wp
3楼-- · 2020-09-07 16:45

成功! Peluka和Naimesh,我不得不结合您的两个建议,终于使它起作用了!

感谢您的澄清,Rich。 由于缺少更好的词,我最终将我的" aux"字段称为"垃圾",但最后您确认了我的想法。

对于在此问题上难以找到成功答案的其他人,这对我有用:

常量:c_comma(1)TYPE c VALUE',',

c_crlf(1)类型c值cl_abap_char_utilities => cr_lf。

数据:w_junk TYPE字符串。

读取数据集p_fname INTO wa_unsplit。

sy-subrc EQ 0。

向w_unsplit_tot加1。

拆分wa_unsplit AT c_comma INTO:

wa_split-massn

wa_split-massg

wa_split-curr

wa_split-persg

wa_split-pernr

wa_split-persid

wa_split-persk

wa_split-stat2

wa_split-fisc_year

wa_split-funds_center

wa_split-plans

wa_split-orgeh

wa_split-abkrs

wa_split-werks

wa_split-sem_posit

wa_split-ansal

wa_split-bsgrd

wa_split-adm_adj_amt

wa_split-hourly_rate。

  • 这是从"每小时费率"字段的末尾删除CR/LF字符的行!

拆分wa_split-hourly_rate AT c_crlf INTO:

wa_split-hourly_rate w_junk。

附加wa_split到它_split。

清除:wa_unsplit,

wa_split。

读取数据集p_fname INTO wa_unsplit。

结束。

非常感谢大家! SDN员工再次度过了难关。 奖励积分!

callcenter油条
4楼-- · 2020-09-07 16:28

打开数据集p_fname使用智能换行输入默认输入的文本模式。

根据您的abap版本/发行版,以这种方式打开数据集应解决此问题。

这应该识别换行符CR和CRLF的两种类型

派大星 ヾ
5楼-- · 2020-09-07 16:52

我仅使用智能换行选项解决了相同的问题。

一周热门 更多>