mirror of
https://github.com/jankae/LibreVNA.git
synced 2026-04-06 15:04:11 +00:00
Move project, add simple test
This commit is contained in:
parent
a58b705f08
commit
8d66770acf
751 changed files with 249345 additions and 0 deletions
120
Software/PC_Application/LibreVNA-GUI/csv.cpp
Normal file
120
Software/PC_Application/LibreVNA-GUI/csv.cpp
Normal file
|
|
@ -0,0 +1,120 @@
|
|||
#include "csv.h"
|
||||
|
||||
#include <exception>
|
||||
#include <fstream>
|
||||
#include <QStringList>
|
||||
#include <iomanip>
|
||||
|
||||
using namespace std;
|
||||
|
||||
CSV::CSV()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
CSV CSV::fromFile(QString filename, char sep)
|
||||
{
|
||||
CSV csv;
|
||||
ifstream file;
|
||||
file.open(filename.toStdString());
|
||||
if(!file.is_open()) {
|
||||
throw runtime_error("Unable to open file:"+filename.toStdString());
|
||||
}
|
||||
string line;
|
||||
bool firstLine = true;
|
||||
while(getline(file, line)) {
|
||||
auto qline = QString::fromStdString(line);
|
||||
auto stringList = qline.split(sep);
|
||||
if(firstLine) {
|
||||
// create columns and set headers
|
||||
for(auto l : stringList) {
|
||||
if(l.isEmpty()) {
|
||||
// header needs to be present, abort here
|
||||
break;
|
||||
}
|
||||
Column c;
|
||||
c.header = l;
|
||||
csv._columns.push_back(c);
|
||||
}
|
||||
firstLine = false;
|
||||
} else {
|
||||
// not the header, attempt to parse data
|
||||
for(unsigned int i=0;i < csv._columns.size();i++) {
|
||||
double value = 0.0;
|
||||
if(i < (unsigned int) stringList.size()) {
|
||||
value = stringList[i].toDouble();
|
||||
}
|
||||
csv._columns[i].data.push_back(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
csv.filename = filename;
|
||||
return csv;
|
||||
}
|
||||
|
||||
void CSV::toFile(QString filename, char sep)
|
||||
{
|
||||
ofstream file;
|
||||
if(!filename.endsWith(".csv")) {
|
||||
filename.append(".csv");
|
||||
}
|
||||
file.open(filename.toStdString());
|
||||
file << setprecision(10);
|
||||
unsigned maxlen = 0;
|
||||
for(auto c : _columns) {
|
||||
file << c.header.toStdString();
|
||||
file << sep;
|
||||
if(c.data.size() > maxlen) {
|
||||
maxlen = c.data.size();
|
||||
}
|
||||
}
|
||||
file << endl;
|
||||
for(unsigned int i=0;i<maxlen;i++) {
|
||||
for(auto c : _columns) {
|
||||
if(i < c.data.size()) {
|
||||
file << c.data[i] << sep;
|
||||
}
|
||||
}
|
||||
file << endl;
|
||||
}
|
||||
file.close();
|
||||
this->filename = filename;
|
||||
}
|
||||
|
||||
std::vector<double> CSV::getColumn(QString header)
|
||||
{
|
||||
for(auto c : _columns) {
|
||||
if(c.header == header) {
|
||||
return c.data;
|
||||
}
|
||||
}
|
||||
throw runtime_error("Header name not found");
|
||||
}
|
||||
|
||||
std::vector<double> CSV::getColumn(unsigned int index)
|
||||
{
|
||||
return _columns.at(index).data;
|
||||
}
|
||||
|
||||
QString CSV::getHeader(unsigned int index)
|
||||
{
|
||||
return _columns.at(index).header;
|
||||
}
|
||||
|
||||
void CSV::addColumn(QString name, const std::vector<double> &data)
|
||||
{
|
||||
Column c;
|
||||
c.header = name;
|
||||
c.data = data;
|
||||
_columns.push_back(c);
|
||||
}
|
||||
|
||||
QString CSV::getFilename() const
|
||||
{
|
||||
return filename;
|
||||
}
|
||||
|
||||
void CSV::setFilename(const QString &value)
|
||||
{
|
||||
filename = value;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue