1

我从我的一位经纪人那里获得了如下文本文件中的交易报告。我正在尝试解析它以进行一些分析。问题是每条记录都有多行,包括一个聚合行(标有 * 表示 BUY 或 SELL 及下方)。

  TRADE   SETTL  AT      BUY            SELL      CONTRACT DESCRIPTION           EX TRADE PRICE CC   DEBIT(DR)/CREDIT
 ------- ------- -- -------------- -------------- ------------------------------ -- ----------- -- --------------------
 11/26/2         F1                            1  JAN 13 SOYBEAN MEAL            01   424.70    US
                                                  ELECTRONIC TRADE
                 F1                            1*                                    COMMISSION US               1.20DR
                 F1                                                     EXCHANGE & CLEARING FEE US                .81DR
                 F1                                                                     NFA FEE US                .02DR
                 F1                                                     TOTAL COMMISSION & FEES US               2.03DR
 11/28/2         F1             1                 DEC 12 SWISS FRANC             16  107.490    US
                                                  ELECTRONIC TRADE
                 F1             1*                                                   COMMISSION US               1.20DR
                 F1                                                     EXCHANGE & CLEARING FEE US                .54DR
                 F1                                                                     NFA FEE US                .02DR
                 F1                                                     TOTAL COMMISSION & FEES US               1.76DR
 11/29/2         F1             2                 MAR 13 NEW COCOA               06    24.61    US
                                                  ELECTRONIC TRADE
                 F1             2*                                                   COMMISSION US               2.40DR
                 F1                                                     EXCHANGE & CLEARING FEE US               4.00DR
                 F1                                                                     NFA FEE US                .04DR
                 F1                                                     TOTAL COMMISSION & FEES US               6.44DR
 12/03/2         F1             1                 DEC 12 IMM EURO FX             16     1.30000 US
                                                  ELECTRONIC TRADE
                 F1             1*                                                   COMMISSION US               1.20DR
                 F1                                                     EXCHANGE & CLEARING FEE US                .54DR
                 F1                                                                     NFA FEE US                .02DR
                 F1                                                     TOTAL COMMISSION & FEES US               1.76DR
 12/07/2         F1                            3  DEC 12 US $ INDEX              13    80.245   US
                                                  ELECTRONIC TRADE
 12/07/2         F1             3                 DEC 12 US $ INDEX              13    80.250   US
                                                  ELECTRONIC TRADE
                 F1             3*             3*                                    COMMISSION US               7.20DR
                 F1                                                     EXCHANGE & CLEARING FEE US               8.10DR
                 F1                                                                     NFA FEE US                .12DR
                 F1                                                     TOTAL COMMISSION & FEES US              15.42DR

目前,我只对聚合信息感兴趣,即其中带有 * 的数量以及下面的字段,即,CONTRACT DESCRIPTION以及BUY最后一列中指定的值?SELLCOMMISSIONEXCHANGE AND CLEARING FEESNFA FEETOTAL COMMISSION AND FEESDEBIT(DR)/CREDIT

任何指示我该怎么做?

我尝试使用read.fwf,但它对我不起作用,因为每条记录的多行格式不同。

最终,如果没有任何效果,我将不得不逐行编写解析器,我目前正试图避免这样做,看看是否可以以更优雅的方式完成。

4

2 回答 2

1

由于您的数据按日期分组,因此我对其进行扫描并使用lapply.

dat <- scan('yourfile_name',what='character')
ids <- c(grep('[0-9]+/[0-9]+/[0-9]',dat),length(dat))
lapply(head(seq_along(ids),-1),function(x)
{
  y <- dat[ids[x]:(ids[x+1]-1)]
  list( desc = paste(y[4:8] ,collapse=' '),
        dd = y[1],
       debit_credit = y[grep('.*DR',y)],
       trde_price = as.numeric(y[grep('[0-9]+[.][0-9]+$',y)])
       )
})
[[1]]
[[1]]$desc
[1] "JAN 13 SOYBEAN MEAL 01"
[[1]]$dd
[1] "11/26/2"
[[1]]$debit_credit
[1] "1.20DR" ".81DR"  ".02DR"  "2.03DR"
[[1]]$trde_price
[1] 424.7

[[2]]
[[2]]$desc
[1] "DEC 12 SWISS FRANC 16"

.....

PS:我丢失了B/S的信息。希望这可以帮助。

于 2013-02-27T08:42:51.913 回答
1

agstudy 的回答看起来很有帮助。我将建议一种替代方法:首先修复 bleeping 输入文件。如果您无法访问源程序并更改输出格式,至少您可以在任何文本编辑器中执行以下操作(甚至,我敢说,MicrosoftWord :-))。

编辑:下面的建议是倒退的,即您可能只想保留后跟日期字符串的行尾概念是相同的,但修改搜索词以查找 "anything but..." 。对不起,误导。

对段落标记(行尾)进行全局搜索和替换,后跟两位数字和“/”,并用制表符和相同的 2 位数字和“/”替换

在 Word 中,这将是FIND what ^13([0-9]{2,2}/) REPLACE with ^t\1 ; 支持正则表达式的编辑器会有所不同。现在,您的源文件中的每个日期条目都有一个(较长的)行,您可以轻松提取感兴趣的列。

于 2013-02-27T12:29:02.020 回答