現在我可以單value or tubles添加到管道,我的下一個問題是,我可以添加一個列表/數組:管道中的列表入F#線
filesUnderFolder
|> Seq.map FileInfo
我的問題是我不能處理此管道|>,或者我可以嗎?
Assembly.GetExecutingAssembly.GetFiles()
|>Array.map (fun file -> file.ReadAllText().Contains(keyword))
現在我可以單value or tubles添加到管道,我的下一個問題是,我可以添加一個列表/數組:管道中的列表入F#線
filesUnderFolder
|> Seq.map FileInfo
我的問題是我不能處理此管道|>,或者我可以嗎?
Assembly.GetExecutingAssembly.GetFiles()
|>Array.map (fun file -> file.ReadAllText().Contains(keyword))
看着你的評論你想要做到這一點?
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
我不明白,你怎樣的問題,但正確的版本是:
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()
,返回數組Stream
,而不是您所期望的FileInfo
。因此,您必須將Stream
包裝爲StreamWriter
。
就是這樣。
是的,那種。 但是,隨着您編寫的代碼,我無法打印第二行的文件名/訪問文件值。任何想法? – demokritos 2010-02-25 09:58:01
和「你的第二個」評論與我之前提到的問題的主題有關聯......對於混淆...抱歉... – demokritos 2010-02-25 10:00:36
流中沒有文件名。所以你無論如何都不能推測它。 'ReadToEnd()'讀取整個流。所以它會一行一行地打印整個文件。如果你需要打印線,只需使用ReadLine()。讓我知道你是否需要例子。 – 2010-02-25 22:48:31