問題タブ [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' and/or '\n'が含まれている可能性があるため、役に立ちstd::getlineません。

叫んで申し訳ありませんが、これは強調する必要があるようです...

入力には、改行タイプまたはその両方が含まれる場合があります。

これを行う標準的な方法はありますか?現時点では私はしようとしている

...しかし、これは空白をスキップします。ああ!std::noskipws--さらにいじる必要があり、今ではお粗末です。

きっともっと良い方法があるに違いない?!?

0 投票する
1 に答える
1595 参照

c++ - istream::tellg() は、カスタム streambuf クラスで使用すると -1 を返しますか?

istream生メモリ バッファから直接読み取るを作成しようとしています。

ここの別の投稿でこれを行う良い方法を見つけました:

次に、istreamこれを使用して作成しますmembuf

getline()次に、 and>>演算子の使用を読みましたが、すべてが素晴らしいものでした。seekg()ただし、バッファの先頭に巻き戻すために使用できないようで、istream::tellg()常に を返します-1

これらを機能させるには、さらにコードを書く必要がありますか、それとも失敗する運命にありますか?

0 投票する
3 に答える
11547 参照

c++ - 行末を検出するifstreamの演算子>>?

データが次のように見える不規則なリストがあります。

Notice that some lines have 2 numbers, some have 3 numbers. Currently I have my input code look like these

However, I want to it ignore lines with only 2 numbers, is there a simple work around for this? (preferably without using string manipulations and conversions)

Thanks

0 投票する
1 に答える
193 参照

c++ - 「CompressedFolder」COMオブジェクトを使用して解凍します

WinAPIを使用してzipアーカイブを解凍します。このAPIはCOMインターフェースに基づいています。COMモデルには、CompressFolderCOMオブジェクトを介してアクセスできます。

次の問題が発生しました。小さなファイル(3.5 MB)を解凍すると、時間がかかります。私はそれIStream::Read()がこの問題の原因であると考えました。ゆっくり動作します。小さなバッファー(1KB)を使用して、このファイルを何度も繰り返し読み取ります。ファイルサイズとほぼ同じバッファを使用すると、はるかに高速に動作します。

バッファサイズがファイルサイズよりもはるかに小さい場合でも、どうすればすばやく解凍できますか?出来ますか?ファイルが大きく、たとえば1 GBになる可能性があるため、これは重要だと思います。

ファイルを読み取るコードのフラグメントは次のとおりです。

私が持っている副次的な質問:ファイルIStreamを読み取らずにパックされたファイルサイズを検出する方法はありますか?

0 投票する
5 に答える
6158 参照

c++ - C++でistreamからの数値のみを解析する

次のような入力ファイルがたくさんあります。

これらの入力を一度に1つの数値で解析する関数を作成する必要があるため、入力を数値で区切ることができる必要があります。たとえば、8、7、15、0、0などです。

これまで考えてきた唯一の方法は、次の文字のASCIIコードを返すistream.get()を使用することです。これは、charにキャストすることで文字形式に戻すことができます。次に、文字が数字であるかどうかを確認します(したがって、角かっこは無視されます)が、このように、2桁(または3桁)の数字は一度に1桁しか読み取られません。

これを達成するための最良の方法は何でしょうか?

ちなみに、私はistreamを使わなければなりません。変更を許可されていないのは仕様の一部です

ありがとう

0 投票する
2 に答える
1960 参照

c++ - 文字を読み取るときにEOF(Ctrl + D)を無視するistream_iterator

istream_iteratorから文字を読み取るために使用しようとしていますcinCtrl+を押すと、入力ストリームを終了Dする文字が送信されることを読みました。EOF残念ながら、問題が発生しています。これが私のコードです:

私はそれを実行して:と入力し、次に+as dfを押します。最後のものなしでのみ出力し、入力を待ってハングします。入力してもう一度+を押すと、最後に残りが印刷され、次の入力からが印刷されますが、最後のはありません。そして、何も入力せずに最後に+を押すと、残りが出力されて終了します。CtrlDasdfghCtrlDfghCtrlDh

この最初のシーケンスの最後ですでに+をasdf押したので、読み取りと終了を期待していました。CtrlD

取得後も入力を待っているのはなぜEOFですか?
前に読み取った最後の文字が印刷されないのはなぜEOFですか?また、前に何も入力せずに+
を押したときにのみ終了するのはなぜですか? このループを期待どおりに動作させるには、どのように変更する必要がありますか?(つまり、前に何かを入力したかどうかに関係なく、入力で+シーケンスを取得した直後に読み取りを停止し、までのすべての文字を読み取ります)。CtrlD
CtrlDEOF

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++ - カスタム区切り文字を使用してファイルからテキストフィールドを読み取る

私は、ファイルから文字列の2Dテーブル('string table [] []'と呼ばれる)にテキストを読み込む必要があるクラスの問題に取り組んでいます。私が読んでいるテキストファイルは次のようにフォーマットされています:

アインエルベイダ#-#-#OEB#アルジェリア#アフリカ#F#42578#61997#90560 ##

セグバナ#-#-#ALI#ベニン#アフリカ#F#-1#10219#-1 ##

スケルマーズデール#-#-#LAN#イングランド#ヨーロッパ#F#42611#42104#39279 ##

ご覧のとおり、各フィールドは「#」で区切られ、行の終わりは2つの#で示され、ファイルの終わりは3つの#で示されます。配列に保存できるように各フィールドを分離するいくつかの異なる方法を検討してきましたが、これまでのところ、私の目的に適したものは見つかりませんでした。

私はこれに数時間頭をぶつけてきました、そしてこれを機能させる方法についてアドバイスをいただければ幸いです。

0 投票する
4 に答える
112 参照

c++ - スタック上のC++ストリームポリモーフィ?

私はこのようなことをしたいと思います:

つまり、テキストをファイル名として解釈するか、そのようなファイルが存在しない場合は、ファイルの内容の代わりにその内容を使用します。

もちろん、実際のストリームにはstd::wistream * inputand thennewとを使用できます。deleteしかし、その場合、これらすべてをクラス (コンストラクターとデストラクター、つまり例外安全のための適切な RAII) にカプセル化する必要があります。

スタックでこれを行う別の方法はありますか?

0 投票する
4 に答える
1967 参照

c++ - istream からのサブストリーム

ifstream一緒に集約された多数のサブファイルを含む大きなファイルを表すがあるとします。他のコードがそのサブストリームから独立istreamした.ifstreamistream

これを達成する方法についてのアイデアはありますか?

編集 - ブーストは避けたいと思います。