F#基本I / O
基本输入输出包括
- 读取和写入到控制台。
- 读取和写入到文件中。
Core.Printf模块
我们已经使用了printf和所述printfn功能写入到控制台。在本节中,我们将看看F#的printf的模块的详细信息。
除了上述功能,F#的Core.Printf模块具有使用%标记用作占位符用于打印和格式化各种其它方法。下表显示了简要描述的方法。
值 | 描述 |
---|---|
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 | 打印格式化输出到标准输出。 |
printfn : TextWriterFormat<'T> → 'T | 打印格式化输出到标准输出,增加一个换行符。 |
sprintf : StringFormat<'T> → 'T | 打印到一个字符串使用内部字符串缓冲区并返回结果为一个字符串。 |
格式规范
格式规范用来格式化输入或输出,可根据程序员的需要。
这些都是标志%显示格式的占位符的字符串。
格式占位符的语法是
%[flags][width][.precision][type]
该类型被解释为
类型 | 描述 |
---|---|
%b | 格式化为bool,格式为true或false。 |
%C | 格式化字符。 |
%S | 格式化一个字符串,格式为其内容,而不解释任何转义字符。 |
%D,%I | 格式格式化为十进制整数任何基本的整数类型,如果基本的整数类型的签署。 |
%U | 格式化格式化为一个无符号十进制整数任何基本的整数类型。 |
%X | 格式格式化为无符号十六进制整数任何基本的整数类型,使用A到F小写字母。 |
%X | 格式格式化为无符号十六进制整数任何基本的整数类型,从A到F使用大写字母 |
%ο | 格式化格式化为一个无符号的八进制整数任何基本的整数类型。 |
%E,%E,%F,%F,%G,%G | 格式化使用C风格浮点格式规范格式化的任何基本浮点类型(float,float32)。 |
%E,%E | 格式具有形式的符号值[ - ] d.dddde [星座] DDD其中d是一个十进制数,dddd为一个或多个十进制数字,ddd肯定三个十进制数字,符号为+或 - 。 |
%F | 有格式化的形式符号值[ - ] dddd.dddd,其中dddd是一个或多个十进制数字。的小数点之前数量取决于数的大小,和数字的小数点后的数量取决于所要求的精度。 |
%G,%G | 格式化f中或电子格式打印的符号值,取其对给定值和精度更紧凑。 |
%M | 格式化一个十进制值。 |
%O | 格式的任何值,拳击对象,并使用其ToString方法打印。 |
%A,%+ A | 格式的任何值,印有默认的布局设置。使用%+ A打印识别联合的结构与内部和私人交涉。 |
%一个 | 一般格式说明,需要两个参数。第一个参数是一个接受两个参数的函数:第一,适当类型的给定格式化函数的上下文参数(例如,一个TextWriter的),二值打印和输出两种或返回相应的文本。 第二个参数是打印的特殊价值。 |
%T | 一般格式说明符需要一个参数:一个函数,它接受给定格式化函数(aTextWriter)的适当类型的上下文参数,并输出或返回适当的文本。 基本整数类型有byte,sbyte,int16,uint16,int32,uint32,int64,uint64,nativeint和unativeint。 基本浮点类型是float和float32。 |
width是可选参数。它是一个整数,指示结果的最小宽度。例如,%5D打印带有5个字符至少有空格的整数。
有效flags在下表中描述
值 | 描述 |
---|---|
0 | 指定要添加零而不是空格来弥补所需的宽度。 |
- | 指定要左对齐指定宽度内的结果。 |
+ | 指定要添加+字符如果数字为正(匹配 - 符号为负号)。 |
' ' (space) | 指定要添加一个额外的空间,如果该数字为正数(匹配 - 号为负数)。 |
# | 无效。 |
例
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.098f printfn "e: %f" 504.768f printfn "x: %g" 212.098f printfn "y: %g" 504.768f printfn "x: %e" 212.098f printfn "y: %e" 504.768f printfn "True: %b" true
当你编译和执行程序,它产生以下输出
Hello World Hello World Hi, I'm Rohit and I'm a Medical Studentd: 212.098000 e: 504.768000 x: 212.098 y: 504.768 x: 2.120980e+002 y: 5.047680e+002 True: true
Console类
这个类是.NET框架的一部分。它代表了标准的输入,输出和错误控制台应用程序流。
它提供了用于从读出和写入到控制台的各种方法。下表显示的方法 -
方法 | 描述 |
---|---|
Beep() | 播放提示音通过控制台扬声器的声音。 |
Beep(Int32, Int32) | 播放通过控制台扬声器指定的频率和持续时间的蜂鸣声。 |
Clear | 清除控制台缓冲区和显示信息对应的控制台窗口。 |
MoveBufferArea(Int32, Int32, Int32, Int32, Int32, Int32) | 复制屏幕缓冲区到指定目标区域的指定源区域。 |
MoveBufferArea(Int32, Int32, Int32, Int32, Int32, Int32, Char, ConsoleColor, ConsoleColor) | 复制屏幕缓冲区到指定目标区域的指定源区域。 |
OpenStandardError() | 收购标准错误流。 |
OpenStandardError(Int32) | 获得的标准误差流,它被设置为一个特定的缓冲区大小。 |
OpenStandardInput() | 获取标准输入流。 |
OpenStandardInput(Int32) | 获取标准输入流,它被设置为一个特定的缓冲区大小。 |
OpenStandardOutput() | 获取标准输出流。 |
OpenStandardOutput(Int32) | 获取标准输出流,它被设置为一个特定的缓冲区大小。 |
Read | 读取从标准输入流中的下一个字符。 |
ReadKey() | 获得由用户按下的下一个字符或功能键。按键显示在控制台窗口。 |
ReadKey(Boolean) | 获得由用户按下的下一个字符或功能键。按键可选地显示在控制台窗口。 |
ReadLine | 读取字符从标准输入流的下一行。 |
ResetColor | 设置前景色和背景色控制台到默认值。 |
SetBufferSize | 设置高度和屏幕缓冲区域的宽度设置为指定值。 |
SetCursorPosition | 将光标的位置。 |
SetError | 设置错误属性设置为指定的TextWriter对象。 |
SetIn | 设置在属性设置为指定的TextReader对象。 |
SetOut | 设置输出属性设置为指定的TextWriter对象。 |
SetWindowPosition | 设置相对于屏幕缓冲区的控制台窗口的位置。 |
SetWindowSize | 设置高度和控制台窗口的宽度为指定的值。 |
Write(Boolean) | 将指定的布尔值标准输出流的文本表示。 |
Write(Char) | 将指定的Unicode字符值到标准输出流。 |
Write(Char[]) | 将指定的Unicode字符数组的标准输出流。 |
Write(Decimal) | 将指定的十进制值到标准输出流的文本表示。 |
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) | 将指定十进制值的文本表示,后跟当前行终止,标准输出流。 |
WriteLine(Double) | 将指定的双精度浮点值的文本表示,后跟当前行终止,标准输出流。 |
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) | 将指定对象的文本表示,后跟当前行终止符,使用指定的格式信息标准输出流。 |
WriteLine(String, Object, Object, Object) | 将指定对象的文本表示,后跟当前行终止符,使用指定的格式信息标准输出流。 |
WriteLine(String, Object, Object, Object, Object) | 将指定对象和可变长度参数列表的文本表示,后跟当前行终止符,使用指定的格式信息标准输出流。 |
以下示例演示从控制台读取和写入
例
open System let main() = Console.Write("What's your name? ") let name = Console.ReadLine() Console.Write("Hello, {0} ", 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? Kabir Hello, Kabir Big Greetings from TutorialsPoint and Absoulte Classes |2015-Jan-05|
System.IO命名空间
System.IO命名空间包含了用于执行基本I / O各种有用的类。
它包含了允许读取和写入文件和数据流,并提供基本的文件和目录支持的类型类型或类。
类与文件系统的工作有用的
- 有System.IO.File类是用于创建,添加和删除文件。
- System.IO.Directory类用于创建,移动和删除目录。
- System.IO.Path类执行对字符串的操作,它代表的文件路径。
- System.IO.FileSystemWatcher类允许用户收听更改目录。
类与流(字节序列)工作有用的
- System.IO.StreamReader类用来从流中读取字符。
- System.IO.StreamWriter类用于写入字符流。
- System.IO.MemoryStream类创建字节的内存流。
下表显示了一个简要说明命名空间提供的所有类
类 | 描述 |
---|---|
BinaryReader | 读取的原始数据类型为在特定的编码的二进制值。 |
BinaryWriter | 以二进制写入原始类型到一个流,并支持一个特定的编码写入字符串。 |
BufferedStream | 添加一个缓冲层读取,而在另一个流写入操作。 |
Directory | 公开用于创建,移动,并通过目录和子目录列举的静态方法。 |
DirectoryInfo | 公开用于创建,移动,并通过目录和子目录列举实例方法。 |
DirectoryNotFoundException | 当一个文件或目录的一部分,不能被发现时引发的异常。 |
DriveInfo | 提供了获取信息的驱动器上。 |
DriveNotFoundException | 尝试访问的驱动器或共享时所引发的异常不可用。 |
EndOfStreamException | 尝试过去流的末尾时,读取时引发的异常。 |
ErrorEventArgs | 对于FileSystemWatcher.Error事件提供数据。 |
File | 提供在创建的FileStream对象的创建,复制,删除,移动,和一个单一的文件的开口静态方法,和助剂。 |
FileFormatException | 当输入文件或理应数据流以符合特定的文件格式规范,所引发的异常格式不正确。 |
FileInfo | 提供了创作的FileStream对象的创建,复制,删除,移动和文件的开放性和实例方法,和艾滋病。 |
FileLoadException | 当一个托管程序集发现被抛出,但无法加载的异常。 |
FileNotFoundException | 当试图访问磁盘出现故障时不存在的文件时引发的异常。 |
FileStream | 围绕公开的文件的码流,支持同步和异步读取和写入操作。 |
FileSystemEventArgs | 提供数据的目录事件 - 改变,创建,删除。 |
FileSystemInfo | 为双方提供的FileInfo和DirectoryInfo的对象的基类。 |
FileSystemWatcher | 侦听到文件系统更改通知并且当一个目录或文件目录中的,变化引发事件。 |
InternalBufferOverflowException | 当内部缓冲区溢出抛出的异常。 |
InvalidDataException | 当一个数据流格式无效时引发的异常。 |
IODescriptionAttribute | 设置说明引用事件,扩展,或财产时,可视化设计器可以显示。 |
IOException | 当发生I / O错误时引发的异常。 |
MemoryStream | 创建一个流的后备存储内存。 |
Path | 执行对包含文件或目录路径信息的String实例操作。这些操作在跨平台的方式进行。 |
PathTooLongException | 当一个路径或文件名超过系统定义的最大长度时引发的异常。 |
PipeException | 当一个命名管道内发生错误时,抛出。 |
RenamedEventArgs | 提供对更名事件数据。 |
Stream | 提供的字节的序列的通用视图。这是一个抽象类。 |
StreamReader | 实现一个TextReader的,从一个特定的编码字节流中读取字符。 |
StreamWriter | 实现了在一个特定的编码写入字符到一个流的TextWriter。要浏览此类.NET框架的源代码,请参考源。 |
StringReader | 实现一个的TextReader从一个字符串读取。 |
StringWriter | 实现了将一个字符串写入信息的TextWriter的。的信息存储在一个基本的StringBuilder。 |
TextReader | 表示一个阅读器,可以读取顺序一系列字符。 |
TextWriter | 表示可以写一个顺序的一系列字符的作家。这是一个抽象类。 |
UnmanagedMemoryAccessor | 提供了从托管代码非托管内存块的随机访问。 |
UnmanagedMemoryStream | 提供了获取从托管代码非托管的内存块。 |
WindowsRuntimeStorageExtensions | 包含在Windows运行时的IStorageFile和IStorageFolder接口开发Windows Store应用程序时,扩展方法。 |
WindowsRuntimeStreamExtensions | 包含在.NET的Windows Store应用程序在Windows运行时流和管理流之间进行转换的扩展方法。 |
例
下面的示例创建一个名为test.txt文件,写有一条消息,从文件中读取文本,并打印在控制台上。
注:要做到这一点所需的代码量是出奇的少
open System.IO // Name spaces can be opened just as modules File.WriteAllText("test.txt", "Hello There Welcome to: Tutorials Point") let msg = File.ReadAllText("test.txt") printfn "%s" msg
当你编译和执行程序,它产生以下输出
Hello There Welcome to: Tutorials Point