Scala+DBMS+Web スカラ座の夜

2013年1月3日

タグ置換 その3 繰り返して置換する

Filed under: Scala — admin @ 12:53 AM

前回、seedorep属性について説明しました。

次に、繰り返しによる置換の機能をお見せします。
この機能は、2つの属性をseedorep属性があるタグの内側に記述します。
seedorecord属性 と seedofield属性 です。

住所録や商品一覧は、レコードによって住所や商品を格納し、複数のレコードで一覧を構成します。
これをtableタグで一覧にするとき、テーブルのTDタグによって囲まれた値を置換する手順を提供します。

tableタグのseedorep属性によって、seedorecordTest関数を定義します。
1件すなわち1レコードの単位をtrタグにseedorecord属性を定義します。
以下の例では、HD、a、b、cの4つのレコードが定義されます。


tdタグには、レコードの項目を定義するために、seedofield属性を入れます。
seedorecord属性のbとcには、a1,a2,a3,a4 を定義します。
HDのようにseedofield属性を定義しなくてもいいです。


A1 A2 A3 A4
A1 A2 A3 A4
B1 B2 B3 B4
C1 C2 C3 C4



before



ScalaのHelloWorldクラスに次のseedorecordTest関数を追加します。

	def seedorecordTest: String = {
		println("####### seedorecordTest " + tag)
		if (parameterMap != null) {
			println("map=" + parameterMap.size)
			parameterMap.foreach(i => { println(i._1 + "=" + i._2.toList) })
		}
		//    println("tag=["+tag+"]")
		var rec = ""
		if (record != null) {
			// seedoreocrd属性のレコード解析結果を表示する
			println("=============================================")
			for ((k, v) <- record) {
				println("<" + k + ">=")
				v.foreach { kv =>
					val (k1, v1) = kv
					println("[" + k1 + "]=[" + v1 + "]")
					rec += v1
				}
				println("-----------------------------------------")
			}

			rec += "\n\n" // 区切り

			for ((k, v) <- record) {
				if (k == "b") {
					val b = record.get("b").get
					b.put("a1", "Z11111")
					b.put("a2", "Z22222")
					b.put("a3", "Z33333")
					b.foreach { kv =>
						val (k1, v1) = kv
						rec += v1
					}
					b.put("a1", "AAA11111")
					b.put("a2", "BBB22222")
					b.put("a3", "CCC33333")
					b.foreach { kv =>
						val (k1, v1) = kv
						rec += v1
					}
				} else if (k == "c") {
				} else {
					v.foreach { kv =>
						val (k1, v1) = kv
						rec += v1
					}
				}
			}
		}
		"HelloWorld seedorecordTest [" + record.size + "] \n" + rec + "\n date=" + new Date
	}


seedorecord属性がbのレコードの値を使って、tdタグの値を置換します。
seedorecord属性によって処理されるタグ達は、LinkedHashMapクラスによって保持されます。

record:LinkedHashMap[String,LinkedHashMap[String,String]]

tdタグの間の文字列は、seedofield属性の値でHashMapにキー管理されますから、put関数で上書きすることができます。
LinkedHashMapはHashMapに追加した順序を保持しますからForループで取り出される順序は元のタグと同じとなります。



cのレコードは表示しないようにします。
それ以外のタグは、置換せずにそのまま表示することになります。

上記のHTMLソースを実行するとseedorecordTest関数が実行され、以下のようにタグが置換されます。



HelloWorld seedorecordTest [10] 
A1 A2 A3 A4
A1 A2 A3 A4
B1 B2 B3 B4
C1 C2 C3 C4
A1 A2 A3 A4
A1 A2 A3 A4
Z11111 Z22222 Z33333 B4
AAA11111 BBB22222 CCC33333 B4
date=Thu Jan 03 01:49:24 JST 2013

after

いかがでしょう。使ってみたくなりましたか。

Comments

comments

Powered by Facebook Comments

コメントはまだありません

No comments yet.

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.

Powered by WordPress