Scala+DBMS+Web スカラ座の夜

2013年1月3日

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

Filed under: Scala — admin @ 12:53 午前

前回、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

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

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

No comments yet.

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.

Powered by WordPress