使用 F# 编写文件处理程序

news/2024/12/2 18:55:49/文章来源:https://www.cnblogs.com/ocr12/p/18582485

在本篇文章中,我们将使用 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 lineswriteResultsToFile 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/845565.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5-文件上传漏洞

1、文件上传漏洞原理 1.1 一句话木马 <?php @eval($_POST[xu]); ?> 其中@表示忽略错误,eval()函数表示把传进去的字符串作为php代码执行 从http post里面拿到参数叫xu的value,然后作为代码去执行,并忽略错误 2、Webshell介绍 一句话木马、大马、小马、图片马都是web…

纯血鸿蒙进程加速,混合app开发迎来又一波新机会

对于开发者来说,未来相当一段时间,将来会为鸿蒙,安卓,IOS三个系统同时开发APP上架,其中面对全新的鸿蒙系统,百万APP在未来几年会重新开发上架。 鸿蒙SDK厂商及App开发团队,迎来新的市场机遇。时间不知不觉又来到了2024年最后一个月,又到了辞旧迎新,复盘今年,放眼明年…

实验五 继承和多态

实验一: 代码: publisher.hpp:1 #pragma once2 3 #include<iostream>4 #include<string>5 6 using std::cout;7 using std::endl;8 using std::string;9 10 class Publisher { 11 public: 12 Publisher(const string& s = ""); 13 14 public…

博客园-添加统计图

💖简介 通过WPS在线列表构建博客园每日相关数据统计图。 👉效果📖实现前往WPShttps://www.kdocs.cn/latest新建多维表格 创建表格视图新建仪表盘 新建卡片、折线图卡片配置示例折线图配置示例点击分享获取链接⭐链接配置在config中配置link{icon: <svg t="173313…

华为技术专家出品,《华为开发者空间案例指南》带你玩转云上20+场景应用开发

免费领取云主机,开启你的云上开发之旅,分享体验将有机会赢取精美礼品。 关键词:开发者空间、AI、鲲鹏、Serverless随时随地都能开启开发之旅,这是一种怎样奇妙的体验?想象一下,无需安装繁琐的 IDE,也不用搭建复杂的开发环境,只需开机,就能迅速投入项目开发。在华为开发…

jQuery和CSS3折叠卡片式下拉列表框特效

这是一款使用JQUERY和CSS3制作的效果非常炫酷的折叠卡片式下拉列表框特效。该下拉列表框特效将每一个列表项都制作为卡片的样式,打开和关闭它有打开和关闭百叶窗的感觉,效果非常不错。预览 下载使用方法HTML结构 该下拉列表框特效的列表项使用一个无序列表来制作,用于切换…

幂等设计:确保操作的安全与可靠

目录一、概述1.1、什么是幂等1.2、为什么需要幂等?二、幂等如何设计实现幂等的8 种方案select+insert+主键/唯一索引冲突状态机幂等抽取防重表token令牌悲观锁(如select for update)乐观锁分布式锁三、HTTP的幂等 一、概述 在分布式系统和微服务架构中,确保操作的安全性和可靠…

从仪表盘探索 MongoDB 关键指标

这是 MongoDB 监控系列文章的第七篇,前面几篇文章的链接如下:MongoDB 监控(一) MongoDB 监控(二) MongoDB 监控(三) MongoDB 监控(四) MongoDB 监控(五) MongoDB 监控(六)按照前面系列文章,我们已经采集到 MongoDB 的监控数据了,并且通过 Grafana 和 Nightinga…

微服务引擎 MSE 及云原生 API 网关 2024 年 10 月产品动态

微服务引擎 MSE 及云原生 API 网关 2024 年 10 月产品动态

20222425 2024-2025-1 《网络与系统攻防技术》实验七实验报告

1.实验内容 本周学习内容:本周我们学了web安全的章节,首先我们了解了前端和后端技术,其次我们学习了一些web安全攻防的内容,例如SQL注入和XSS跨站脚本攻击、CSRF以及安全防范的内容。在实验的过程中我们学到了网络欺诈与防范技术。 2.实验过程 主机IP:192.168.35.1 kali(…

基于Bootstrap3的简单柱状图表插件

jchart是一款简单小巧的基于Bootstrap3.x的jquery柱状图表插件。该柱状图片表插件通过简单的设置,就可以生成非常漂亮的水平柱状图,并带有水平和垂直标签以及图表的头部和尾部。 在线演示 下载 使用方法 该jQuery柱状图插件可以通过javascript来调用,也可以直接使用HTML标…