开发手册 欢迎您!
软件开发者资料库

F# - 基本I / O.

F#Basic I / O - 从简单和简单的步骤学习fSharp编程,从基本概念到高级概念,包括概述,环境设置,程序结构,基本语法,数据类型,类型转换,变量,运算符,决策,循环,函数,字符串,选项,元组,记录,列表,序列,集,映射,判别的联合,可变数据,数组,可变列表,可变字典,基本I / O,泛型,代表,枚举,模式匹配,异常处理,类,结构,运算符重载,继承,接口,事件,模块,命名空间。

基本输入输出包括 :

  • 读取和写入控制台.

  • 读取和写入文件.

Core.Printf模块

我们使用了 printf printfn 函数用于写入控制台.在本节中,我们将查看F#的 Printf 模块的详细信息.

除上述功能外, Core.Printf F#模块有各种其他方法可以使用%标记作为占位符进行打印和格式化.下表显示了简要说明和减号的方法;

Value

描述

bprintf : StringBuilder →   BuilderFormat<'T> → 'T

打印到StringBuilder.

eprintf : TextWriterFormat<'T> → 'T

将格式化输出打印到stderr.

eprintfn : TextWriterFormat<'T> → 'T

将格式化输出打印到stderr,添加换行符.

failwithf : StringFormat<'T,'Result> →   'T

打印到字符串缓冲区并使用给定结果引发异常.

fprintf : TextWriter →   TextWriterFormat<'T> → 'T

打印到文本编写器.

fprintfn : TextWriter →   TextWriterFormat<'T> → 'T

打印到文本编写器,添加换行符.

