3

私のテキストファイルは次のようになります。

987 10.50   N   50
383 9.500   N   20
224 12.00   N   40

データの2列目だけを読み取りたい。どうすればこれを行うことができますか?

4

4 に答える 4

5

他のものを読まずに 2​​ 番目の列だけを読むことはできません。

できることは、すべてのデータを読み取り、2 番目の列以外をすべて無視することです。たとえば、( を使用して) データ行を読み取り、そこから anと aをstd::getline抽出しますが、 行の と残りの部分は無視します。intdoubleint

于 2013-03-11T18:20:49.993 に答える
5

すべてのデータを読み取り、不要なフィールド (つまり「列」) を破棄する必要があります。含むフォーマット文字列%*dはそれを行っています。

Cでは、次のようなものになる可能性があります (fFILE*ハンドルであると仮定)

 while (!feof(f)) {
    int n=0; double x=0.0; char c[4]; int p=0;
    if (fscanf(f, " %*d %f %*[A-Z] %*d",  &x) < 1)
      break;
    do_something(x);
 }

PS。ジェリー・コフィンのコメントに感謝

于 2013-03-11T18:22:27.917 に答える
2

C89/C90 にはstrtok、ファイルを行ごとに読み取り、列を「スペース」区切り文字で区切ってから、n 番目のトークン (ファイル内のその行の n 番目の列を表す) にアクセスできる機能があります。

strtokで宣言されています

http://cplusplus.com/reference/cstring/

一部の実装には、 と呼ばれるスレッドセーフな再入可能バージョンもありますstrtok_r

于 2013-03-11T18:39:21.153 に答える
1

C++ではstd::istringstream、 include: が必要な の使用を検討できます#include <sstream>。何かのようなもの:

std::ifstream ifs("mydatafile.txt");

std::string line;

while(std::getline(ifs, line)) // read one line from ifs
{
    std::istringstream iss(line); // access line as a stream

    // we only need the first two columns
    int column1;
    float column2;

    iss >> column1 >> column2; // no need to read further

    // do what you will with column2
}

通常のファイルと同じように、入力ストリームstd::istringstreamのように扱うことができます。std::string

iss >> column1 >> column2列データを vaiables に読み込むために使用できます。

于 2014-08-03T09:15:06.497 に答える