あるフォルダ配下の "CREATE TABLE", "CREATE PROCEDURE", "ALTER PROCEDURE" の1行を取得する。

F#を訓練したおかげで、結構ぱっとかけるようになりました。


■コード

open System.IO
let list path =
  let checkArr = [|"CREATE TABLE"; "CREATE PROCEDURE"; "ALTER PROCEDURE";|]
  let check (t : string) =
    let t = t.ToUpper()
    checkArr |> Array.exists (fun c -> t.IndexOf(c) >= 0)
  Directory.GetFiles(path, "*.sql", SearchOption.AllDirectories)
  |> Seq.map (fun path ->
     seq {
       use sr = new StreamReader(path)
       while not sr.EndOfStream do
         yield sr.ReadLine()
     })
  |> Seq.map(Seq.find check)

■使い方

// CREATE文の一覧を取得する。
list "[path]" |> Seq.iter (printfn "%A");;