Question

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))

Was it helpful?

Solution

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

OTHER TIPS

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top