nomurabbitのブログ

nomurabbitのブログはITを中心にした技術ブログです。

nomurabbitのブログ

F#でListの形でデータを扱ってみた

最近マイブームのF#のデータの扱いについて、

自作クラスの配列に格納する方法について試してみました。

やってることは以下の通り。

1)ファイルからtsvのデータを読み込んで各行をListに格納する

2)Listに格納された各行をtabで区切り自作クラスのListに変換する

3)自作クラスのListの指定した要素を標準出力に出力する


<File1.fs>

module File1

open System
open System.IO

//----------------------------------------------------------
// 定数の定義
//
let path = @"C:\test.txt";

//----------------------------------------------------------
// データ格納クラスの定義
//
type BookData = class
  val ISBN10     : string
  val ISBN13     : string
  val TITLE      : string

  new(isbn10, isbn13, title) = 
    {
      ISBN10 = isbn10
      ISBN13 = isbn13
      TITLE  = title
    }

  end;;

//----------------------------------------------------------
// サブルーチンの定義
//
let println (x : BookData) = printfn "%s" x.TITLE

let readTextFile (x : string)    = File.ReadLines(x) |> Seq.toList
let splitTextRow (x : string)    = x.Split([|'\t'|])
let makeBookData (x : string []) = new BookData( x.GetValue(0).ToString() , x.GetValue(1).ToString(), x.GetValue(2).ToString())

//----------------------------------------------------------
// メインの処理
//
let result3 =
  List.map makeBookData
    (List.map splitTextRow
      (readTextFile path))    

List.iter println result3

F#はマルチパラダイム言語なので、基本的にはOOPの考え方でコードは書けます。

(そうでないと僕の場合困ります。)

ただ、データの処理においては関数型プログラミングの書き方ができるので、

ずいぶん読みやすく、スッキリと書くことができます。