2011年11月02日

CSVパーサーを書いてみた(Scala)

CSVパーサーを書いてみた

scala.util.parsing.combinator辺りを使うと良いのだろうけど、Scala初心者の僕にはレベルが高いので自力で簡易CSVパーサーを書いてみました。

import java.io._

class CSVParser{
case class Field(val s:String){
override def toString = s
}
case class Record(val fields:List[Field]){
override def toString = {
var s = ""

fields.foreach(i => {
s += i.toString + ","
})
s
}
}
case class CSVFile(val records:List[Record]){
def getRow(row:Int) = {
records(row)
}
def getCell(row:Int,column:Int) = {
records(row).fields(column)
}
}

def read(path:String) = {
val file = new File(path)
val fr = new FileReader(file)
val br = new BufferedReader(fr)

var records = List[Record]()
var line = ""
line = br.readLine()
while(line != null){
records = records :+ Record(List.fromArray(line.split(",")).map(i => {Field(i)}))
line = br.readLine()
}

CSVFile(records)
}
}

使い方は、

val csv = (new CSVParser()).read("./workbook.csv")

//セルの内容をずらーっと表示するだけの例
/*
csv.records.foreach(i => {
println("line")
i.fields.foreach(s => {
println(s.s)
})
})
*/
//getRow,getCell
/*
var i = 0
while(i < csv.records.length){
println(csv.getRow(i))
var record = csv.getRow(i)
var s = 0
while(s < record.fields.length){
//コメント外すとずらーっとセルの内容を表示
//println(csv.getCell(i,s))

s += 1
}

i+=1
}
*/

Cellの内容に","が入ってたら機能しないダメダメパーサーですけどね。


posted by purigen at 11:00| Comment(0) | TrackBack(0) | Scala | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。