3
Scalaでは、(長さ= 20の)各メッセージを個々の単位に解析したいと思います。メッセージは改行文字なしで前のメッセージの末尾に追加されます。私は以下しようとしたが、いずれかの最適化とパフォーマンスの向上はあなたが正規表現で非常にうまくこれを行うことができますscala ..さまざまなフィールドにメッセージを解析する
/* Length.. id=3,name=5,city=8,port=3,indicator=1 */
def layout(rec:String) = {
val id=rec.take(3)
val name=rec.drop(3).take(5)
val city=rec.drop(3+5).take(8)
val port=rec.drop(3+5+8).take(3)
val ind=rec.drop(3+5+8+3).take(1)
println(id,name,city,port,ind)
}
val messages="101Jim Portland990Y102JamesHouston 990X103John Boston 880Y"
messages grouped(20) foreach { x => layout(x) }
In REPL,
scala> :load work.scala
Loading work.scala...
layout: (rec: String)Unit
messages: String = 101Jim Portland990Y102JamesHouston 990X103John Boston 880Y
(101,Jim ,Portland,990,Y)
(102,James,Houston ,990,X)
(103,John ,Boston ,880,Y)
scala>
.. @ Travis ..解決に感謝します。メッセージがebcdic形式、すなわちMainframeシステムから来ていると仮定します。どのように私はebcdicでそれを読んで、asciiに変換するのですか? – stack0114106
@ stack0114106それは本当に別の質問であるべきです。 :) –