问题标签 [istream]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3577 浏览

c++ - 混合输入行结尾时的 std::getline 替代

我正在尝试从 a 中读取行,std::istream但输入可能包含'\r' 和/或 '\n',所以std::getline没有用。

很抱歉大喊大叫,但这似乎需要强调......

输入可能包含换行符类型两者

有没有标准的方法来做到这一点?目前我正在尝试

...但这会跳过空格。哦!std::noskipws-需要更多的摆弄,现在它很糟糕。

当然必须有更好的方法?!?

0 投票
1 回答
1595 浏览

c++ - istream::tellg() 与我的自定义 streambuf 类一起使用时返回 -1?

我正在尝试创建一个istream直接从原始内存缓冲区读取的内容。

我在这里的另一篇文章中找到了一个很好的方法:

然后我istream使用这个创建我的membuf

然后我阅读了使用getline()>>运算符,一切都很棒。但是,我似乎无法使用seekg()回退到缓冲区的开头,并且istream::tellg()总是返回-1.

我是否需要编写更多代码才能使这些工作,或者这注定要失败?

0 投票
3 回答
11547 浏览

c++ - ifstream 的 operator>> 来检测行尾?

我有一个不规则的列表,其中的数据如下所示:

请注意,有些行有 2 个数字,有些行有 3 个数字。目前我的输入代码如下所示

但是,我想忽略只有 2 个数字的行,是否有一个简单的解决方法?(最好不使用字符串操作和转换)

谢谢

0 投票
1 回答
193 浏览

c++ - 使用“CompressedFolder”COM 对象解压

我使用 Win API 解压了一个 zip 存档。该 API 基于 COM 接口;COM 模型可通过CompressFolderCOM 对象访问。

我遇到了以下问题。当我解压缩一个小文件(3.5 MB)时,需要很长时间。我发现这IStream::Read()会导致这个问题。它工作缓慢。我使用一个小缓冲区(1KB)在多次迭代中读取这个文件;如果我使用几乎等于文件大小的缓冲区,那么它的工作速度会更快。

即使缓冲区大小远小于文件大小,我怎样才能让它快速解包?可能吗?我认为这很重要,因为文件可能很大,比如 1 GB。

这是读取文件的代码片段:

我有一个附带问题:有没有方法可以在IStream不读取文件的情况下检测打包文件的大小?

0 投票
5 回答
6158 浏览

c++ - 在 C++ 中仅解析来自 istream 的数字

我有一堆如下所示的输入文件:

我需要编写一个函数,一次解析这些输入一个数字,因此我需要能够按数字分隔输入,例如:8、7、15、0、另一个 0,依此类推。

到目前为止,我想到的唯一方法是使用 istream.get() 来返回下一个字符的 ASCII 码,我可以通过将其转换为 char 来将其转换回其字符格式。然后我会检查字符是否是数字(所以括号被忽略)但是这样,任何双(或三)位数字一次只能读取一个数字。

实现这一目标的最佳方法是什么?

顺便说一句,我必须使用 istream。这是我不允许更改的规范的一部分

谢谢

0 投票
2 回答
1960 浏览

c++ - istream_iterator 在读取字符时忽略 EOF (Ctrl+D)

我正在尝试istream_iterator用于从cin. 我读过按Ctrl+D发送一个EOF结束输入流的字符。不幸的是,它出了点问题。这是我的代码:

我正在运行它并输入:as df,然后按Ctrl+ D。它只输出asd没有最后一个f,然后挂起等待输入。当我键入gh并再次按Ctrl+D时,它最后打印剩余f的,以及g下一个输入的,但又没有最后一个h。当我最终按下Ctrl+D而不输入任何内容时,它会打印剩余的内容h并退出。

我希望它能够读取asdf并退出,因为我已经在第一个序列的末尾按下了Ctrl+ 。D

为什么得到后还在等待输入EOF
为什么它不打印之前读取的最后一个字符EOF
为什么它只在我按Ctrl+D而不输入任何内容时才退出?
这个循环需要如何改变才能以我期望的方式运行?Ctrl(即在输入中获得+序列后立即停止阅读D,无论我之前是否输入过任何内容,并阅读所有字符直到EOF)。

0 投票
1 回答
779 浏览

c++ - std::istream 提取设置失败位无明显原因

我正在创建一个原始类型包装器,它可以使用 boost::lexical_cast 从字符串中设置其值。它工作正常,但由于某种原因 std::istream 提取运算符设置了故障位。以下程序打印:

123.45
例外:ios_base::failbit 设置

但是,如果您注释掉“inStream.exceptions(...”这一行,它会起作用并打印:

123.45
123.45

无论您是否使用 unicode 编译,或者如果您使用 int 或 float 作为 ValueType,都没有什么区别,在任何情况下都会设置故障位。

为什么 std::istream 会认为出了问题?

0 投票
1 回答
436 浏览

c++ - 使用自定义分隔符从文件中读取文本字段

我正在为我正在学习的课程解决一个问题,我们需要将文本从文件读取到字符串的二维表(称为“字符串表 [] []”)。我正在阅读的文本文件格式如下:

Ain el Beida # - # - # OEB # 阿尔及利亚 # 非洲 # F # 42578 # 61997 # 90560 # #

Segbana # - # - # ALI # 贝宁 # 非洲 # F # -1 # 10219 # -1 # #

Skelmersdale # - # - # LAN # England # Europe # F # 42611 # 42104 # 39279 # #

#

如您所见,每个字段由'#'分隔,行尾由2个#表示,文件末尾由3个#表示。我一直在研究隔离每个字段的几种不同方法,以便将其保存到数组中,但到目前为止还没有找到任何适合我的目的的方法。

几个小时以来,我一直在努力解决这个问题,我非常感谢任何关于如何让它发挥作用的建议。

0 投票
4 回答
112 浏览

c++ - 堆栈上的C ++流多态性?

我想做这样的事情:

即,将文本解释为文件名,或者,如果不存在这样的文件,则使用其内容而不是文件的内容。

我当然可以使用std::wistream * inputand then newanddelete来处理实际的流。但是,我必须将所有这些封装在一个类中(构造函数和析构函数,即用于异常安全的适当 RAII)。

在堆栈上还有另一种方法吗?

0 投票
4 回答
1967 浏览

c++ - 来自 istream 的子流

假设我有一个ifstream代表一个包含许多聚合在一起的子文件的大文件。我希望能够istream从代表文件一部分的较大ifstream(给定大小和offest)创建一个“子”,以便其他代码可以从该子流中读取,就好像它是一个独立的istream.

关于我如何做到这一点的任何想法?

编辑 - 我宁愿避免提升。