0

Scala で実行しているプログラムのために小さなフラット テキスト (txt) ファイルを XML に変換することになっていますが、どこから始めればよいかわかりません。いろいろな方法を試しましたが、今のところ問題があります。私のファイルは、いくつかの文字列といくつかの整数で構成されています。

私はまだ非常に基本的な Scala を使用しているので、単純であればあるほど良いのです!

助けてくれた人に前もって感謝します。

4

2 に答える 2

4

これにはいくつかのステップがあります。

まず、データの形式に依存しない構造を決定し、このデータを保持する Scala クラスを作成します。次に、このデータがテキスト ファイルでどのようにフォーマットされているかを把握し、テキスト ファイルを解析してクラス (またはそのクラスのリスト) にデータを設定するルーチンを記述します。最後に、XML ファイルのスキーマを把握し、Scala の XML リテラルを使用してデータを書き込みます。

データが人の名前、年齢、身長、体重で構成されているとします。そのデータを保持する Scala クラスは次のようになります。

case class Person(name: String, age: Int, height: Double, weight: Double)

テキスト ファイルでは、これは最も単純なものからいくつかの方法で表すことができます。

Peter
34
178.2
83.2

または「プロパティ」スタイル形式:

name = Peter
age = 34
weight = 178.2
height = 83.2

または、1 つのファイルに複数の人がいる場合は、最も可能性の高い CSV 形式:

Peter,34,178.2,83.2
Tom,53,182.3,95.3
John,27,175.1,74.5

最後の形式を例に取りましょう。ファイルを読み取る最も簡単な方法は次のとおりです。

val lines = io.Source.fromFile(new java.io.File("test.txt")).getLines.toList

次に、各行を Person に解析します。

val persons = lines map { line =>   
    val elements = line split ","
    Person(elements(0), elements(1).toInt, elements(2).toDouble, elements(3).toDouble)
}

Person クラスに適切なメソッドを追加して、適切な XML に変換します。

    def toXml = 
        <person>
            <name>{ name }</name>
            <age>{ age }</age>
            <height>{ height }</height>
            <weight>{ weight }</weight>
        </person>   

最後に、人物のリストを XML にマップします。

val personsXml = <persons>{ persons map(_.toXml) }</persons>

そしてそれをファイルに書き込みます:

new java.io.FileOutputStream(new java.io.File("test.xml")).write(personsXml.toString.getBytes)

エラー処理とファイルの適切なクローズは、読者の演習として残されていることに注意してください。:)

于 2012-05-07T09:51:16.237 に答える
-3

あなたが何をしようとしているのか正確にはわかりません。値をラップしたいだけの場合は、次のようにします。

def string2xml[A](a: A): String = a match {
  case s: String => "<String>" + s + "</String>"
  case i: Int => "<Int>" + i + "</Int>"
  case any => "<Any>" + any + "</Any>"
}
于 2012-05-07T06:44:11.473 に答える