1

これで、単一の値またはチューブルをパイプラインに追加できるようになりました。次の質問は、リスト/配列を追加できるかどうかです。

filesUnderFolder
|> Seq.map FileInfo  

私の問題は、パイプライン |> でこれを処理できないことです。

Assembly.GetExecutingAssembly.GetFiles()
|>Array.map (fun file -> file.ReadAllText().Contains(keyword))

4

2 に答える 2

3

あなたの質問が何であるかわかりませんが、正しいバージョンは次のとおりです。

open System.Reflection
open System.IO

Assembly.GetExecutingAssembly().GetFiles() 
|> Seq.map (fun file -> new StreamReader(file)) 
|> Seq.map (fun file -> file.ReadToEnd().Contains(keyword)) 
|> Seq.iter(printfn "%s")

まず、GetExecutingAssemblyが必要であり、その結果が必要です。だから()。次に、期待どおりではなく、GetFiles()の配列を返します。このため、にラップする必要があります。StreamFileInfoStreamStreamWriter

それでおしまい。

于 2010-02-25T09:31:47.670 に答える
2

あなたのコメントを見て、あなたはこれをやろうとしていますか?

Assembly.GetExecutingAssembly().GetFiles() 
|> Seq.map (fun file -> 
    let stream = new StreamReader(file)
    file, stream.ReadToEnd().Contains(keyword))
|> Seq.filter snd
|> Seq.map fst
|> Seq.iter (fun file -> printfn "%s" file.Name)

命令型のスタイルはよりクリーンにできます。

for file in Assembly.GetExecutingAssembly().GetFiles() do
    let stream = new StreamReader(file)
    if stream.ReadToEnd().Contains(keyword) then
        printfn "%s" file.Name
于 2010-02-25T18:59:32.713 に答える