[Groovy] csv2xmlサンプル2

 Groovy  [Groovy] csv2xmlサンプル2 はコメントを受け付けていません。
9月 012011
 

■前回からの変更点
・SQL文を修正
  お酒だけに絞込み、価格の安い順にソート。
  ついでに連番を振りなおす。
・CSVデータが大きいと仮定し、一時ファイルを書きだすように変更。
  ※カレントディレクトリに一時ファイル(dbFile.h2.db)が生成される。

■groovy -v
——————————————————
Groovy Version: 1.8.1 JVM: 1.7.0
——————————————————

■csv2xml.groovy


@Grapes([
    @Grab(group = 'com.h2database', module = 'h2', version = '1.3.157'),
    @GrabConfig(systemClassLoader = true)
])
//jarをロードする場合
//this.getClass().classLoader.rootLoader.addURL(new File("h2-1.3.157.jar").toURL())

import groovy.sql.Sql
import groovy.xml.MarkupBuilder

if(!args) System.exit(1)

memDB = Sql.newInstance("jdbc:h2:./dbFile", "org.h2.Driver")
String sql = """
  select id, name, price, rownum as no from (
    select id, name, CONVERT(price, INT) as price from CSVREAD('${args[0]}',null,'UTF-8') 
    where name like '%酒' order by price
  ) 
"""

xml = new MarkupBuilder()
xml.smartxml() {
  xml.items() {
    memDB.eachRow(sql) {row ->
      xml.item(no:row.no) {
        id(row.id)
        name(row.name)
        price(row.price)
      }
    }
  }
}

memDB.close()

■source.csv(UTF-8)
——————————————————
id, name, price
1, コーラ, 150
2, 葡萄酒, 980
3, 麦酒, 238

——————————————————

■実行
// 企業内からなどネット接続時にproxy経由が必要な場合
// set JAVA_OPTS=-Dhttp.proxyHost=proxy.xxxxx.co.jp -Dhttp.proxyPort=8080
groovy csv2xml.groovy source.csv

■結果(標準出力)
——————————————————
<smartxml>
  <items>
    <item no=’1′>
      <id>3</id>
      <name>麦酒</name>
      <price>238</price>
    </item>
    <item no=’2′>
      <id>2</id>
      <name>葡萄酒</name>
      <price>980</price>
    </item>
  </items>
</smartxml>
——————————————————

[Scala] csv2xmlサンプル

 Scala  [Scala] csv2xmlサンプル はコメントを受け付けていません。
8月 282011
 

■csv2xml.groovy


import java.io.InputStreamReader
import au.com.bytecode.opencsv.CSVReader
import scala.collection.mutable.Queue
import scala.xml.Node
import scala.xml.PrettyPrinter

object Csv2Xml {
  def main(args: Array[String]): Unit = {
    var nodes = new Queue[Node]()
    
    var reader = new CSVReader(new InputStreamReader(System.in, "UTF-8"),',','"',' ',1)
    Iterator.continually(reader.readNext).takeWhile(_ != null).map(_.toList).foreach {
      case id :: name :: price :: _ =>  nodes += <item id={id}><name>{name}</name><price>{price}</price></item>
      case _ => 
    }
    reader.close()
    
    print((new PrettyPrinter(40,2)).format(<xml><items>{nodes}</items></xml>))
  }
}

■source.csv(UTF-8)
————————————————–
id, name, price
1, コーラ, 150
2, 葡萄酒, 980
3, 麦酒, 238

————————————————–

■実行
scala -cp opencsv-2.3.jar csv2xml.scala < source.csv

■結果(標準出力)
————————————————–
<xml>
  <items>
    <item id=”1″>
      <name>コーラ</name>
      <price>150</price>
    </item>
    <item id=”2″>
      <name>葡萄酒</name>
      <price>980</price>
    </item>
    <item id=”3″>
      <name>麦酒</name>
      <price>238</price>
    </item>
  </items>
</xml>
————————————————–

[Groovy] csv2xmlサンプル

 Groovy  [Groovy] csv2xmlサンプル はコメントを受け付けていません。
8月 272011
 

■csv2xml.groovy


@Grapes([
    @Grab(group = 'com.h2database', module = 'h2', version = '1.3.157'),
    @GrabConfig(systemClassLoader = true)
])
//jarをロードする場合
//this.getClass().classLoader.rootLoader.addURL(new File("h2-1.3.157.jar").toURL())

import groovy.sql.Sql
import groovy.xml.MarkupBuilder

if(!args) System.exit(1)

memDB = Sql.newInstance("jdbc:h2:mem:", "org.h2.Driver")
String sql = """
    select * from CSVREAD('${args[0]}',null,'UTF-8')
"""

xml = new MarkupBuilder()
xml.xml() {
  xml.items() {
    memDB.eachRow(sql) {row ->
      xml.item(id:row.id) {
        name(row.name)
        price(row.price)
      }
    }
  }
}

memDB.close()

■source.csv(UTF-8)
————————————————–
id, name, price
1, コーラ, 150
2, 葡萄酒, 980
3, 麦酒, 238

————————————————–

■実行
// 企業内からなどネット接続時にproxy経由が必要な場合
// set JAVA_OPTS=-Dhttp.proxyHost=proxy.xxxxx.co.jp -Dhttp.proxyPort=8080
groovy csv2xml.groovy source.csv

■結果(標準出力)
————————————————–
<xml>
  <items>
    <item id=’1′>
      <name>コーラ</name>
      <price>150</price>
    </item>
    <item id=’2′>
      <name>葡萄酒</name>
      <price>980</price>
    </item>
    <item id=’3′>
      <name>麦酒</name>
      <price>238</price>
    </item>
  </items>
</xml>
————————————————–