2013-06-20 81 views
1

比方說,我有這樣的txt文件:F#腳本按行讀入文件中的行,並添加字符串每行

a 
b 
c 
d 
e 
f 
g 
h 
ch 

每一行我想補充,3,然後我想字符協議添加到數線。要將第一行加,k加到第二行加,r並加到第三加,p並且這個重複直到結束。

所以結果會是這樣:

a,k,3 
b,r,3 
c,p,3 
d,k,3 
e,r,3 
f,p,3 
g,k,3 
h,p,3 
ch,r,3 

我有這樣的迭代行:

open System.IO 

[<EntryPoint>] 
let main argv = 
    File.ReadLines(argv.[0]) |> Seq.iter (printfn "%s") 
    0 

,但它仍然無法正常工作(這不是印刷生產線)。我在cmd.exefsi script.fsx namefile.txt運行這個。

我是F#的noob,但我想開始學習它。剛纔我需要這個腳本。所以如果任何人都可以發佈我正確的解決方案謝謝

編輯: 感謝約翰·帕爾默我現在這個有:

open System.IO 

[<EntryPoint>] 
let main argv = 
    File.ReadLines(argv.[1]) |> Seq.iteri (fun i x -> match i % 3 with 
                   | 0 -> printfn "%s,k,3" x 
                   | 1 -> printfn "%s,r,3" x 
                   | 2 -> printfn "%s,p,3" x 
                   | _ -> printfn "%s" x) 
    0 

看起來不錯,但仍然沒有在命令窗口中並沒有什麼用印刷原始文件發生。對文件寫入更改的幫助很小(對新文件或舊文件無關緊要)。

回答

2

argv中的第一項是可執行文件的名稱。因此,您可能想要使用argv.[1]而不是argv.[0]來獲取函數的第一個參數。

對於你的第二個問題,你想要做的事就像

Seq.iteri (fun i x -> match i % 3 with 
         | 0 -> printfn "%s,k,3" x 
         //other cases similar 

編輯(更新的問題)

如果您看到了沒有打印任何,我猜你有錯誤的文件路徑 - 可能會添加如

printfn "%s" (argv.[1]) 

確保您打開正確的文件。

如果要輸出到你需要做的是這樣

use file = System.IO.File.CreateText("Some file name) 
File.ReadLines(argv.[1]) 
|> Seq.mapi (fun i x -> match i%3 with |0 -> fprintfn ...) //note fprintfn instead of printfn 

由於fprintf將輸出到文件的文件。

不過,我會檢查您打開正確的文件使用fsi當第一

+0

我已經編輯我的新的解決方案,我的問題。我還沒有完成。 –

+0

@Bibo - 查看編輯 –

+0

@Bibo - 也可以嘗試添加'System.Console.Read()|> ignore'來儘早停止您的應用程序,以便您可以檢查打印內容。 –

1

你的入口點不會自動運行,如果你使用fsc編譯的代碼會工作。如果你把它改成這樣的東西,你可以通過fsi運行它。

open System.IO 

let main (argv:string[]) = 
    File.ReadLines(argv.[1]) |> Seq.iter (printfn "%s") 
    0 

main fsi.CommandLineArgs 

注意,如約翰·帕爾默建議您將需要使用argv.[1]作爲fsi.CommandLineArgs包括參數的腳本的名稱。

或者,您可以將腳本設置爲腳本和源文件,使用類似link的東西。這是適用於你的腳本,一個simplifed版本

open System.IO 

#if COMPILED 
[<EntryPoint>] 
#endif 
let main (argv:string[]) = 
    File.ReadLines(argv.[0]) |> Seq.iter (printfn "%s") 
    0 

#if INTERACTIVE 
fsi.CommandLineArgs |> Seq.skip 1 |> Seq.toArray |> main 
#endif 

您可以通過兩種方式運行此:

  1. 爲腳本

    fsi.exe script.fsx -- input.txt

  2. 或編譯它,運行可執行文件

    fsc.exe script.fsx
    script.exe input.txt

+0

感謝您也:) –

相關問題