从文件中读取字符串

来源:互联网 发布:天津市教育信息化软件 编辑:程序博客网 时间:2024/05/18 01:13
问题:如何从磁盘文件中读取字符串儿,然后按行将其倒序输出?

  下面一段材料取自陈寿《三国志》卷三十五诸葛亮传,我把它分成了10段,现在要求从磁盘文件中读取这段文字,然后按照一定的规则倒序输出。比如说,如果我要求输出3行,系统会依次输出第10、9、8三行;如果我要求输出20行,则系统会依次输出10、9、8 ... 3、2、1行;如果我要求输出0行,则系统什么也不做。

(01) 自董卓已来,豪杰并起,跨州连郡者不可胜数。 (02) 曹操比于袁绍,则名微而众寡,然操遂能克绍,以弱为强者,非惟天时,抑亦人谋也。 (03) 今操已拥百万之众,挟天子而令诸侯,此诚不可与争锋。 (04) 孙权据有江东,已历三世,国险而民附,贤能为之用,此可以为援而不可图也。 (05) 荆州北据汉、沔,利尽南海,东连吴会,西通巴、蜀,此用武之国,而其主不能守,此殆天所以资将军,将军岂有意乎? (06) 益州险塞,沃野千里,天府之土,高祖因之以成帝业。 (07) 刘璋暗弱,张鲁在北,民殷国富而不知存恤,智能之士思得明君。 (08) 将军既帝室之胄,信义著于四海,总揽英雄,思贤如渴,若跨有荆、益,保其岩阻,西和诸戎,南抚夷越,外结好孙权,内修政理; (09) 天下有变,则命一上将将荆州之军以向宛、洛,将军身率益州之众出于秦川,百姓孰敢不箪食壶浆以迎将军者乎? (10) 诚如是,则霸业可成,汉室可兴矣。

  解决这个问题的思路主要分为两步:首先,从磁盘文件中读取字符串儿,然后再把它存储到一个数组中,并且每一行字符串儿单独作为一个数组元素,最后再将数组元素进行逆转操作;其次,要对要求输出的行数n进行判断,如果n小于总行数,则直接输出n行(也就是n个数组元素),如果n大于等于总行数,则将数组中所有的元素全部输出。用代码表示如下:

func challenge(filePath: String, lineCount: Int) {        // 从磁盘文件中读取字符串儿,并且对文件路径进行校验    guard let input = try? String(contentsOfFile: filePath) else { return }        // 将字符串儿input中的内容存储在数组中,并且每一行内容为一个元素    var lines = input.components(separatedBy: "\n")        // 对文件中的内容进行校验,如果内容为空,则直接返回    guard lines.count > 0 else { return }        // 对数组lines中的元素进行逆转    lines.reverse()        // 取出数组lines中的元素    for i in 0 ..< min(lines.count, lineCount) {        print(lines[i])    }}

  上面的代码必须放在工程文件中进行测试,在Playground中是无法输出的。输入一个大于总行数10的数字,得到的输出结果如下:

测试结果.png
测试结果.png