首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用StreamReader读取多行StreamReader.Peek

用StreamReader读取多行StreamReader.Peek
EN

Stack Overflow用户
提问于 2014-11-27 10:19:56
回答 3查看 4.3K关注 0票数 0

假设我有以下文件格式(键值对):

代码语言:javascript
复制
Objec1tKey: Object1Value
Object2Key: Object2Value
Object3Key: Object3Value
Object4Key: Object4Value1
Object4Value2
Object4Value3
Object5Key: Object5Value
Object6Key: Object6Value

我正在用StreamReader逐行阅读这一行。对于对象1、2、3、5和6,这不是一个问题,因为整个对象都在一行上,所以可以处理对象。

但是对于对象4,我需要处理多行。我可以使用Peek吗?(MSDN用于Peek:返回下一个可用字符,但不使用它.)。有像Peek这样的方法返回下一行而不是字符吗?

如果我可以使用Peek,那么我的问题是,我是否可以使用Peek两次,这样我就可以读取接下来的两行(或3),直到我知道有一个新的对象(obect 5)需要处理为止?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-11-27 10:25:27

我强烈建议您将IO与行处理完全分开。

与其让处理代码使用StreamReader,不如将其传递给IList<string>IEnumerable<string>.如果您使用IList<string>,那么只需按索引访问行就非常容易了(这样您就可以轻松地跟踪“我正在处理的密钥是从第5行开始的”之类的),但这意味着要么做一些聪明的事情,要么一次读取整个文件。

如果它不是一个大文件,那么仅仅使用File.ReadAllLines将是将文件作为一行列表读取的最简单的方法。

如果它是一个大文件,使用File.ReadLines获得一个IEnumerable<string>,然后您的处理代码需要更聪明一点……例如,它可能希望为它处理的每个键创建一个List<string>,其中包含该键的所有行,并在读取下一个键时让该列表被垃圾收集。

票数 2
EN

Stack Overflow用户

发布于 2014-11-27 10:25:19

现在有了使用Peek的方法,因为它总是只返回流中的"top“字符。它只是读取它,但“不发送”来流它被读取的信息。

Peek停留在同一位置后,将指针总结为流。

例如,如果您使用FileStream,您可以使用Seek返回,但是您没有精确地说明您使用的是哪种类型的流。

票数 0
EN

Stack Overflow用户

发布于 2014-11-27 10:52:26

你可以这样做:

代码语言:javascript
复制
            List<MyObject> objects = new List<MyObject>();
            using (StreamReader sr = new StreamReader(aPath))
            {
                MyObject curObj;
                while (!sr.EndOfStream)
                {
                    string line = sr.ReadLine();
                    if (line.IndexOf(':') >= 0) // or whatever identify the beginning of a new object
                    {
                        curObj = new MyObject(line);
                        objects.Add(curObj);
                    }
                    else
                        curObj.AddAttribute(line);
                }
            }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27168164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档