2010-02-25 13 views
1

Maintenant, je peux ajouter seul value or tubles au pipeline, ma question suivante est ce que je peux ajouter une liste/tableau:La tuyauterie d'une liste dans la ligne F #

filesUnderFolder 
|> Seq.map FileInfo 

mon problème est que je ne peux pas traiter cela avec pipeline |>, ou puis-je?

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

Répondre

2

En regardant votre commentaire, essayez-vous de le faire?

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) 

Le style impératif peut être plus propre.

for file in Assembly.GetExecutingAssembly().GetFiles() do 
    let stream = new StreamReader(file) 
    if stream.ReadToEnd().Contains(keyword) then 
     printfn "%s" file.Name 
3

Je ne comprends pas quel est votre question au sujet, mais la version correcte est:

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

Tout d'abord vous avez besoin GetExecutingAssembly et vous avez besoin de son résultat. Donc (). Deuxième GetFiles(), retour tableau de Stream, pas FileInfo comme vous pouvez vous attendre. Pour cette raison, vous devez envelopper Stream à StreamWriter.

C'est le cas.

+0

Oui, en quelque sorte. Toutefois, avec le code que vous avez écrit, je ne peux pas imprimer la valeur du nom de fichier/fichier d'accès de la deuxième ligne. Une idée? – demokritos

+0

et "votre deuxième" commentaire est lié au sujet de ma question précédente qui était liée ... désolé pour la confusion ... – demokritos

+0

Il n'y a pas de noms de fichiers dans les flux. Donc, vous ne pouvez pas le nommer de toute façon. 'ReadToEnd()' lit le flux entier. Donc, il imprimera le fichier entier pas ligne par ligne. Si vous avez besoin de lignes d'impression, utilisez simplement ReadLine(). Faites-moi savoir si vous avez besoin d'exemple. –