簡體   English   中英

如何在F#中的.txt文件中間添加一行

[英]How to Add a Line to the Middle of a .txt File in F#

我必須為我的一個F#分配在.txt文件的中間添加一行。 該文件是以下格式記錄的學生,每個記錄在文件中都有自己的行:

[姓氏],[姓名],[MiddleInitial],[電話#],[EmailAddress的],[GPA]

(逗號分隔數據項以防萬一)

我需要添加一個姓氏為“常量”的學生(沒有其他學生姓氏為“常數”,這樣可以使事情變得更容易) - 以及他的信息 - 到.txt文件,確保姓氏按字母順序保存。 換句話說,我需要在文件中間添加一個新的學生記錄,而不刪除任何現有記錄,我完全被難倒了。 我不希望(我也不想)有人為我做任務,但我非常感謝一些指示。

有幾種方法可以解決這個問題,目前我們將忽略按姓氏字母排序的棘手問題,以及處理非常大的文件。 你應該學習閱讀編寫文件的不同方法。

open System
open System.IO
let students = @"C:\tmp\students.txt"
let newRec = [|"Constant,Dunham,X,99999,cdx@gmail.com,2.0"|]

students 
|> File.ReadAllLines
|> Array.append newRec
|> Array.sort
|> (fun x -> File.WriteAllLines(students,x))

我相信這段代碼或多或少是不言自明的,但如果您知道需要澄清,請告訴我。

問題的一個重要“特征”是如何讀寫文本文件。

F#Snippets是小片段的好地方,但如果你不完全確定你在尋找什么,那么去那里搜索並不容易。

這里有兩個有用的功能,最初來自Don Syme等人的書:

open System.IO

/// Read all lines from UTF-8 encoded text file as a sequence.
let linesFromFile filename =
    seq { use reader = File.OpenText filename
          while not reader.EndOfStream
             do yield reader.ReadLine () }

/// Create a new UTF-8 encoded text file and
/// write all lines from a sequence to the new file.
let linesTofile filename (lines: string seq) =
    use writer = File.CreateText filename
    for line in lines
     do writer.WriteLine line

然后,您可以專注於編寫一個函數,該函數將采用字符串序列並根據您的喜好對其進行操作。 在偽代碼中:

do linesFromFile inputfilename
   |> myStringSeqFunction
   |> linesTofile outputfilename

警告:在這個例子中,輸入文件和輸出文件是不同的文件; 一旦重要的東西工作,我會在以后的機會解決這個問題,但這是值得注意的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM