1

ブローカーの 1 人から、以下のテキスト ファイルの取引レポートを受け取りました。いくつかの分析を行うためにそれを解析しようとしています。問題は、各レコードに 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

agstudyの答えはとても役に立ちそうです。別のアプローチを提案します。最初にブリーピング入力ファイルを修正します。ソースプログラムにアクセスして出力形式を変更できない場合は、少なくとも、任意のテキストエディタで次のことを実行できます(あえて言うと、MicrosoftWord :-))。

編集:以下の提案は逆です。つまり、日付文字列が後に続く行末のみを保持したい場合があります。概念は同じですが、検索語を変更して「...以外のもの」を検索します。方向を間違えてすみません。

グローバル検索を実行し、段落マーク(行末)の後に2桁の「/」を付けて置き換え、タブと同じ2桁の「/」に置き換えます

Wordでは、これは次のようになりFIND what ^13([0-9]{2,2}/) REPLACE with ^t\1 ます。正規表現をサポートする編集者は、少し異なる方法でそれを行います。これで、ソースファイルには日付エントリごとに1つの(長い)行があり、目的の列を簡単に抽出できます。

于 2013-02-27T12:29:02.020 に答える
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 に答える