【发布时间】:2022-08-02 21:56:00
【问题描述】:
我想将一组数据保存在 csv 文件中。我注册没有问题。 我的问题是储蓄的形式。所有数据都收集在 A 列中。我总共有 2 个图表,graph1 和 graph2。 Graph1 应该在 A 列中,Graph2 应该在 B 列中。我该如何设置。
这是导出 csv 的代码
void MainWindow::exportArraysToCSV(QStringList labelList, QList < QList < double >> dataColums, QChar sep) {
QString filters(\"CSV files (*.csv);;All files (*.*)\");
QString defaultFilter(\"CSVi files (*.csv)\");
QString fileName = QFileDialog::getSaveFileName(0, \"Save file\", QCoreApplication::applicationDirPath(),
filters, & defaultFilter);
QFile file(fileName);
if (file.open(QFile::WriteOnly | QFile::Append)) {
QTextStream data( & file);
QStringList strList;
foreach(auto label, labelList) {
if (label.length() > 0)
strList.append(\"\\\"\" + label + \"\\\"\");
else
strList.append(\"\");
}
data << strList.join(\",\") << \"\\n\";
int maxRowCount = 0;
foreach(auto column, dataColums)
maxRowCount = qMax(maxRowCount, column.count());
for (int i = 5; i < maxRowCount; ++i) // rows
{
strList.clear();
for (int j = 0; j < 2; ++j) // columns
{
if (i < dataColums[j].count())
strList.append(QString::number(dataColums[j][i], \'f\'));
else
strList.append(\"\\\"\\\" \");
}
data << strList.join(\";\") + \"\\n\";
}
file.close();
}
}
我认为此代码用于连接同一列上的所有数据。我该如何拆分它?
data << strList.join(\",\") << \"\\n\";
这是将日志写入 csv 函数
void Logger::writeLogCSV(QStringList labelList, QList<double> dataList, bool addTime)
{
QTextStream out(logFile);
if (addTime)
{
if (csvLabelsBuffer.contains(\"time\") == false)
csvLabelsBuffer.insert(0, \"time\");
}
if (labelList.count() == 0)
{
qDebug() << \"Empty label list - abort csv write\";
return;
}
bool canAddLabel = false;
for (auto i = 2; i < labelList.count(); ++i)
{
if (csvLabelsBuffer.count() == 2 || csvLabelsBuffer.contains(labelList[i]) == false)
{
canAddLabel = true;
csvLabelsBuffer.append(labelList[i]);
}
}
if (canAddLabel)
{
canAddLabel = false;
QStringList origFile = out.readAll().split(QRegExp(\"[\\r\\n]\"), QString::SplitBehavior::SkipEmptyParts);
for (auto i = 2; i < csvLabelsBuffer.count(); ++i)
out << \"\\\"\" + csvLabelsBuffer[i] + \"\\t\";
out << \"\";
// out << \"\\n\";
if (origFile.length() > 0)
{
while (origFile.first().contains(\"\\\"\"))
origFile.removeFirst();
}
logFile->resize(0); // delete contents !
for (auto i = 2; i < origFile.count(); ++i) // Start from second line (data without first line which contains labels)
out << origFile[i] + \",\";
return;
}
// add Data !
for (auto i = 2; i < csvLabelsBuffer.count(); ++i)
{
out.atEnd(); // ???
int index = labelList.indexOf(csvLabelsBuffer[i]);
if (index >= 0 && index < dataList.count())
out << QString::number(dataList[index], \'f\') + \",\";
else if (csvLabelsBuffer[i] == \"time\")
out << QDateTime::currentDateTimeUtc().toString(\"yyyy-MM-ddTHH:MM:ss.zzzZ\") + \',\';
}
out << \"\\n \\n\";
}
-
你的问题对我来说有点难以理解。
-
抱歉,我忘了添加 csv 文件的图片。在编辑问题中
-
无法重现(在清除它以实际使“可重现”之后)。使用示例数据
QList<QList<double>> dataColums({{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}});,您的代码在第一列打印 1-5,在第二列打印 6-10(当然从 0 迭代,而不是从 5 迭代)。 -
但是您在图片中显示的是 Excel 如何打开您的文件,可能与正确/不正确的文件内容无关(看起来不错,值以逗号分隔)。不知道为什么,也许是一些语言环境配置。无论如何,对于 excel,您还可以打开一个空白文档并使用“数据导入”功能,您可以在其中指定数据格式。
-
我需要将逗号后的那些分配给B graph1,逗号后的应该留在A graph2中,逗号后的应该留在B中。
标签: c++ qt split export-to-csv