c# - 如何使用 StreamReader 从第 x 行读取到第 y 行
问题描述
我有一个文本文件,其中包含许多分布在多行的短篇小说。我想一次获取一个故事并将其转换为字符串。
例子:
//Story A
Aaaa AAA aaaaa AAA
Aaa A A aaaa AA aaa
A Aaaa AAA aaaaa A A
//Story B
BBB b BBb BB bbb BB
BBB bb bb bb BB BB
BB bbb BBBB bbbb
如何在不加载故事 B 的情况下获取故事 A 的所有行并将其转换为字符串?(会有很多其他的故事,所以加载它们不是一种选择,因为它会占用大量的 RAM)
解决方案
System.IO 命名空间中的静态文件类有很多方便的方法来处理文件。File.ReadLines 方法将节省内存:
public static System.Collections.Generic.IEnumerable<string> ReadLines (string path);
关键是它逐行读取文件,只保留内存中的当前行(加上当前文件缓冲区,但不是整个文件)。
使用一些 LINQ,您可以获得正确的故事
string storyTitle = "//Story A";
var story = String.Join(Environment.NewLine,
File.ReadLines(theFile)
.SkipWhile(s => s != storyTitle)
.Skip(1) // Skip the current title
.TakeWhile(s => !s.StartsWith("//")) // Next story title
);
我们必须用 跳过当前故事标题.Skip(1)
,否则.TakeWhile
立即停止阅读行。
推荐阅读
- python - 在 Python 中的字符串格式中循环
- php - centos如何安装curl php
- reactjs - 我无法将我的图像文件链接到我的反应文件
- android-sdk-tools - 在 POP OS 20.04 上启动模拟器时 Android Studio 4.0.1 错误“无法找到 adb”
- python - 如何制作具有多个系列和计数的条形图
- c - 使用递归尝试在 c 中创建降序列表时出现问题
- or-tools - 在 Google Or-Tools 上,我们如何在 Vehicles 上设置时间窗口?
- makefile - makefile 调用其他 makefile 的最佳实践
- tensorflow2.0 - 我使用 tensorflow2 识别验证码图像,但发生了一些错误
- javascript - 在鼠标悬停效果中添加2-3张图片