問題タブ [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.
c++ - 入力行末が混在する場合の std::getline の代替
a から行を読み込もうとしてstd::istream
いますが、入力に'\r'
and/or '\n'
が含まれている可能性があるため、役に立ちstd::getline
ません。
叫んで申し訳ありませんが、これは強調する必要があるようです...
入力には、改行タイプまたはその両方が含まれる場合があります。
これを行う標準的な方法はありますか?現時点では私はしようとしている
...しかし、これは空白をスキップします。ああ!std::noskipws
--さらにいじる必要があり、今ではお粗末です。
きっともっと良い方法があるに違いない?!?
c++ - istream::tellg() は、カスタム streambuf クラスで使用すると -1 を返しますか?
istream
生メモリ バッファから直接読み取るを作成しようとしています。
ここの別の投稿でこれを行う良い方法を見つけました:
次に、istream
これを使用して作成しますmembuf
:
getline()
次に、 and>>
演算子の使用を読みましたが、すべてが素晴らしいものでした。seekg()
ただし、バッファの先頭に巻き戻すために使用できないようで、istream::tellg()
常に を返します-1
。
これらを機能させるには、さらにコードを書く必要がありますか、それとも失敗する運命にありますか?
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
c++ - 「CompressedFolder」COMオブジェクトを使用して解凍します
WinAPIを使用してzipアーカイブを解凍します。このAPIはCOMインターフェースに基づいています。COMモデルには、CompressFolder
COMオブジェクトを介してアクセスできます。
次の問題が発生しました。小さなファイル(3.5 MB)を解凍すると、時間がかかります。私はそれIStream::Read()
がこの問題の原因であると考えました。ゆっくり動作します。小さなバッファー(1KB)を使用して、このファイルを何度も繰り返し読み取ります。ファイルサイズとほぼ同じバッファを使用すると、はるかに高速に動作します。
バッファサイズがファイルサイズよりもはるかに小さい場合でも、どうすればすばやく解凍できますか?出来ますか?ファイルが大きく、たとえば1 GBになる可能性があるため、これは重要だと思います。
ファイルを読み取るコードのフラグメントは次のとおりです。
私が持っている副次的な質問:ファイルIStream
を読み取らずにパックされたファイルサイズを検出する方法はありますか?
c++ - C++でistreamからの数値のみを解析する
次のような入力ファイルがたくさんあります。
これらの入力を一度に1つの数値で解析する関数を作成する必要があるため、入力を数値で区切ることができる必要があります。たとえば、8、7、15、0、0などです。
これまで考えてきた唯一の方法は、次の文字のASCIIコードを返すistream.get()を使用することです。これは、charにキャストすることで文字形式に戻すことができます。次に、文字が数字であるかどうかを確認します(したがって、角かっこは無視されます)が、このように、2桁(または3桁)の数字は一度に1桁しか読み取られません。
これを達成するための最良の方法は何でしょうか?
ちなみに、私はistreamを使わなければなりません。変更を許可されていないのは仕様の一部です
ありがとう
c++ - 文字を読み取るときにEOF(Ctrl + D)を無視するistream_iterator
istream_iterator
から文字を読み取るために使用しようとしていますcin
。Ctrl+を押すと、入力ストリームを終了Dする文字が送信されることを読みました。EOF
残念ながら、問題が発生しています。これが私のコードです:
私はそれを実行して:と入力し、次に+as df
を押します。最後のものなしでのみ出力し、入力を待ってハングします。入力してもう一度+を押すと、最後に残りが印刷され、次の入力からが印刷されますが、最後のはありません。そして、何も入力せずに最後に+を押すと、残りが出力されて終了します。CtrlDasd
f
gh
CtrlDf
g
h
CtrlDh
この最初のシーケンスの最後ですでに+をasdf
押したので、読み取りと終了を期待していました。CtrlD
取得後も入力を待っているのはなぜEOF
ですか?
前に読み取った最後の文字が印刷されないのはなぜEOF
ですか?また、前に何も入力せずに+
を押したときにのみ終了するのはなぜですか?
このループを期待どおりに動作させるには、どのように変更する必要がありますか?(つまり、前に何かを入力したかどうかに関係なく、入力で+シーケンスを取得した直後に読み取りを停止し、までのすべての文字を読み取ります)。CtrlD
CtrlDEOF
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は何かがうまくいかなかったと思うのでしょうか?
c++ - カスタム区切り文字を使用してファイルからテキストフィールドを読み取る
私は、ファイルから文字列の2Dテーブル('string table [] []'と呼ばれる)にテキストを読み込む必要があるクラスの問題に取り組んでいます。私が読んでいるテキストファイルは次のようにフォーマットされています:
アインエルベイダ#-#-#OEB#アルジェリア#アフリカ#F#42578#61997#90560 ##
セグバナ#-#-#ALI#ベニン#アフリカ#F#-1#10219#-1 ##
スケルマーズデール#-#-#LAN#イングランド#ヨーロッパ#F#42611#42104#39279 ##
#
ご覧のとおり、各フィールドは「#」で区切られ、行の終わりは2つの#で示され、ファイルの終わりは3つの#で示されます。配列に保存できるように各フィールドを分離するいくつかの異なる方法を検討してきましたが、これまでのところ、私の目的に適したものは見つかりませんでした。
私はこれに数時間頭をぶつけてきました、そしてこれを機能させる方法についてアドバイスをいただければ幸いです。
c++ - スタック上のC++ストリームポリモーフィ?
私はこのようなことをしたいと思います:
つまり、テキストをファイル名として解釈するか、そのようなファイルが存在しない場合は、ファイルの内容の代わりにその内容を使用します。
もちろん、実際のストリームにはstd::wistream * input
and thennew
とを使用できます。delete
しかし、その場合、これらすべてをクラス (コンストラクターとデストラクター、つまり例外安全のための適切な RAII) にカプセル化する必要があります。
スタックでこれを行う別の方法はありますか?
c++ - istream からのサブストリーム
ifstream
一緒に集約された多数のサブファイルを含む大きなファイルを表すがあるとします。他のコードがそのサブストリームから独立istream
した.ifstream
istream
これを達成する方法についてのアイデアはありますか?
編集 - ブーストは避けたいと思います。