Re: Reading an array from file?
fdm wrote:
Hi I have a .txt file containing:
[-0.00231844, -0.02326, 0.0484723, 0.0782189, 0.0917853, 0.119546,
-0.00335514, -0.217619, -0.107065, 0, -0.0329693, -0.148395, 0.104663,
-0.550282, -1.26802, -0.705694, 0.0873308, -0.309962, -0.802861, 0,
0.063379, 0.398289, -1.44105, -1.53938, -1.7608, -1.38484, -0.711425,
-1.10221, -1.59358, 0, 0.298058, -0.564321, -1.91097, -3.58063,
-6.30183, -4.78945, -1.61198, -0.70215, -0.954023, 0, 0.54965, -0.57544,
-2.33652, -6.10376, -4.54323, -4.77601, -4.48725, -0.489267, -0.570523,
0, 0.668925, -0.46068, -2.42157, -4.74326, -12.8757, -6.57763, -1.16318,
-3.09268, -0.411637, 0, 0.0390142, -0.273687, -0.624816, -1.51086,
-2.18197, -1.86934, 0.297622, -1.07632, -0.0820767, 0, 0.0166208,
-0.543326, 0.543721, -1.87936, 1.06337, 0.0752932, -0.0704278,
-0.307334, -0.99684, 0, 0.00486263, -0.12788, -0.25644, -0.491107,
0.201335, -1.09141, -0.694021, -0.24188, -0.212387, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -0.000112593, 0.0110926, 0.0167261, -0.049946, -0.0783788,
-0.0384529, 0.0407556, -0.154947, -0.0463077, 0, -0.0182507, 0.00359299,
0.00784705, 0.270986, 1.90373, 0.0225429, -0.684401, -0.250102,
0.0345052, 0, -0.0636621, -0.364021, -1.0357, -2.70395, -4.77634,
-0.987079, -0.837127, 1.46826, 0.682614, 0, -0.0313031, -0.717254,
-0.545265, -17.2006, -31.0422, -20.0047, -2.02679, -1.18301, 0.0228328,
0, -0.0125886, -4.34123, 0.0787134, -45.9453, -66.6283, -50.7082,
1.52779, -1.68643, -0.339206, 0, 0.65181, -8.32657, 6.24457, -37.9488,
-110.562, -54.1226, 3.39012, -0.0921196, 0.12512, 0, 1.67071, 0.694154,
-3.71556, 9.19359, -8.64445, 14.5316, -1.12059, -0.852576, 0.59615, 0,
0.001542, -0.94513, -0.844656, -6.95102, 1.63441, -5.0893, -3.16847,
1.19829, 0.0257344, 0, -0.186464, -1.54877, 0.321253, 0.403886,
-0.983199, -1.91005, -0.53617, -0.353148, -0.0942512, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0]
Are the brackets part of the file or part of your message showing the
contents of the file?
Now I would like to read this array into a C++ container/array so I can
do something like:
double first = container[0]; // -0.00231844
The number of elements in the file can vary from file to file so I was
thinking of using a std::vector. The below code:
std::vector<std::string> file;
std::string line;
file.clear();
std::ifstream infile (parameters_path.c_str(), std::ios_base::in);
while (getline(infile, line, '\n')) {
file.push_back (line);
}
std::cout << "Read " << file.front() << " lines.\n";
stores the whole array from the file as a single string in the vector.
But I still need to "tokenize" this string into its double parts. Before
throwing myself into cumbersome code
But you already have! Why don't you just read doubles from the file
instead of reading lines and parsing them later?
> I would like to hear if anyone has
a good idea to do this the right way.
// if your file does have the leading bracket:
std::vector<double> values;
while (infile)
{
char dummy_char;
if (infile >> dummy_char)
{
double d;
if (infile >> d)
values.push_back(d);
}
}
// if your file does NOT have the leading bracket:
std::vector<double> values;
while (infile)
{
double d;
if (infile >> d)
values.push_back(d);
char dummy_char;
infile >> dummy_char;
}
And the second variation can probably be used even for the file with the
bracket, I didn't check.
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask