F?;綢 / O

2018-12-16 10:22 更新

基本輸入輸出包括 

  • 讀取和寫入到控制臺。
  • 讀取和寫入到文件中。

Core.Printf模塊

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

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

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

格式規(guī)范

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

這些都是標志%顯示格式的占位符的字符串。

格式占位符的語法是 

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

類型被解釋為

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

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

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

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

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

有效flags在下表中描述

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

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

當你編譯和執(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類

這個類是.NET框架的一部分。它代表了標準的輸入,輸出和錯誤控制臺應(yīng)用程序流。

它提供了用于從讀出和寫入到控制臺的各種方法。下表顯示的方法 -

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

將指定的十進制值到標準輸出流的文本表示。
Write(Double)

將指定的雙精度浮點值到標準輸出流的文本表示。
Write(Int32)
將指定的32位有符號整數(shù)到標準輸出流的文本表示。
Write(Int64)

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

以下示例演示從控制臺讀取和寫入

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

當你編譯和執(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各種有用的類。

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

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

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

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

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

下表顯示了一個簡要說明命名空間提供的所有類 

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

下面的示例創(chuàng)建一個名為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

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

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號