Now I can add single value or tubles to the pipeline, my next question is can I add a list/array:
filesUnderFolder
|> Seq.map FileInfo
my problem is I can't process this with pipeline |开发者_开发问答>, or can I?
Assembly.GetExecutingAssembly.GetFiles()
|>Array.map (fun file -> file.ReadAllText().Contains(keyword))
I do not understand what is your question about, but correct version is:
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")
First you need GetExecutingAssembly and you need its result. So ()
.
Second GetFiles()
, return array of Stream
, not FileInfo
as you may expect. Because of this you have to wrap Stream
to StreamWriter
.
Thats it.
Looking at your comment are you trying to do this?
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)
Imperative style can be cleaner.
for file in Assembly.GetExecutingAssembly().GetFiles() do
let stream = new StreamReader(file)
if stream.ReadToEnd().Contains(keyword) then
printfn "%s" file.Name
精彩评论