2016年2月13日土曜日

C#とF#の連携2

http://www.infoq.com/jp/articles/pickering-fsharp-async
上記のサイトを参考にさせいていただきました。
C#のGUIで、いろいろ試してみました。

F#側は
namespace Library1
open System
open System.Collections.Generic
open System.IO
open  Microsoft.FSharp.Control.CommonExtensions
open  System.Diagnostics
open  System.Text.RegularExpressions
module FSLib =
 let  path = @"\\192.168.1.1\HomeICT\test"
 let  readFile filePath =
     // open and read file
     let  fileStream = File.OpenText(filePath)
     let  text = fileStream.ReadToEnd()
     // find all the "words" using a regex
     let  word = new  Regex("\w+")
     let  matches = word.Matches(text)
     let  words  = seq{ for m in  matches -> m.Value }
     // count unique words using a set
     let uniqueWords = Set.ofSeq words
     // print the results
     let name = Path.GetFileNameWithoutExtension(filePath)
     sprintf "%s - Words: %d Unique words: %d "  name matches.Count  uniqueWords.Count
 let xt2 =
     let filePaths = Directory.GetFiles(path)
     [for filePath in filePaths -> readFile filePath]

C#側は

using System;
using System.Linq;
using System.Windows.Forms;
using Library1;
using System.Collections.Generic;
using Microsoft.FSharp.Collections;
途中省略
 private void button2_Click(object sender, EventArgs e)
        {
            //FSharpList<string> xt2 = FSLib.xt2;   最初、この2行でやってみたけれど
            //listBox2.Items.AddRange(xt2.ToArray());  めんどうなので、1行にまとめてみたらOKでした
            listBox2.Items.AddRange(FSLib.xt2.ToArray());

        }


0 件のコメント:

コメントを投稿