-1

このテキスト ファイルを行に分割し、行を分類したいだけです。行が「Qty」で始まる場合、行が「GST」で始まるまで、次の行は注文品目です。

行が「合計金額」で始まる場合、これが合計金額の行です。

ビジネス私。' l
アドレス "rwqagePnnter Pro DemcRafilp
Address "mfgr Eva|uat|on Only
連絡線1
取引番号 10006
発行日 201/02/27
時間 10:36:55
販売員 orsa orsa
数量 説明 ¥単価 合計
1 テスト $120.00 $120.00
消費税 $10.91
合計金額 $120.00
現金 $120.00
詳細については、お問い合わせください。
このレシート。
お買い上げくださってありがとうございます。
d
.
テスト

PegJS http://pegjs.majda.cz/の使い方を教えてください

4

3 に答える 3

6

これは、簡単で汚いサンプルソリューションです

{
  var in_quantity = false // Track whether or not we are in a quantity block
  var quantity    = []
  var gst         = null
  var total       = null
}

start =
  // look for a quantity, then GST, then a total and finally anything else
  (quantity / gst / total / line)+
  {
    return {quantity: quantity, gst: gst, total: total}
  }

chr = [^\n]
eol = "\n"?

quantity   = "Qty" chr+ eol        { in_quantity = true; }
gst        = "GST" g:chr+ eol      { in_quantity = false; gst = g.join('').trim(); }
total      = "Total Amount" t:line { in_quantity = false; total = t.trim(); }

line =
  a:chr+ eol
  {
    if( in_quantity ){
      // break quantities into columns based on tabs
      quantity.push( a.join('').split(/[\t]/) );
    }
    return a.join('');
  }
于 2013-03-01T20:05:53.250 に答える
3

別の解決策として次のコードはどうですか。

{
  var result = [];
}

start
  = (!QTY AnyLine /
      set:(Quantities TotalAmount)
        {result.push({orders:set[0], total:set[1]})}
    )+ (Chr+)?
  {return result;}

QTY = "Qty"
GST = "GST"

Quantities
  = QtyLine order:(OrderLine*) GSTLine {return order;}

QtyLine
  = QTY Chr* _

OrderLine
  = !GST ch:(Chr+) _ {return ch.join('');}

GSTLine
  = GST Chr* _

TotalAmount
  = "Total Amount" total:(Chr*) _ {return total.join('');}

AnyLine
  = ch:(Chr*) _ {return ch.join('');}

Chr
  = [^\n]
_
  = "\n"
于 2013-03-01T21:35:46.473 に答える
0

XML を使用することも、"/" で終わるすべての行を実行し、split 関数を使用してそれらで分割することもできます。

mytext = mytext.split("/");

そして、それで作業します。SQL などを使用しない理由がわかりません。

于 2013-03-01T15:08:40.313 に答える