我在 Windows 7 上使用 Code::Blocks 从 .cpp 文件制作小 .exe,我是初学者(对不起!)
这是今天的问题:
我有一个 .csv 文件,其中包含用分号分隔的长整数(从 0 到 2^16)并列为一系列水平线。
我将在这里做一个简单的例子,但实际上文件可以达到 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
奇怪的是,它在windows中看起来像这样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
反正,
假设我将知道并将在 3 个float
变量中声明列数、行数和文件中的值。
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)
值 - 处理csv第二行中的每个
myValues.push_back(x)
值 - 处理第 3 行中
myValues.push_back(x)
的每个值...等。
直到文件完全存储在向量 myValues 中。
我的问题:
我不知道如何将x
csv 文件中存在的值连续分配给变量。
我该怎么做?
好的,这段代码可以工作(相当缓慢但可以!):
#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;
}
}