1

Windows 7 で Code::Blocks を使用して .cpp ファイルから小さな .exe を作成していますが、初心者です (申し訳ありません!)。

以下が今日の問題です。

セミコロンで区切られた長い整数 (0 から 2^16 まで) を含む .csv ファイルがあり、一連の水平線としてリストされています。

ここでは簡単な例を作成しますが、実際にはファイルは最大 2Go まで大きくなります。

私のファイル wall.csvが次のようなテキストエディタで次のように表示されるとしましょうNotepad++

350;3240;2292;33364;3206;266;290

362;314;244;2726;24342;2362;310

392;326;248;2546;2438;228;314

378;334;274;2842;308;3232;356

不思議なことに、ウィンドウにはこのように表示されますnotepad

350;3240;2292;33364;3206;266;290
362;314;244;2726;24342;2362;310
392;326;248;2546;2438;228;314
378;334;274;2842;308;3232;356

ともかく、

float列の数、行の数、およびファイルからの値を3 つの変数で認識し、宣言するとします。

int col = 7;   // amount of columns
int lines = 4; // amount of lines
float x = 0;     // a variable that will contain a value from the file  

私が欲しい:

  1. を作成するvector <float> myValues
  2. csvmyValues.push_back(x)の1行目から各値で行う
  3. csvmyValues.push_back(x)の 2 行目の各値で行う
  4. myValues.push_back(x)3行目以降の各値で行う...など。

ファイルが完全にベクトル myValues に格納されるまで。

私の問題:

xcsvファイルに存在する値を変数に連続して割り当てる方法がわかりません。

どうすればいいですか?


OK、このコードは動作します (かなりゆっくりですが、OK!):

#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

int col = 1221;   // amount of columns
int lines = 914; // amount of lines
int x = 0;     // a variable that will contain a value from the file

vector <int> myValues;

int main() {

    ifstream ifs ("walls.tif.csv");

    char dummy;
    for (int i = 0; i < lines; ++i){
        for (int i = 0; i < col; ++i){
            ifs >> x;
            myValues.push_back(x);
            // So the dummy won't eat digits
            if (i < (col - 1))
                ifs >> dummy;
        }
    }
    float A = 0;
    float B = col*lines;

    for (size_t i = 0; i < myValues.size(); ++i){

        float C = 100*(A/B);
        A++;
        // display progress and successive x values
        cout << C << "% accomplished, pix = " << myValues[i] <<endl;
    }
}
4

2 に答える 2