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
私が欲しい:
- を作成する
vector <float> myValues
- csv
myValues.push_back(x)
の1行目から各値で行う - csv
myValues.push_back(x)
の 2 行目の各値で行う myValues.push_back(x)
3行目以降の各値で行う...など。
ファイルが完全にベクトル myValues に格納されるまで。
私の問題:
x
csvファイルに存在する値を変数に連続して割り当てる方法がわかりません。
どうすればいいですか?
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;
}
}