Я пытаюсь написать программу, которая читает в текстовом файле, содержащем несколько строк из 512 элементов. Это числа, разделенные вкладкой, первая строка файла содержит общую информацию о самом файле. Вот что это выглядит как:Запись QVector в текстовый файл в Qt
512 Измерения, проведенные на: Чт 12 июня 18:35:44 2014 Комментарии: ноль
2,4155 1,60983 1,08339 0 2,13321 0 0,848402 0 0,747692 0 0 0.146487 1.98062 0 0.846876 0 1,87991 0,117494 0 0 0 0 1,6907 0 0 0 0,0671397 0,255635 1,33974 1,4313 1,17494 0 0 0 1,83566 0 2,54826 0 0 0 0 0 1,80819 0 0 0 0 0 4,78523 0 1,00283 0 2,63676 0 2,19272 0,9262844 0,245635 0,762951 0,581369 0 0 0,689708 1,38552 2,38193 1,1391 3,2118 0,712596 0 0.508125 0 0 0 0,842298 0,794995 0.967422 0.820935 0.0534066 2,67338 0
и т.д. и т.п.
Каждый из 512 столбцов представляет отдельный поток данных и строки отбираются со временем. Программа вычисляет интеграл данных так, что он выплескивает вектор с 512 элементами, каждый элемент представляет собой сумму всех данных в соответствующем столбце.
Неотъемлемая часть работает отлично, я могу печатать выходные данные вектора с помощью qDebug, но когда я пытаюсь записать вектор в текстовый файл, я получаю сообщение об ошибке.
Вот код, я использую:
void MainWindow::on_pushButton_clicked()
QVector<double> SingleLineData;
SingleLineData.resize(512);
QString test;
QString inputfile = QFileDialog::getOpenFileName(
this,
tr("Open File"),
"/Users",
"All files (*.*)"
);
if(inputfile != ""){
QFile file(inputfile);
if(!file.open(QFile::ReadOnly)){
}
QTextStream in(&file);
double buffer;
while(!file.atEnd()){
in.readLine();
for(int i=0; i<512; i++){
in >> buffer;
SingleLineData[i]+=buffer;
}
}
}
qDebug() << SingleLineData;
// ************* ************* выходной файл *************************************
QString filename = "/Users/Mitch/Desktop/integral.txt";
QFile fileout(filename);
if (fileout.open(QFile::ReadWrite | QFile::Text)){
}
QTextStream out(&fileout);
out << SingleLineData;
fileout.close();
}
И ошибка принимается:
ошибка: недопустимые операнды для двоичного выражения ('QTextStream' и «QVector») и Функция кандидата не жизнеспособна: неизвестное преобразование из «QVector» в «const void *» для 1-го аргумента; введите адрес аргумента с & QTextStream & оператор < < (const void * ptr);
Любая помощь была бы высоко оценена! :)
Спасибо melevan, что, похоже, решила ошибку. Я думаю, что выход будет шестнадцатеричным, любой способ преобразовать его в обычный текст/регулярные числа? Вот пример вывода: 0x7fd09306a0180x7fd09306a0200x7fd09306a0280x7fd09306a0300x7fd09306a0380x7fd09306a0400x7fd09306a0480x7fd09306a0500x7fd09306a0580x7fd09306a0600x7fd09306a0680x7fd09306a0700x7fd09306a0780x7fd09306a0800x7fd09306a0880x7fd09306a0900x7fd09306a0980x7fd09306a0a00x7fd09306a0a80x7fd09306a0b00x7fd09306a0b80x7fd09306a0c00x –
Так что я экспериментировал с удалением * перед тем ИТЭР, когда его просто ИТЭР то данные печатаются неправильно в шестнадцатеричном, но с * ITER его штрафом.Являясь довольно новым для C++, я не понимаю, почему использование * заставляет его работать, что-то делать с указателями? Итак, теперь его работа печатает номера, но нет разделителя, так или иначе, чтобы добавить запятую и пробел, как 122112, 12121435, 242425235 и т. Д. И т. Д. –
Хорошо, это было так же просто, как добавление << "," to out << * iter По-прежнему интересно, почему указатель нужен для итера? –