Skip to content

9.4.3.1 读取分隔数据 ​

GET DATA /TYPE=TXT
        /FILE={’file_name’,file_handle}
        [/ARRANGEMENT={DELIMITED,FIXED}]
        [/FIRSTCASE={first_case}]
        [/IMPORTCASE={ALL,FIRST max_cases,PERCENT percent}]

        /DELIMITERS="delimiters"
        [/QUALIFIER="quotes"
        [/DELCASE={LINE,VARIABLES n_variables}]
        /VARIABLES=del_var1 [del_var2]…
where each del_var takes the form:
        variable format

GET DATA 命令在 TYPE=TXT 且 ARRANGEMENT=DELIMITED 时,以分隔格式从文本文件读取输入数据,其中字段由一组用户指定的分隔符分隔。其功能类似于 DATA LIST FREE(见 DATA LIST FREE),但有一些增强。

必需的 FILE 子命令以及可选的 FIRSTCASE 和 IMPORTCASE 子命令如上所述(见 GET DATA /TYPE=TXT)。

DELIMITERS 是必需的,指定可用于分隔字段的字符集。DELIMITERS 上指定字符串中的每个字符将一个个字段与下一个分隔开。无论 DELIMITERS 如何,行尾也会分隔字段。输入中两个连续的分隔符会产生一个空字段,行尾的分隔符也是如此。作为分隔符的空格字符是一个例外:连续的空格不会产生空字段,行尾任意数量的空格也不会。

要将制表符用作分隔符,请在 DELIMITERS 字符串开头指定 ‘\t’。要将反斜杠用作分隔符,请指定 ‘\\’ 作为第一个分隔符,或者如果制表符也应为分隔符,则紧跟在 ‘\t’ 之后指定。要读取每个字段出现在单独一行的数据文件,请为 DELIMITERS 指定空字符串。

可选的 QUALIFIER 子命令命名一个或多个可用于引用输入中字段内值的字符。以指定引号字符之一开头的字段在下一个匹配引号处结束。其间出现的所有分隔符成为字段的一部分,而不是终止字段。能够指定多个引号字符是 PSPP 的扩展。

QUALIFIER 上指定的字符可以通过将该限定符加倍来嵌入其引用的字段中。例如,如果在 QUALIFIER 上指定了 ‘'’,则 'a''b' 指定包含 ‘a'b’ 的字段。

DELCASE 子命令控制数据在文件中如何跨行断开。使用 LINE(默认设置),每行必须包含恰好一个个案的所有数据。为获得额外灵活性,允许单个个案拆分到多行或多个个案包含在一行中,请指定 VARIABLES n_variables,其中 n_variables 是每个个案的变量数。

VARIABLES 子命令是必需的,且必须是最后一个子命令。按应从输入文件读取的顺序指定每个变量的名称及其输入格式(见 输入与输出格式)。

示例 ​

在类 Unix 系统上,‘/etc/passwd’ 文件的格式类似于:

root:$1$nyeSP5gD$pDq/:0:0:,,,:/root:/bin/bash
blp:$1$BrP/pFg4$g7OG:1000:1000:Ben Pfaff,,,:/home/blp:/bin/bash
john:$1$JBuq/Fioq$g4A:1001:1001:John Darrington,,,:/home/john:/bin/bash
jhs:$1$D3li4hPL$88X1:1002:1002:Jason Stover,,,:/home/jhs:/bin/csh

以下语法读取 ‘/etc/passwd’ 格式的文件:

GET DATA /TYPE=TXT /FILE='/etc/passwd' /DELIMITERS=':'
        /VARIABLES=username A20
                   password A40
                   uid F10
                   gid F10
                   gecos A40
                   home A40
                   shell A40.

考虑以下关于二手车的数据:

model   year    mileage price   type    age
Civic   2002    29883   15900   Si      2
Civic   2003    13415   15900   EX      1
Civic   1992    107000  3800    n/a     12
Accord  2002    26613   17900   EX      1

以下语法可用于读取二手车数据:

GET DATA /TYPE=TXT /FILE='cars.data' /DELIMITERS=' ' /FIRSTCASE=2
        /VARIABLES=model A8
                   year F4
                   mileage F6
                   price F5
                   type A4
                   age F2.

考虑以下关于宠物店动物的信息:

'Pet''s Name', "Age", "Color", "Date Received", "Price", "Height", "Type"
, (Years), , , (Dollars), ,
"Rover", 4.5, Brown, "12 Feb 2004", 80, '1''4"', "Dog"
"Charlie", , Gold, "5 Apr 2007", 12.3, "3""", "Fish"
"Molly", 2, Black, "12 Dec 2006", 25, '5"', "Cat"
"Gilly", , White, "10 Apr 2007", 10, "3""", "Guinea Pig"

以下语法可用于读取宠物店数据:

GET DATA /TYPE=TXT /FILE='pets.data' /DELIMITERS=', ' /QUALIFIER='''"' /ESCAPE
        /FIRSTCASE=3
        /VARIABLES=name A10
                   age F3.1
                   color A5
                   received EDATE10
                   price F5.2
                   height a5
                   type a10.

基于 GNU PSPP 2.0.1 手册与入门教程整理