Чтение переменных из файла txt, c++
Здравствуйте не могу считать данные из файла txt.
Необходимо считать данные из файла in.txt, присвоить их переменным произвести расчет и вывести в out.txt первые 3 числа строки это a,b,c, а следующие 3 числа d,e,f.
проблема заключается в том что в файле in.txt не везде ест пробелы (пропуски между числами есть, но это не пробелы)
in.txt
22.3006 48.6023 9.02775 11.9922 44.0127 0
13.594 50.3196 9.39835 0.457838 45.7965 0
38.5442 71.8578 10.9573 13.4781 55.5796 0
50.1875 50.7744 9.56446 15.4972 45.28 0
29.7052 55.7017 11.3449 14.0485 49.6916 0
37.6103 56.9118 10.032 9.90303 50.0036 0
67.7743 87.2517 10.5497 15.9975 54.8979 0
34.3831 54.5625 12.0519 18.4368 52.0368 0
34.0692 63.1499 10.7447 9.21688 49.9357 0
41.0152 71.1705 9.32704 11.3531 54.045 0

out.txt 22.3006 48.6023 9.02775 11.9922 44.0127 0 13.594 50.3196 9.39835 0.457838 45.7965 0 38.5442 71.8578 10.9573 13.4781 55.5796 0 50.1875 50.7744 9.56446 15.4972 45.28 0 29.7052 55.7017 11.3449 14.0485 49.6916 0 37.6103 56.9118 10.032 9.90303 50.0036 0 67.7743 87.2517 10.5497 15.9975 54.8979 0 34.3831 54.5625 12.0519 18.4368 52.0368 0 34.0692 63.1499 10.7447 9.21688 49.9357 0 41.0152 71.1705 9.32704 11.3531 54.045 0
fstream clear_file("out.txt", ios::out);
clear_file.close();
ofstream outf ("out.txt",ios::app) ;
if (!outf)
{
ShowMessage("Файл не удается открыть");
return;
}
outf
<< "a "
<< "b "
<< "c "
<< "d "
<< "e "
<< "f ";
outf.close();
ifstream infile("in.txt");
if (infile.is_open())
{
int count = 0;
float temp;
while (!infile.eof())
{
infile >> temp;
count++;
}
//В начало файла
infile.seekg(0, ios::beg);
infile.clear();
int count_space = 0;
char symbol;
while (!infile.eof())
{
infile.get(symbol);
if (symbol == ' ') count_space++;
if (symbol == '\n') break;
}
//В начало файла
infile.seekg(0, ios::beg);
infile.clear();
double a, b, c, d, e, f;
int i = 0, j = 0;
int n = count / (count_space + 1);
int m = count_space + 1;
double **x;
x = new double*[n];
for (i = 0; i < n; i++) x[i] = new double[m];
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
infile >> x[i][j];
}
a = x[i][0];
b = x[i][1];
c = x[i][2];
d = x[i][3];
e = x[i][4];
f = x[i][5];// потом считаем, строим график
ofstream outf ("out.txt",ios::app) ;
if (!outf)
{
ShowMessage("Файл не удается открыть");
return;
}
outf
<< a << " "
<< b << " "
<< c << " "
<< d << " "
<< e << " "
<< f << "\n";
outf.close(); // Считываем следующую строку из файла in.txt
}
infile.close();
}
else
{
ShowMessage("файл не удается открыть");
return;
}
Ответы (1 шт):
#include <vector>
#include <fstream>
#include <iostream>
int scan(std::ifstream* in, double* values, size_t count) {
static std::ifstream* in_ptr = nullptr;
if(!in && !in_ptr) { throw std::invalid_argument("Входной поток не может быть незаданным!"); }
if(in) { in_ptr = in; }
if(!values) { return 2; }
if(in_ptr->eof()) { return 1; }
for(size_t i = 0; i < count; ++i) {
while(!in_ptr->eof() && !std::isdigit(in_ptr->peek())) { (void) in_ptr->get(); }
if(in_ptr->eof()) { return 1; }
*in_ptr >> values[i];
}
return 0;
}
int main() {
const size_t SIZE = 6;
double values[SIZE];
std::vector<std::vector<double>> vec;
std::ifstream in("in.txt");
if (!in.is_open()) {
std::cerr << "Не получилось открыть \"in.txt\"!";
return 1;
}
std::ofstream out("out.txt");
if(!out.is_open()) {
std::cerr << "Не получилось открыть \"out.txt\"!";
return 2;
}
out << "a b c d e f\n";
(void) scan(&in, nullptr, 0);
while(!scan(nullptr, &values[0], SIZE)) {
out << values[0];
for(size_t i = 1; i < SIZE; ++i) { out << ' ' << values[i]; }
out << '\n';
vec.push_back(std::vector(&values[0], &values[SIZE]));
}
in.close();
out.close();
return 0;
}
in.txt:
5.67 28334.7 45.67:0.7|9650 0.25
7.8 56 67km89l 7 9
3 4
out.txt:
a b c d e f
5.67 28334.7 45.67 0.7 9650 0.25
7.8 56 67 89 7 9
