从文件中读取字符串

问题:如何从磁盘文件中读取字符串儿,然后按行将其倒序输出?

  下面一段材料取自陈寿《三国志》卷三十五诸葛亮传,我把它分成了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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值