在很多ABAP开发中,我们使用CSV文件,有时候,关于CSV文件本身的一些问题使人迷惑。它仅仅是一种被逗号分割的文本文档吗?

  让我们先来看看接下来可能要处理的几个相关组件的词汇的语义。

  Separator:两个字段之间的界线,在CSV文件中即是“,”。

  Delimiter:这种符号的开端和结束,代表了某种东西的界限。举个例子“测试字符串”有两个delimiters,即两个双引号。在文本中包含很多逗号的情形下,CSV文件会使用双引号作为Delimiter.

  Terminator : 代表片段的结束。在CSV文件中,我们可以把换行看成terminator.

  如果我们不确定逗号或者双引号是否被允许在数据内出现,请看CSV的说明书:

  假如你想看CSV的全部标准的话,这里是CSV的实际标准

      http://tools.ietf.org/html/rfc4180

CSV格式的定义

  1,  每条记录位于单独的行上,由换行符分隔。

  2,  最后一条记录的换行符可有可无。

  3,  文件的第一行可以有一个可选的头部,其格式与普通行相同。

  4,  在头部和每条记录中,可以存在一个或多个字段,由逗号分割。整个文件中的每行应当包含同样数量的字段。空格被视为字段的一部分,不会被忽略。记录的最后一个字段的后面不可以存在逗号。

  5,  每个字段可以被双引号包围,也可以不这样做。(然而在某些程序中,比如Microsoft Excel, 完全不使用双引号)。如果字段没有被双引号包围,那么双引号不会在字段内部出现。

  6,  字段在包含换行符、双引号和逗号的情况下应当被双引号包围。

  7,  如果双引号被用作包围字段,而字段内部出现的双引号需要通过使用另一对双引号将其包围的方式转义处理。

在我的经验中,第七点是最容易被坑的地方。CSV作为由逗号分隔的值,给人带来了一种印象即逗号是separator并且给出的excel中不含逗号,这样容易造成混淆。

  那么看几个例子:

  基本例子:

  10, Vikas , Sydney

      数据内部有separator / delimiter的:

     "11", "Vikas", "Sydney, AU"      <-- 数据中包含逗号

     "12", "Vikas", "Sydney, "NSW" AU"   <-- 数据包含逗号和双引号

ABAP中的相关操作

  假设我们读取一个文件,这个文件可以从用户的桌面上传或者从服务器端读取。

1)   写下你的代码

  这个在一开始很简单,但随着时间的进行,它可能变得复杂。

  以字符串格式获取数据,使用逗号分割他们:

split lv_data at ',' into lw_struct-test1 lw_struct-test2 lw_struct-test3.

标签: none

添加新评论