how i can identify and read the columns of a csv file ?
-
wrote on 1 Jul 2021, 08:23 last edited by
how i can identify and read the columns of a csv file ?
I managed to open the file and identify the first column by : QStringList coordXList;
while (!filelidar.atEnd()) {
QByteArray line = filelidar.readLine();
coordXList.append(line.split(';').first());
QStringList coordXList;
}qDebug() << coordXList;
and I couldn't find how I can identify and read and the other columns how can i do it please
-
how i can identify and read the columns of a csv file ?
I managed to open the file and identify the first column by : QStringList coordXList;
while (!filelidar.atEnd()) {
QByteArray line = filelidar.readLine();
coordXList.append(line.split(';').first());
QStringList coordXList;
}qDebug() << coordXList;
and I couldn't find how I can identify and read and the other columns how can i do it please
@julie546 said in how i can identify and read the columns of a csv file ?:
and I couldn't find how I can identify and read and the other columns how can i do it please
split() gives you a list where you can access elements by their index. So, what is exactly the problem?
-
how i can identify and read the columns of a csv file ?
I managed to open the file and identify the first column by : QStringList coordXList;
while (!filelidar.atEnd()) {
QByteArray line = filelidar.readLine();
coordXList.append(line.split(';').first());
QStringList coordXList;
}qDebug() << coordXList;
and I couldn't find how I can identify and read and the other columns how can i do it please
-
@JonB said in how i can identify and read the columns of a csv file ?:
@julie546
And additonal to @jsulm you are splitting on;
, normally a CSV file elements are separated by,
?the default depends on your region, really.
Some languages use,
as decimal point, than its usually;
as a separator -
-
Lifetime Qt Championwrote on 1 Jul 2021, 08:40 last edited by jsulm 7 Jan 2021, 08:41
@julie546 said in how i can identify and read the columns of a csv file ?:
I can only read the first column but I would need the 2nd and 3rd
Then read them. What is the problem, really?
QStringList elements = line.split(';'); //elements[0] -> first element ("column") //elements[1] -> second element ...
-
@JonB said in how i can identify and read the columns of a csv file ?:
@julie546
And additonal to @jsulm you are splitting on;
, normally a CSV file elements are separated by,
?the default depends on your region, really.
Some languages use,
as decimal point, than its usually;
as a separatorwrote on 1 Jul 2021, 08:45 last edited by JonB 7 Jan 2021, 08:47@J-Hilk said in how i can identify and read the columns of a csv file ?:
Some languages use , as decimal point, than its usually ; as a separator
Gosh, I didn't realize that (the changed separator, and the comma in numbers being what is in the file). So a CSV file containing only numbers, say, is not portable across regions? I assumed they would export/import locale-independent, like C locale. This is bad!
-
how i can identify and read the columns of a csv file ?
I managed to open the file and identify the first column by : QStringList coordXList;
while (!filelidar.atEnd()) {
QByteArray line = filelidar.readLine();
coordXList.append(line.split(';').first());
QStringList coordXList;
}qDebug() << coordXList;
and I couldn't find how I can identify and read and the other columns how can i do it please
wrote on 1 Jul 2021, 08:49 last edited by@julie546 said in how i can identify and read the columns of a csv file ?:
how i can identify and read the columns of a csv file ?
I would suggest you to give qtcsv a try.
This should simplify working with CSV files -
wrote on 1 Jul 2021, 08:53 last edited by JonB 7 Jan 2021, 08:54
@julie546
@KroMignon has just recommended using qtcsv. I recommended same yesterday in post https://forum.qt.io/topic/128052/read-csv-file-values-and-put-these-values-in-a-graph/4 where someone asked about parsing CSV files. have a look at that, there are also other suggestions from a stackoverflow post (https://stackoverflow.com/questions/27318631/parsing-through-a-csv-file-in-qt), depending on how complex your situation is. -
@julie546
@KroMignon has just recommended using qtcsv. I recommended same yesterday in post https://forum.qt.io/topic/128052/read-csv-file-values-and-put-these-values-in-a-graph/4 where someone asked about parsing CSV files. have a look at that, there are also other suggestions from a stackoverflow post (https://stackoverflow.com/questions/27318631/parsing-through-a-csv-file-in-qt), depending on how complex your situation is.wrote on 1 Jul 2021, 13:22 last edited by julie546 7 Jan 2021, 13:23@JonB @KroMignon @jsulm @J-Hilk
thank you for your answer I was able to solve the problem with
coordXList.append (line.split (','). at (0));
coordYList.append (line.split (','). at (1));
but I would like to put these values in a curve using the Qchart
I tried with
QLineSeries * series = new QLineSeries ();
series-> append (coordXList, coordYList);
but I got an error : no matching membre function for call to append
can you help me please -
@JonB @KroMignon @jsulm @J-Hilk
thank you for your answer I was able to solve the problem with
coordXList.append (line.split (','). at (0));
coordYList.append (line.split (','). at (1));
but I would like to put these values in a curve using the Qchart
I tried with
QLineSeries * series = new QLineSeries ();
series-> append (coordXList, coordYList);
but I got an error : no matching membre function for call to append
can you help me please@julie546 said in how i can identify and read the columns of a csv file ?:
but I got an error : no matching membre function for call to append
can you help me pleaseof course,
QLineSeries has 3 overloads- append(qreal , qreal )
- append(const QPointF &)
- append(const QList<QPointF> &)
non of those fit your append(Container<ofSomeType>, Container<ofSomeType>)
-
@julie546 said in how i can identify and read the columns of a csv file ?:
but I got an error : no matching membre function for call to append
can you help me pleaseof course,
QLineSeries has 3 overloads- append(qreal , qreal )
- append(const QPointF &)
- append(const QList<QPointF> &)
non of those fit your append(Container<ofSomeType>, Container<ofSomeType>)
wrote on 1 Jul 2021, 13:32 last edited by julie546 7 Jan 2021, 13:33@J-Hilk so I can't display a graph from a csv file?
-
@JonB @KroMignon @jsulm @J-Hilk
thank you for your answer I was able to solve the problem with
coordXList.append (line.split (','). at (0));
coordYList.append (line.split (','). at (1));
but I would like to put these values in a curve using the Qchart
I tried with
QLineSeries * series = new QLineSeries ();
series-> append (coordXList, coordYList);
but I got an error : no matching membre function for call to append
can you help me pleasewrote on 1 Jul 2021, 13:33 last edited by@julie546 said in how i can identify and read the columns of a csv file ?:
thank you for your answer I was able to solve the problem with
coordXList.append (line.split (','). at (0));
coordYList.append (line.split (','). at (1));This is a dangerous and no effective way to do!
line.split(',')
may return an emptyQStringList
, soline.split (','). at(0)
will crash your application.
And why splitting twice?I would do it like this:
const auto parts = line.split (','); if(parts.size() >= 2) { coordXList.append(parts.at(0)); coordYList.append(parts.at(1)); }
but I would like to put these values in a curve using the Qchart
I tried with
QLineSeries * series = new QLineSeries ();
series-> append (coordXList, coordYList);
but I got an error : no matching membre function for call to append
can you help me pleaseHave you read
QLineSeries::append()
documentation??
There is not overload forQLineSeries::append(QStringList, QStringList)
! -
wrote on 1 Jul 2021, 13:34 last edited by
@julie546 said in how i can identify and read the columns of a csv file ?:
so I can't display a graph from a csv file?
Why not?
You have to convert your value to a compatible type. That's all. -
@julie546 thats not how programming works.
I assume
coordXList
andcoordYList
are string lists ?than you may, and I emphasise may, get away with:
QLineSeries * series = new QLineSeries (); for(int i{0}, j{qMin(coordXList.size(), coordYList.size())}; i<j; i++){ series-> append (coordXList.at(i).toFloat(), coordYList.at(i).toFloat()); }
-
@julie546 thats not how programming works.
I assume
coordXList
andcoordYList
are string lists ?than you may, and I emphasise may, get away with:
QLineSeries * series = new QLineSeries (); for(int i{0}, j{qMin(coordXList.size(), coordYList.size())}; i<j; i++){ series-> append (coordXList.at(i).toFloat(), coordYList.at(i).toFloat()); }
wrote on 1 Jul 2021, 13:46 last edited by julie546 7 Jan 2021, 13:47@J-Hilk yes here is my output ("Y", "0.170138", "0.161089", "0.15901", "0.157898", "0.159706", "0.162481", "0.167204", "0.172876", "0.169802", "0.1677",.....................)
theres an error with series-> append (coordXList.at(i).toFloat(), coordYList.toFloat());
no member named toFloat in QStringList
@KroMignon @J-Hilk can you help me please I am a beginner c ++ I am a student in mechanics but I need qt for my end of study internship -
@J-Hilk yes here is my output ("Y", "0.170138", "0.161089", "0.15901", "0.157898", "0.159706", "0.162481", "0.167204", "0.172876", "0.169802", "0.1677",.....................)
theres an error with series-> append (coordXList.at(i).toFloat(), coordYList.toFloat());
no member named toFloat in QStringList
@KroMignon @J-Hilk can you help me please I am a beginner c ++ I am a student in mechanics but I need qt for my end of study internship@julie546 said in how i can identify and read the columns of a csv file ?:
no member named toFloat in QStringList
typo on my side, fixed it, but you should be able to fix that as well
-
@J-Hilk yes here is my output ("Y", "0.170138", "0.161089", "0.15901", "0.157898", "0.159706", "0.162481", "0.167204", "0.172876", "0.169802", "0.1677",.....................)
theres an error with series-> append (coordXList.at(i).toFloat(), coordYList.toFloat());
no member named toFloat in QStringList
@KroMignon @J-Hilk can you help me please I am a beginner c ++ I am a student in mechanics but I need qt for my end of study internshipwrote on 1 Jul 2021, 13:59 last edited by KroMignon 7 Jan 2021, 13:59@julie546 said in how i can identify and read the columns of a csv file ?:
can you help me please I am a beginner c ++ I am a student in mechanics but I need qt for my end of study internship
We have all started as beginner. I have studied electronics, not informatics, so I understand well your problem ;)
The easiest way to create the QLineSeries, is to do it while parsing:
QLineSeries * series = new QLineSeries(); while (!filelidar.atEnd()) { QString line = filelidar.readLine(); const auto parts = line.split (','); if(parts.size() >= 2) { bool ok; qreal x = parts.at(0).toFloat(&ok); if(!ok) continue; qreal y = parts.at(1).toFloat(&ok); if(!ok) continue; series->append(x, y); } }
-
@julie546 said in how i can identify and read the columns of a csv file ?:
can you help me please I am a beginner c ++ I am a student in mechanics but I need qt for my end of study internship
We have all started as beginner. I have studied electronics, not informatics, so I understand well your problem ;)
The easiest way to create the QLineSeries, is to do it while parsing:
QLineSeries * series = new QLineSeries(); while (!filelidar.atEnd()) { QString line = filelidar.readLine(); const auto parts = line.split (','); if(parts.size() >= 2) { bool ok; qreal x = parts.at(0).toFloat(&ok); if(!ok) continue; qreal y = parts.at(1).toFloat(&ok); if(!ok) continue; series->append(x, y); } }
wrote on 1 Jul 2021, 15:00 last edited by julie546 7 Jan 2021, 15:28@KroMignon yes it's really difficult to work in a field that you don't study
thank you for your answer I tried like that but I still have an empty curveif (!filelidar.open(QFile::ReadOnly | QFile::Text) ) {
qDebug() << "File not exists";
} else {QLineSeries * series = new QLineSeries(); while (!filelidar.atEnd()) { QString line = filelidar.readLine(); const auto parts = line.split (','); if(parts.size() >= 2) { bool ok; qreal x = parts.at(0).toFloat(&ok); if(!ok) continue; qreal y = parts.at(1).toFloat(&ok); if(!ok) continue; series->append(x, y); } } QChart *chart = new QChart(); chart->legend()->hide(); chart->addSeries(series); chart->createDefaultAxes(); chart->setTitle("Lidar tg15"); QChartView *chartView = new QChartView(chart); chartView->setRenderHint(QPainter::Antialiasing); QMainWindow window; window.setCentralWidget(chartView); window.resize(1000, 1000); window.show(); /
}
} -
@KroMignon yes it's really difficult to work in a field that you don't study
thank you for your answer I tried like that but I still have an empty curveif (!filelidar.open(QFile::ReadOnly | QFile::Text) ) {
qDebug() << "File not exists";
} else {QLineSeries * series = new QLineSeries(); while (!filelidar.atEnd()) { QString line = filelidar.readLine(); const auto parts = line.split (','); if(parts.size() >= 2) { bool ok; qreal x = parts.at(0).toFloat(&ok); if(!ok) continue; qreal y = parts.at(1).toFloat(&ok); if(!ok) continue; series->append(x, y); } } QChart *chart = new QChart(); chart->legend()->hide(); chart->addSeries(series); chart->createDefaultAxes(); chart->setTitle("Lidar tg15"); QChartView *chartView = new QChartView(chart); chartView->setRenderHint(QPainter::Antialiasing); QMainWindow window; window.setCentralWidget(chartView); window.resize(1000, 1000); window.show(); /
}
}wrote on 1 Jul 2021, 15:07 last edited by Pl45m4 7 Jan 2021, 15:10@julie546 said in how i can identify and read the columns of a csv file ?:
qreal x = parts.at(0).toFloat(&ok);
if(!ok)
continue;
qreal y = parts.at(1).toFloat(&ok);Print the values for
x
andy
and check if these are the values from your file.
The code from @KroMignon doesn't look wrong.
1/49