callmekohei's blog

callmekoheiのひとりごと

F#言語を使ってロト6を当ててみる!(データーベース登録編)

f:id:callmekohei00:20170319150912p:plain

Summary

取得した当選番号をデーターベースSqliteに保存する

First Step

FSharp.Data, System.Data.SQLitenugetします

osxの人はここを参考にlibSQLite.Interop.dylibも用意します

F#からSQLiteをつかってみる を一読してF#からSqliteに対しての操作をつかんでください

Second Step

データーベースファイルをあらかじめ作成します

テーブル名をloto6とします

/// loto.sqlite3という名前のデーターベースファイルを作成
$ sqlite3 loto.sqlite3

/// カラムをid, date, n1~n6 として作成
/// id は key とします ( key は重複ができない値です )
sqlite> create table loto6 ( id int primary key, date text , n1 int, n2 int, n3 int, n4 int, n5 int, n6 int );

/// 作業を終了します
sqlite> .exit

Third Step

次のような感じで当選情報をデーターベースに登録します

webの当選情報の当選回数とデーターベースの`id`を比較します

不足してる当選情報のsqlを作成します

データーベースに登録します

当選情報とidの比較

最新のidをデーターベースから取得します

sqliteのメソッドは返り値を返さないのでConcurrentQueueを使って返り値を取得します

/// 最新のid をデーターベースから取得する関数
let lastID_sqlite (db:SQ3) : int =

    let cq = new ConcurrentQueue<_>()

    let str = @"SELECT id FROM loto6"

    let f = fun (r:SQLiteDataReader) -> 
        cq.Enqueue ( r.GetInt32(0) ) |> ignore

    db.sqlite_open
    db.sqlite_select str f
    db.sqlite_close 

    cq.ToArray()
    |> fun arr ->
        if Array.isEmpty arr
        then 0
        else Array.max arr

sqlの作成

/// みずほ銀行のホームページから取得した当選情報
["1157"; "2017/03/16"; "05"; "17"; "20"; "28"; "39"; "42"]

/// ↓↓↓↓↓↓↓

/// データーベースに登録するための文字列(sql)
"INSERT INTO loto6 ( id, date, n1, n2, n3, n4, n5, n6 ) VALUES ('1157','2017/03/16','05','17','20','28','39','42')"

sqlを作成する関数

/// データーベースに登録するための当選情報の文字列を作成する関数 
let atariList atariData : string list =
    let str = @"INSERT INTO loto6 ( id, date, n1, n2, n3, n4, n5, n6 ) VALUES ("
    atariData
    |> List.map( fun l -> l |> List.fold ( fun acc s -> acc + "," + "'" + s + "'" |> fun s -> s.TrimStart(',') ) "" )
    |> List.map( fun s -> str + s + ")" )

データーベースへの登録

データーベースに登録する関数

/// データーベースに当選番号情報を登録する関数
let register (db:SQ3) atariStringsList : unit =
    db.sqlite_open
    atariStringsList |> List.iter ( fun s -> db.sqlite_insert s )
    db.sqlite_close

Code

今回書いたコードはこちら〜

みずほ銀行のホームページから取得したロト6の当選番号情報をデーターベースに登録するスクリプト · GitHub

参考

www.dbonline.jp

qiita.com