使用 F# 編寫檔案處理程式

ttocr、com發表於2024-12-02

在本篇文章中,我們將使用 F# 編寫一個簡單的檔案處理程式。該程式將讀取一個文字檔案,統計檔案中每個單詞的出現頻率,並將結果輸出到一個新的文字檔案。

環境準備
安裝 .NET SDK

首先,確保已安裝 .NET SDK。你可以透過以下命令檢查是否已經安裝:

bash
dotnet --version
如果沒有安裝,請前往 dotnet官網 下載並安裝合適的版本。

建立 F# 專案

建立一個新的 F# 控制檯應用程式:

bash

dotnet new console -lang "F#" -o WordFrequencyApp
cd WordFrequencyApp
編寫程式碼

  1. 讀取檔案
    我們將建立一個函式來讀取檔案內容,並將每一行分解為單詞列表。這裡使用 System.IO 名稱空間來讀取檔案內容。

fsharp

open System
open System.IO

let readFile filePath =
try
let lines = File.ReadAllLines(filePath)
Some lines
with
| :? FileNotFoundException ->
printfn "File not found."
None
| ex ->
printfn "Error: %s" ex.Message
None
2. 統計單詞頻率
接下來,我們將定義一個函式來統計文字中每個單詞的出現頻率。我們會將檔案內容拆分成單詞,並使用字典來記錄每個單詞的頻率。

fsharp

let countWordFrequency (lines: string[]) =
let wordCount =
lines
|> Array.collect (fun line -> line.Split([| ' '; '\t'; ','; '.'; '!'|], StringSplitOptions.RemoveEmptyEntries))
|> Array.map (fun word -> word.ToLower())
|> Array.fold (fun dict word ->
if dict.ContainsKey(word) then
dict.[word] <- dict.[word] + 1
else
dict.[word] <- 1
dict
) (System.Collections.Generic.Dictionary<string, int>())
wordCount
3. 輸出結果到檔案
我們將建立一個函式來將統計的結果輸出到一個新的文字檔案中。

fsharp

let writeResultsToFile wordCount outputFilePath =
try
use writer = new StreamWriter(outputFilePath)
wordCount
|> Seq.sortByDescending snd
|> Seq.iter (fun (word, count) -> writer.WriteLine($"{word}: {count}"))
printfn "Results written to %s" outputFilePath
with
| ex -> printfn "Error: %s" ex.Message
4. 主程式
將上述函式組合起來,並實現主程式的邏輯來讀取輸入檔案、統計單詞頻率並輸出結果。

fsharp

[]
let main argv =
let inputFile = "input.txt" // 輸入檔案路徑
let outputFile = "output.txt" // 輸出檔案路徑

match readFile inputFile with
| Some lines ->
    let wordCount = countWordFrequency lines
    writeResultsToFile wordCount outputFile
| None -> 
    printfn "Unable to process the file."

0  // 返回值,表示程式成功執行

程式碼解析
readFile 函式:

使用 File.ReadAllLines 讀取檔案內容,將檔案的每一行作為字串陣列返回。
如果檔案不存在或其他錯誤,捕獲異常並列印錯誤資訊。
countWordFrequency 函式:

將每一行拆分成單詞,並去掉標點符號和空格。
使用 Dictionary 儲存每個單詞的出現頻率,Array.fold 用來遍歷所有單詞並更新字典。
writeResultsToFile 函式:

使用 StreamWriter 將結果寫入到指定的輸出檔案中。
按照頻率降序排序後輸出每個單詞及其頻率。
主程式:

讀取輸入檔案,呼叫上述函式完成單詞統計,並將結果輸出到檔案中。
測試程式
建立一個名為 input.txt 的檔案,內容如下:

r

Hello world! This is a test.
Hello F# programming language.
F# is functional.
執行程式:

bash

dotnet run
檢視生成的 output.txt 檔案,內容應該如下:

makefile

hello: 2
f#: 2
world: 1
this: 1
is: 1
a: 1
test: 1更多內容訪問ttocr.com或聯絡1436423940
programming: 1
language: 1
functional: 1

相關文章