F#基本I / O

2018-12-16 10:22 更新

基本輸入輸出包括 

  • 讀取和寫(xiě)入到控制臺(tái)。
  • 讀取和寫(xiě)入到文件中。

Core.Printf模塊

我們已經(jīng)使用了printf和所述printfn功能寫(xiě)入到控制臺(tái)。在本節(jié)中,我們將看看F#的printf的模塊的詳細(xì)信息。

除了上述功能,F(xiàn)#的Core.Printf模塊具有使用%標(biāo)記用作占位符用于打印和格式化各種其它方法。下表顯示了簡(jiǎn)要描述的方法。

描述
bprintf : StringBuilder → BuilderFormat<'T> → 'T打印到一個(gè)StringBuilder。
eprintf : TextWriterFormat<'T> → 'T打印格式化輸出到stderr。
eprintfn : TextWriterFormat<'T> → 'T打印格式化輸出到stderr,增加一個(gè)換行符。
failwithf : StringFormat<'T,'Result> → 'T打印到一個(gè)字符串緩沖區(qū),提高與給定結(jié)果的異常。
fprintf : TextWriter → TextWriterFormat<'T> → 'T打印到一個(gè)文本作家。
fprintfn : TextWriter → TextWriterFormat<'T> → 'T打印到文本編寫(xiě),添加一個(gè)換行符。
kbprintf : (unit → 'Result) → StringBuilder → BuilderFormat<'T,'Result> → 'T就像bprintf一樣,但是調(diào)用指定的函數(shù)來(lái)生成結(jié)果。
kfprintf : (unit → 'Result) → TextWriter → TextWriterFormat<'T,'Result> → 'T就像fprintf,但是調(diào)用指定的函數(shù)來(lái)生成結(jié)果。
kprintf : (string → 'Result) → StringFormat<'T,'Result> → 'T如printf,而是調(diào)用指定的函數(shù)生成的結(jié)果。例如,這些讓印刷力的沖洗后的所有輸出已輸入到信道,而不是之前。
ksprintf : (string → 'Result) → StringFormat<'T,'Result> → 'T像sprintf一樣,但調(diào)用指定的函數(shù)來(lái)生成結(jié)果。
printf : TextWriterFormat<'T> → 'T打印格式化輸出到標(biāo)準(zhǔn)輸出。
printfn : TextWriterFormat<'T> → 'T打印格式化輸出到標(biāo)準(zhǔn)輸出,增加一個(gè)換行符。
sprintf : StringFormat<'T> → 'T打印到一個(gè)字符串使用內(nèi)部字符串緩沖區(qū)并返回結(jié)果為一個(gè)字符串。

格式規(guī)范

格式規(guī)范用來(lái)格式化輸入或輸出,可根據(jù)程序員的需要。

這些都是標(biāo)志%顯示格式的占位符的字符串。

格式占位符的語(yǔ)法是 

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

類型被解釋為

類型描述
%b格式化為bool,格式為truefalse。
%C格式化字符。
%S格式化一個(gè)字符串,格式為其內(nèi)容,而不解釋任何轉(zhuǎn)義字符。
%D,%I格式格式化為十進(jìn)制整數(shù)任何基本的整數(shù)類型,如果基本的整數(shù)類型的簽署。
%U格式化格式化為一個(gè)無(wú)符號(hào)十進(jìn)制整數(shù)任何基本的整數(shù)類型。
%X格式格式化為無(wú)符號(hào)十六進(jìn)制整數(shù)任何基本的整數(shù)類型,使用A到F小寫(xiě)字母。
%X格式格式化為無(wú)符號(hào)十六進(jìn)制整數(shù)任何基本的整數(shù)類型,從A到F使用大寫(xiě)字母
%ο格式化格式化為一個(gè)無(wú)符號(hào)的八進(jìn)制整數(shù)任何基本的整數(shù)類型。
%E,%E,%F,%F,%G,%G格式化使用C風(fēng)格浮點(diǎn)格式規(guī)范格式化的任何基本浮點(diǎn)類型(float,float32)。
%E,%E格式具有形式的符號(hào)值[ - ] d.dddde [星座] DDD其中d是一個(gè)十進(jìn)制數(shù),dddd為一個(gè)或多個(gè)十進(jìn)制數(shù)字,ddd肯定三個(gè)十進(jìn)制數(shù)字,符號(hào)為+或 - 。
%F有格式化的形式符號(hào)值[ - ] dddd.dddd,其中dddd是一個(gè)或多個(gè)十進(jìn)制數(shù)字。的小數(shù)點(diǎn)之前數(shù)量取決于數(shù)的大小,和數(shù)字的小數(shù)點(diǎn)后的數(shù)量取決于所要求的精度。
%G,%G格式化f中或電子格式打印的符號(hào)值,取其對(duì)給定值和精度更緊湊。
%M格式化一個(gè)十進(jìn)制值。
%O格式的任何值,拳擊對(duì)象,并使用其ToString方法打印。
%A,%+ A格式的任何值,印有默認(rèn)的布局設(shè)置。使用%+ A打印識(shí)別聯(lián)合的結(jié)構(gòu)與內(nèi)部和私人交涉。
%一個(gè)

一般格式說(shuō)明,需要兩個(gè)參數(shù)。第一個(gè)參數(shù)是一個(gè)接受兩個(gè)參數(shù)的函數(shù):第一,適當(dāng)類型的給定格式化函數(shù)的上下文參數(shù)(例如,一個(gè)TextWriter的),二值打印和輸出兩種或返回相應(yīng)的文本。

第二個(gè)參數(shù)是打印的特殊價(jià)值。

%T一般格式說(shuō)明符需要一個(gè)參數(shù):一個(gè)函數(shù),它接受給定格式化函數(shù)(aTextWriter)的適當(dāng)類型的上下文參數(shù),并輸出或返回適當(dāng)?shù)奈谋尽?基本整數(shù)類型有byte,sbyte,int16,uint16,int32,uint32,int64,uint64,nativeint和unativeint。 基本浮點(diǎn)類型是float和float32。

width是可選參數(shù)。它是一個(gè)整數(shù),指示結(jié)果的最小寬度。例如,%5D打印帶有5個(gè)字符至少有空格的整數(shù)。

有效flags在下表中描述

描述
0指定要添加零而不是空格來(lái)彌補(bǔ)所需的寬度。
-指定要左對(duì)齊指定寬度內(nèi)的結(jié)果。
+指定要添加+字符如果數(shù)字為正(匹配 - 符號(hào)為負(fù)號(hào))。
' ' (space)指定要添加一個(gè)額外的空間,如果該數(shù)字為正數(shù)(匹配 - 號(hào)為負(fù)數(shù))。
無(wú)效。

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

當(dāng)你編譯和執(zhí)行程序,它產(chǎn)生以下輸出 

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類

這個(gè)類是.NET框架的一部分。它代表了標(biāo)準(zhǔn)的輸入,輸出和錯(cuò)誤控制臺(tái)應(yīng)用程序流。

它提供了用于從讀出和寫(xiě)入到控制臺(tái)的各種方法。下表顯示的方法 -

方法描述
Beep()播放提示音通過(guò)控制臺(tái)揚(yáng)聲器的聲音。
Beep(Int32, Int32)播放通過(guò)控制臺(tái)揚(yáng)聲器指定的頻率和持續(xù)時(shí)間的蜂鳴聲。
Clear清除控制臺(tái)緩沖區(qū)和顯示信息對(duì)應(yīng)的控制臺(tái)窗口。
MoveBufferArea(Int32, Int32, Int32, Int32, Int32, Int32)復(fù)制屏幕緩沖區(qū)到指定目標(biāo)區(qū)域的指定源區(qū)域。
MoveBufferArea(Int32, Int32, Int32, Int32, Int32, Int32, Char, ConsoleColor, ConsoleColor)復(fù)制屏幕緩沖區(qū)到指定目標(biāo)區(qū)域的指定源區(qū)域。
OpenStandardError()收購(gòu)標(biāo)準(zhǔn)錯(cuò)誤流。
OpenStandardError(Int32)獲得的標(biāo)準(zhǔn)誤差流,它被設(shè)置為一個(gè)特定的緩沖區(qū)大小。
OpenStandardInput()獲取標(biāo)準(zhǔn)輸入流。
OpenStandardInput(Int32)獲取標(biāo)準(zhǔn)輸入流,它被設(shè)置為一個(gè)特定的緩沖區(qū)大小。
OpenStandardOutput()獲取標(biāo)準(zhǔn)輸出流。
OpenStandardOutput(Int32)獲取標(biāo)準(zhǔn)輸出流,它被設(shè)置為一個(gè)特定的緩沖區(qū)大小。
Read讀取從標(biāo)準(zhǔn)輸入流中的下一個(gè)字符。
ReadKey()獲得由用戶按下的下一個(gè)字符或功能鍵。按鍵顯示在控制臺(tái)窗口。
ReadKey(Boolean)獲得由用戶按下的下一個(gè)字符或功能鍵。按鍵可選地顯示在控制臺(tái)窗口。
ReadLine讀取字符從標(biāo)準(zhǔn)輸入流的下一行。
ResetColor設(shè)置前景色和背景色控制臺(tái)到默認(rèn)值。
SetBufferSize設(shè)置高度和屏幕緩沖區(qū)域的寬度設(shè)置為指定值。
SetCursorPosition將光標(biāo)的位置。
SetError設(shè)置錯(cuò)誤屬性設(shè)置為指定的TextWriter對(duì)象。
SetIn設(shè)置在屬性設(shè)置為指定的TextReader對(duì)象。
SetOut設(shè)置輸出屬性設(shè)置為指定的TextWriter對(duì)象。
SetWindowPosition設(shè)置相對(duì)于屏幕緩沖區(qū)的控制臺(tái)窗口的位置。
SetWindowSize設(shè)置高度和控制臺(tái)窗口的寬度為指定的值。
Write(Boolean)
將指定的布爾值標(biāo)準(zhǔn)輸出流的文本表示。
Write(Char)
將指定的Unicode字符值到標(biāo)準(zhǔn)輸出流。
Write(Char[])
將指定的Unicode字符數(shù)組的標(biāo)準(zhǔn)輸出流。
Write(Decimal)

將指定的十進(jìn)制值到標(biāo)準(zhǔn)輸出流的文本表示。
Write(Double)

將指定的雙精度浮點(diǎn)值到標(biāo)準(zhǔn)輸出流的文本表示。
Write(Int32)
將指定的32位有符號(hào)整數(shù)到標(biāo)準(zhǔn)輸出流的文本表示。
Write(Int64)

將指定的64位有符號(hào)整數(shù)到標(biāo)準(zhǔn)輸出流的文本表示。
Write(Object)
將指定對(duì)象的標(biāo)準(zhǔn)輸出流的文本表示。
Write(Single)
將指定的單精度浮點(diǎn)值到標(biāo)準(zhǔn)輸出流的文本表示。
Write(String)寫(xiě)入指定的字符串值到標(biāo)準(zhǔn)輸出流。
Write(UInt32)將指定的32位無(wú)符號(hào)整型值到標(biāo)準(zhǔn)輸出流的文本表示。
Write(UInt64)將指定的64位無(wú)符號(hào)整型值到標(biāo)準(zhǔn)輸出流的文本表示。
Write(String, Object)寫(xiě)入使用指定的格式信息,將指定對(duì)象的標(biāo)準(zhǔn)輸出流的文本表示。
Write(String, Object[])寫(xiě)入使用指定的格式信息的指定對(duì)象數(shù)組到標(biāo)準(zhǔn)輸出流的文本表示。
Write(Char[], Int32, Int32)寫(xiě)的Unicode字符指定子數(shù)組到標(biāo)準(zhǔn)輸出流。
Write(String, Object, Object)寫(xiě)入使用指定的格式信息,將指定對(duì)象的標(biāo)準(zhǔn)輸出流的文本表示。
Write(String, Object, Object, Object)寫(xiě)入使用指定的格式信息,將指定對(duì)象的標(biāo)準(zhǔn)輸出流的文本表示。
Write(String, Object, Object, Object, Object)寫(xiě)入使用指定的格式信息指定的對(duì)象和可變長(zhǎng)度參數(shù)列表標(biāo)準(zhǔn)輸出流的文本表示。
WriteLine()寫(xiě)當(dāng)前行終止到標(biāo)準(zhǔn)輸出流。
WriteLine(Boolean)將指定布爾值的文本表示,后跟當(dāng)前行終止,標(biāo)準(zhǔn)輸出流。
WriteLine(Char)將指定的Unicode字符,后跟當(dāng)前行終止,值到標(biāo)準(zhǔn)輸出流。
WriteLine(Char[])將指定的Unicode字符數(shù)組,后跟當(dāng)前行終止,標(biāo)準(zhǔn)輸出流。
WriteLine(Decimal)將指定十進(jìn)制值的文本表示,后跟當(dāng)前行終止,標(biāo)準(zhǔn)輸出流。
WriteLine(Double)將指定的雙精度浮點(diǎn)值的文本表示,后跟當(dāng)前行終止,標(biāo)準(zhǔn)輸出流。
WriteLine(Int32)將指定的32位有符號(hào)整數(shù)的文本表示,后跟當(dāng)前行終止,標(biāo)準(zhǔn)輸出流。
WriteLine(Int64)將指定的64位有符號(hào)整數(shù)的文本表示,后跟當(dāng)前行終止,標(biāo)準(zhǔn)輸出流。
WriteLine(Object)將指定對(duì)象的文本表示,后跟當(dāng)前行終止,標(biāo)準(zhǔn)輸出流。
WriteLine(Single)將指定的單精度浮點(diǎn)值的文本表示,后跟當(dāng)前行終止,標(biāo)準(zhǔn)輸出流。
WriteLine(String)寫(xiě)入指定的字符串值,后跟當(dāng)前行終止,標(biāo)準(zhǔn)輸出流。
WriteLine(UInt32)將指定的32位無(wú)符號(hào)整數(shù)的文本表示,后跟當(dāng)前行終止,標(biāo)準(zhǔn)輸出流。
WriteLine(UInt64)將指定的64位無(wú)符號(hào)整數(shù)的文本表示,后跟當(dāng)前行終止,標(biāo)準(zhǔn)輸出流。
WriteLine(String, Object)將指定對(duì)象的文本表示,后跟當(dāng)前行終止符,使用指定的格式信息標(biāo)準(zhǔn)輸出流。
WriteLine(String, Object[])將指定對(duì)象數(shù)組,后跟當(dāng)前行終止符的文本表示,使用指定的格式信息標(biāo)準(zhǔn)輸出流。
WriteLine(Char[], Int32, Int32)寫(xiě)的Unicode字符指定子數(shù)組,后跟當(dāng)前行終止,標(biāo)準(zhǔn)輸出流。
WriteLine(String, Object, Object)將指定對(duì)象的文本表示,后跟當(dāng)前行終止符,使用指定的格式信息標(biāo)準(zhǔn)輸出流。
WriteLine(String, Object, Object, Object)將指定對(duì)象的文本表示,后跟當(dāng)前行終止符,使用指定的格式信息標(biāo)準(zhǔn)輸出流。
WriteLine(String, Object, Object, Object, Object)將指定對(duì)象和可變長(zhǎng)度參數(shù)列表的文本表示,后跟當(dāng)前行終止符,使用指定的格式信息標(biāo)準(zhǔn)輸出流。

以下示例演示從控制臺(tái)讀取和寫(xiě)入

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()

當(dāng)你編譯和執(zhí)行程序,它產(chǎn)生以下輸出 

What's your name? Kabir
Hello, Kabir
Big Greetings from TutorialsPoint and Absoulte Classes
|2015-Jan-05|

System.IO命名空間

System.IO命名空間包含了用于執(zhí)行基本I / O各種有用的類。

它包含了允許讀取和寫(xiě)入文件和數(shù)據(jù)流,并提供基本的文件和目錄支持的類型類型或類。

類與文件系統(tǒng)的工作有用的 

  • 有System.IO.File類是用于創(chuàng)建,添加和刪除文件。
  • System.IO.Directory類用于創(chuàng)建,移動(dòng)和刪除目錄。
  • System.IO.Path類執(zhí)行對(duì)字符串的操作,它代表的文件路徑。
  • System.IO.FileSystemWatcher類允許用戶收聽(tīng)更改目錄。

類與流(字節(jié)序列)工作有用的 

  • System.IO.StreamReader類用來(lái)從流中讀取字符。
  • System.IO.StreamWriter類用于寫(xiě)入字符流。
  • System.IO.MemoryStream類創(chuàng)建字節(jié)的內(nèi)存流。

下表顯示了一個(gè)簡(jiǎn)要說(shuō)明命名空間提供的所有類 

描述
BinaryReader讀取的原始數(shù)據(jù)類型為在特定的編碼的二進(jìn)制值。
BinaryWriter以二進(jìn)制寫(xiě)入原始類型到一個(gè)流,并支持一個(gè)特定的編碼寫(xiě)入字符串。
BufferedStream添加一個(gè)緩沖層讀取,而在另一個(gè)流寫(xiě)入操作。
Directory公開(kāi)用于創(chuàng)建,移動(dòng),并通過(guò)目錄和子目錄列舉的靜態(tài)方法。
DirectoryInfo公開(kāi)用于創(chuàng)建,移動(dòng),并通過(guò)目錄和子目錄列舉實(shí)例方法。
DirectoryNotFoundException當(dāng)一個(gè)文件或目錄的一部分,不能被發(fā)現(xiàn)時(shí)引發(fā)的異常。
DriveInfo提供了獲取信息的驅(qū)動(dòng)器上。
DriveNotFoundException嘗試訪問(wèn)的驅(qū)動(dòng)器或共享時(shí)所引發(fā)的異常不可用。
EndOfStreamException嘗試過(guò)去流的末尾時(shí),讀取時(shí)引發(fā)的異常。
ErrorEventArgs對(duì)于FileSystemWatcher.Error事件提供數(shù)據(jù)。
File提供在創(chuàng)建的FileStream對(duì)象的創(chuàng)建,復(fù)制,刪除,移動(dòng),和一個(gè)單一的文件的開(kāi)口靜態(tài)方法,和助劑。
FileFormatException當(dāng)輸入文件或理應(yīng)數(shù)據(jù)流以符合特定的文件格式規(guī)范,所引發(fā)的異常格式不正確。
FileInfo提供了創(chuàng)作的FileStream對(duì)象的創(chuàng)建,復(fù)制,刪除,移動(dòng)和文件的開(kāi)放性和實(shí)例方法,和艾滋病。
FileLoadException當(dāng)一個(gè)托管程序集發(fā)現(xiàn)被拋出,但無(wú)法加載的異常。
FileNotFoundException當(dāng)試圖訪問(wèn)磁盤(pán)出現(xiàn)故障時(shí)不存在的文件時(shí)引發(fā)的異常。
FileStream圍繞公開(kāi)的文件的碼流,支持同步和異步讀取和寫(xiě)入操作。
FileSystemEventArgs提供數(shù)據(jù)的目錄事件 - 改變,創(chuàng)建,刪除。
FileSystemInfo為雙方提供的FileInfo和DirectoryInfo的對(duì)象的基類。
FileSystemWatcher偵聽(tīng)到文件系統(tǒng)更改通知并且當(dāng)一個(gè)目錄或文件目錄中的,變化引發(fā)事件。
InternalBufferOverflowException當(dāng)內(nèi)部緩沖區(qū)溢出拋出的異常。
InvalidDataException當(dāng)一個(gè)數(shù)據(jù)流格式無(wú)效時(shí)引發(fā)的異常。
IODescriptionAttribute設(shè)置說(shuō)明引用事件,擴(kuò)展,或財(cái)產(chǎn)時(shí),可視化設(shè)計(jì)器可以顯示。
IOException當(dāng)發(fā)生I / O錯(cuò)誤時(shí)引發(fā)的異常。
MemoryStream創(chuàng)建一個(gè)流的后備存儲(chǔ)內(nèi)存。
Path執(zhí)行對(duì)包含文件或目錄路徑信息的String實(shí)例操作。這些操作在跨平臺(tái)的方式進(jìn)行。
PathTooLongException當(dāng)一個(gè)路徑或文件名超過(guò)系統(tǒng)定義的最大長(zhǎng)度時(shí)引發(fā)的異常。
PipeException當(dāng)一個(gè)命名管道內(nèi)發(fā)生錯(cuò)誤時(shí),拋出。
RenamedEventArgs提供對(duì)更名事件數(shù)據(jù)。
Stream提供的字節(jié)的序列的通用視圖。這是一個(gè)抽象類。
StreamReader實(shí)現(xiàn)一個(gè)TextReader的,從一個(gè)特定的編碼字節(jié)流中讀取字符。
StreamWriter實(shí)現(xiàn)了在一個(gè)特定的編碼寫(xiě)入字符到一個(gè)流的TextWriter。要瀏覽此類.NET框架的源代碼,請(qǐng)參考源。
StringReader實(shí)現(xiàn)一個(gè)的TextReader從一個(gè)字符串讀取。
StringWriter實(shí)現(xiàn)了將一個(gè)字符串寫(xiě)入信息的TextWriter的。的信息存儲(chǔ)在一個(gè)基本的StringBuilder。
TextReader表示一個(gè)閱讀器,可以讀取順序一系列字符。
TextWriter表示可以寫(xiě)一個(gè)順序的一系列字符的作家。這是一個(gè)抽象類。
UnmanagedMemoryAccessor提供了從托管代碼非托管內(nèi)存塊的隨機(jī)訪問(wèn)。
UnmanagedMemoryStream提供了獲取從托管代碼非托管的內(nèi)存塊。
WindowsRuntimeStorageExtensions包含在Windows運(yùn)行時(shí)的IStorageFile和IStorageFolder接口開(kāi)發(fā)Windows Store應(yīng)用程序時(shí),擴(kuò)展方法。
WindowsRuntimeStreamExtensions包含在.NET的Windows Store應(yīng)用程序在Windows運(yùn)行時(shí)流和管理流之間進(jìn)行轉(zhuǎn)換的擴(kuò)展方法。

下面的示例創(chuàng)建一個(gè)名為test.txt文件,寫(xiě)有一條消息,從文件中讀取文本,并打印在控制臺(tái)上。

注:要做到這一點(diǎn)所需的代碼量是出奇的少

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

當(dāng)你編譯和執(zhí)行程序,它產(chǎn)生以下輸出 

Hello There
Welcome to:
Tutorials Point
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)