kbprintf : (unit → 'Result) →   StringBuilder → BuilderFormat<'T,'Result> → 'T

bprintf类似,但调用指定的函数来生成结果.

kfprintf : (unit → 'Result) →   TextWriter → TextWriterFormat<'T,'Result> → 'T

fprintf类似,但调用指定的函数来生成结果.

kprintf : (string → 'Result) →   StringFormat<'T,'Result> → 'T

printf类似,但调用指定的函数来生成结果.例如,这些让所有输出输入到通道后打印力都是冲洗,但不是之前.

ksprintf : (string → 'Result) →   StringFormat<'T,'Result> → 'T

sprintf类似,但调用指定的函数来生成结果.

printf : TextWriterFormat<'T> → 'T

将格式化输出打印到stdout.

printfn : TextWriterFormat<'T> → 'T

将格式化输出打印到stdout,添加换行符.

sprintf : StringFormat<'T> → 'T

使用内部字符串缓冲区打印到字符串并将结果作为字符串返回.


格式规范用于根据程序员的需要格式化输入或输出.格式规范

这些是带有%标记的字符串,表示格式占位符.

格式占位符的语法是 :

%[flags][width][.precision][type]


type 被解释为 :

类型描述
%b格式化 bool,格式为 true false .
%c格式化一个字符.
%s格式化字符串,格式化为其内容,而不解释任何转义字符.
%d,%i格式化为十进制整数格式的任何基本整数类型,如果基本整数类型已签名,则签名.
%u格式任何基本整数类型,格式为无符号十进制整数.
%x格式化为无符号十六进制整数的任何基本整数类型,使用小写字母a到f.
%X使用大写字母A格式化任何格式为无符号十六进制整数的基本整数类型通过F.
%o格式化为格式化为的任何基本整数类型无符号八进制整数.
%e,%E,%f,%F,%g,%G格式化使用C风格浮点格式规范格式化的任何基本浮点类型(float,float32).
%e,%E格式化具有[ - ] d.dddde [sign] ddd形式的带符号值,其中d为a单个十进制数字,dddd是一个或多个十进制数字,ddd正好是三位小数,符号是+或 - .
%f格式化具有[ - ] dddd.dddd形式的带符号值,其中dddd是一个或多个十进制数字.小数点前的位数取决于数字的大小,小数点后的位数取决于请求的精度.
%g,%G格式化以f或e格式打印的有符号值,以给定值和精度更紧凑为准.
%M格式化十进制值.
%O格式化任何值,通过装箱对象并使用其 ToString 方法打印.
%A,%+ A格式化任何值,用默认布局设置.使用%+ A打印具有内部和私人表示的歧视联盟的结构.
%a

一般格式说明符,需要两个参数.第一个参数是一个接受两个参数的函数:第一个是给定格式化函数的适当类型的上下文参数(例如,TextWriter),第二个是要打印的值,它输出或返回适当的文本./p>

第二个参数是要打印的特定值.

%t一般格式说明符,需要一个参数:一个函数,它接受给定格式化函数(aTextWriter)的相应类型的上下文参数,并输出或返回相应的文本.基本整数类型是 byte,sbyte,int16,uint16,int32,uint32,int64,uint64,nativeint, unativeint.基本浮点类型是 float float32.

宽度是一个可选参数.它是一个整数,表示结果的最小宽度.例如,%5d打印一个至少包含5个字符的整数.

有效的标志在下表中描述 :

ValueDescription
0指定添加零而不是空格来弥补所需width.
-指定在宽度内左对齐结果指定.
+指定如果数字为+,则添加+字符正数(匹配负号的 - 符号).
''(空格)如果数字为正数,则指定添加额外空格(以匹配负数的 - 符号).
无效.

示例

printf "Hello "printf "World"printfn ""printfn "Hello "printfn "World"printf "Hi, I'm %s and I'm a %s" "Rohit" "Medical Student"printfn "d: %f" 212.098fprintfn "e: %f" 504.768fprintfn "x: %g" 212.098fprintfn "y: %g" 504.768fprintfn "x: %e" 212.098fprintfn "y: %e" 504.768fprintfn "True: %b" true


编译并执行程序时,它会产生以下输出和减号;

Hello WorldHelloWorldHi, I'm Rohit and I'm a Medical Studentd: 212.098000e: 504.768000x: 212.098y: 504.768x: 2.120980e+002y: 5.047680e+002True: true


控制台类

此类是.NET框架的一部分.它代表控制台应用程序的标准输入,输出和错误流.

它提供了各种读取和写入控制台的方法.下表显示了方法 :

Method

描述

Beep()

通过控制台扬声器发出哔哔声.

Beep(Int32, Int32)

通过控制台扬声器播放指定频率和持续时间的哔哔声.

Clear

清除控制台缓冲区和显示信息的相应控制台窗口.

MoveBufferArea(Int32, Int32, Int32, Int32, Int32,   Int32)

将屏幕缓冲区的指定源区域复制到指定的目标区域.

MoveBufferArea(Int32, Int32, Int32, Int32, Int32,   Int32, Char, ConsoleColor, ConsoleColor)

复制a指定的屏幕缓冲区的源区域到指定的目标区域.

OpenStandardError()

获取标准错误流.

OpenStandardError(Int32)

获取标准错误流,该错误流设置为指定的缓冲区大小.

OpenStandardInput()

获取标准输入流.

OpenStandardInput(Int32)

获取标准输入流,该输入流设置为指定的缓冲区大小.

OpenStandardOutput()

获取标准输出流.

OpenStandardOutput(Int32)

获取标准输出流,该输出流设置为指定的缓冲区大小./td>

Read

从标准输入流中读取下一个字符.

ReadKey()

获取用户按下的下一个字符或功能键.按下的键显示在控制台窗口中.

ReadKey(Boolean)

获取用户按下的下一个字符或功能键.按下的键可选地显示在控制台窗口中.

ReadLine

读取标准输入流中的下一行字符.

ResetColor

集前景和后台控制台的颜色为默认值.

SetBufferSize

设置屏幕缓冲区的高度和宽度为指定值.

SetCursorPosition

设置光标的位置.

SetError

设置Error属性到指定的 TextWriter 对象.

SetIn

In属性设置为指定的 TextReader 对象.

SetOut

Out属性设置为指定的 TextWriter 对象.

SetWindowPosition

设置控制台窗口相对于屏幕缓冲区的位置.

SetWindowSize

将控制台窗口的高度和宽度设置为指定值.

Write(Boolean)

将指定布尔值的文本表示写入标准输出流.

Write(Char)

将指定的Unicode字符值写入标准输出流.

Write(Char[])

将指定的Unicode字符数组写入标准输出流.

Write(Decimal)

写入sp的文本表示ecified标准输出流的十进制值.

Write(Double)

将指定的双精度浮点值的文本表示写入标准输出流.

Write(Int32)

将指定的32位带符号整数值的文本表示写入标准输出流.

Write(Int64)

将指定的64位有符号整数值的文本表示写入标准输出流.

Write(Object)

将指定对象的文本表示写入标准输出流.

Write(Single)

写入指定的单精度浮点值的文本表示形式到标准输出流.

Write(String)

写入指定的字符串值为标准输出流.

Write(UInt32)

写入文本表示指定的32位无符号整数值到标准输出流.

Write(UInt64)

将指定的64位无符号整数值的文本表示写入标准输出流.

Write(String, Object)

使用指定的格式信息将指定对象的文本表示写入标准输出流.

Write(String, Object[])

使用指定的对象将指定对象数组的文本表示写入标准输出流格式信息.

Write(Char[], Int32, Int32)

将指定的Unicode字符子数组写入标准输出流.

Write(String, Object, Object)

使用指定的格式信息将指定对象的文本表示写入标准输出流.

Write(String, Object, Object, Object)

使用指定的格式信息将指定对象的文本表示写入标准输出流.

Write(String, Object, Object, Object, Object)

写入文本表示形式使用指定的格式信息将指定的对象和可变长度参数列表添加到标准输出流.

WriteLine()

将当前行终止符写入标准输出流.

WriteLine(Boolean)

将指定布尔值的文本表示形式(后跟当前行终止符)写入标准输出流.

WriteLine(Char)

将指定的Unicode字符,后跟当前行终止符,值写入标准输出流.

WriteLine(Char[])

将指定的Unicode字符数组(后跟当前行终止符)写入标准输出流.

WriteLine(Decimal)

将指定的Decimal值的文本表示形式(后跟当前行终止符)写入标准输出流.

WriteLine(Double)

写入指定double的文本表示形式-precision浮点值,后跟当前行终止符,到标准输出流.

WriteLine(Int32)

将指定的32位带符号整数值的文本表示形式(后跟当前行终止符)写入标准输出流.

WriteLine(Int64)

将指定的64位带符号整数值的文本表示形式(后跟当前行终止符)写入标准输出流.

WriteLine(Object)

将指定对象的文本表示形式(后跟当前行终止符)写入标准输出流.

WriteLine(Single)

写入文本表示形式指定的单精度浮点值,后跟当前行终止符,到标准输出流.

WriteLine(String)

将指定的字符串值(后跟当前行终止符)写入标准输出流.

WriteLine(UInt32)

将指定的32位无符号整数值的文本表示形式(后跟当前行终止符)写入标准输出流.

WriteLine(UInt64)

写入指定的64位无符号整数值的文本表示形式,后跟当前行终止符,到标准输出流.

WriteLine(String, Object)

写入指定对象的文本表示形式,后跟当前行终止符,使用指定的格式信息到标准输出流.

WriteLine(String, Object[])

使用指定的格式信息将指定对象数组的文本表示形式(后跟当前行终止符)写入标准输出流.

WriteLine(Char[], Int32, Int32)

写入指定的Unicode字符的子数组,后跟当前行终止符,到标准输出流.

WriteLine(String, Object, Object)

te xt表示指定对象,后跟当前行终止符,使用指定的格式信息到标准输出流.

WriteLine(String, Object, Object, Object)

使用指定的格式信息将指定对象的文本表示形式(后跟当前行终止符)写入标准输出流./td>

WriteLine(String, Object, Object, Object, Object)

写入指定对象和可变长度参数列表的文本表示,后跟当前行终止符,使用指定的格式信息到标准输出流.


以下示例演示从控制台读取并写入其中 :


示例

open Systemlet main() =   Console.Write("What's your name? ")   let name = Console.ReadLine()   Console.Write("Hello, {0}\n", name)   Console.WriteLine(System.String.Format("Big Greetings from {0} and {1}", "TutorialsPoint", "Absoulte Classes"))   Console.WriteLine(System.String.Format("|{0:yyyy-MMM-dd}|", System.DateTime.Now))main()


编译并执行程序时,它会产生以下输出 :

What's your name? KabirHello, KabirBig Greetings from TutorialsPoint and Absoulte Classes|2015-Jan-05|


System.IO命名空间

System.IO命名空间包含各种用于执行基本操作的有用类I/O.

它包含允许读取和写入文件和数据流的类型或类以及提供基本文件和目录支持的类型.

对于使用文件系统有用的类 :

  • 系统. IO.File类用于创建,附加和删除文件.

  • System.IO.Directory类用于创建,移动和删除目录.

  • System.IO.Path类对表示文件路径的字符串执行操作.

  • System.IO.FileSystemWatcher类允许用户监听目录以进行更改.

用于处理流(字节序列)和减号的类;

  • System.IO.StreamReader类用于从流中读取字符.

  • System.IO.StreamWriter类用于将字符写入流.

  • System.IO.MemoryStream类创建一个内存中的字节流.

下表显示了命名空间中提供的所有类以及简短描述 :

Class描述
BinaryReader以特定编码将原始数据类型读取为二进制值.
BinaryWriter将二进制中的原始类型写入流并支持以特定编码写入字符串.
BufferedStream添加缓冲层以对另一个流进行读写操作.
Directory公开通过目录和子目录创建,移动和枚举的静态方法.
DirectoryInfo公开用于创建,移动和枚举目录和子目录的实例方法.
DirectoryNotFoundException无法找到部分文件或目录时引发的异常.
DriveInfo提供对驱动器信息的访问.
DriveNotFoundException尝试访问不可用的驱动器或共享时引发的异常.
EndOfStreamException尝试超过流结束时抛出的异常.
ErrorEventArgs提供FileSystemWatcher.Error事件的数据.
File提供创建,复制,删除,移动和打开单个的静态方法文件,并帮助创建FileStream对象.
FileFormatException当输入文件或符合特定文件格式规范的数据流格式错误时抛出的异常.
FileInfo提供用于创建,复制,删除,移动和打开文件的属性和实例方法,以及帮助创建FileStream对象.
FileLoadException异常是找到托管程序集但无法加载时抛出.
FileNotFoundException尝试访问磁盘上不存在的文件时引发的异常失败.
FileStream在文件周围显示一个Stream,支持同步和异步读写操作.
FileSystemEventArgs提供目录事件和减号的数据;已更改,已创建,已删除.
FileSystemInfo为两者提供基类FileInfo和DirectoryInfo对象.
FileSystemWatcher监听文件系统更改通知并在目录或目录中的文件发生更改时引发事件.
InternalBufferOverflowException内部缓冲区溢出时引发的异常.
InvalidDataException数据流格式无效时引发的异常.
IODescriptionAttribute设置可视设计器在引用事件,扩展程序或属性时可以显示的描述.
IOException发生I/O错误时抛出的异常.
MemoryStream创建一个ba的流cking store是内存.
Path对包含的String实例执行操作文件或目录路径信息.这些操作以跨平台的方式执行.
PathTooLongException当路径或文件名长于系统定义的最大长度时抛出的异常.
PipeException在命名管道中发生错误时抛出.
RenamedEventArgs提供重命名事件的数据.
Stream提供字节序列的通用视图.这是一个抽象类.
StreamReader实现读取字符的TextReader来自特定编码的字节流.
StreamWriter实现TextWriter用于将字符写入特定编码的流中.要浏览此类型的.NET Framework源代码,请参阅参考源.
StringReader实现从字符串中读取的TextReader.
StringWriter实现TextWriter以将信息写入字符串.信息存储在底层的StringBuilder中.
TextReader代表读者这可以读取连续的一系列字符.
TextWriter代表作家可以写一系列连续的字符.这个类是抽象的.
UnmanagedMemoryAccessor提供对非托管块的随机访问来自托管代码的内存.
UnmanagedMemoryStream提供对非托管内存块的访问来自托管代码.
WindowsRuntimeStorageExtensions包含IStorageFile和IStorageFolder的扩展方法开发Windows应用商店应用时Windows运行时中的接口.
WindowsRuntimeStreamExtensions包含用于在Windows运行时和.NET for Windows商店应用程序中的托管流之间进行转换的扩展方法.

示例

以下示例创建一个名为test.txt的文件,在那里写入一条消息,从文件中读取文本并将其打印在控制台上.

注意 : 执行此操作所需的代码量要少得多

open System.IO // Name spaces can be opened just as modulesFile.WriteAllText("test.txt", "Hello There\n Welcome to:\n Tutorials Point")let msg = File.ReadAllText("test.txt")printfn "%s" msg


编译并执行程序时,它会产生以下输出 :

Hello ThereWelcome to:Tutorials Point