#include "DelimitedTextReader.h" #include #include #include #include #include #include "CommonFunction.h" namespace pst { DelimitedTextReader::DelimitedTextReader(QObject* parent) : QObject(parent) , m_filePath() , m_reader(vtkDelimitedTextReader::New()) , m_shouldAddHeader(false) , m_table(nullptr) , m_XTitles{} , m_YTitles{} { } DelimitedTextReader::~DelimitedTextReader() { m_reader->Delete(); } void DelimitedTextReader::SetFilePath(const QString &filePath) { m_filePath = filePath; } void DelimitedTextReader::SetHaveHeaders(bool haveHeaders) { m_reader->SetHaveHeaders(haveHeaders); } void DelimitedTextReader::SetFieldDelimiterCharacters(const QString &flag) { m_reader->SetFieldDelimiterCharacters(flag.toStdString().c_str()); } void DelimitedTextReader::AddTableHeaderAuto(bool addHeader) { m_shouldAddHeader = addHeader; } bool DelimitedTextReader::Update() { if (!vtksys::SystemTools::FileExists(m_filePath.toStdString(), true)) { std::cout << "Read 2D text file failed!" << std::endl; std::cout << "File name is "<SetFileName(m_filePath.toStdString().c_str()); m_reader->DetectNumericColumnsOn(); try { m_reader->Update(); } catch (const std::exception& e ) { std::cout << "Read 2D text file failed!" << std::endl; std::cout<GetOutput(); } if(m_table->GetNumberOfColumns()<2||m_table->GetNumberOfRows()<2) { std::cout<<"Error! The table needs at least two rows and two columns!"< DelimitedTextReader::GetXTitles() { return m_XTitles; } std::vector DelimitedTextReader::GetYTitles() { return m_YTitles; } void DelimitedTextReader::AddHeaderFromOriginalTable() { auto tempTable = m_reader->GetOutput(); auto numOfColumes = tempTable->GetNumberOfColumns(); auto numOfRows = tempTable->GetNumberOfRows(); //添加第一列 x轴 vtkNew arrX; arrX->SetName("x"); arrX->SetNumberOfComponents(1); arrX->SetNumberOfTuples(numOfRows); for(int i = 0; iSetValue(i,i); } m_table->AddColumn(arrX); //复制其他列 for(int i =0;iGetColumn(i); arrY->SetName(("y_"+std::to_string(i)).c_str()); m_table->AddColumn(arrY); } } void DelimitedTextReader::GenerateXYTitle() { auto XArrayName = CommonFunction::trim(std::string(m_reader->GetOutput()->GetColumn(0)->GetName())); auto YArrayNameTotal = m_reader->GetOutput()->GetColumn(1)->GetName(); std::vector tempRes; CommonFunction::Stringsplit(YArrayNameTotal, "=", tempRes); auto YArrayName = CommonFunction::trim(tempRes[0]); //phi transform(XArrayName.begin(), XArrayName.end(), XArrayName.begin(), ::toupper); transform(YArrayName.begin(), YArrayName.end(), YArrayName.begin(), ::toupper); if(XArrayName == "THETA" && YArrayName=="PHI") { m_XTitles.push_back(XArrayName); m_XTitles.push_back(YArrayName); m_YTitles.push_back(XArrayName); m_YTitles.push_back(YArrayName); } else { m_XTitles.push_back(XArrayName); m_YTitles.push_back(YArrayName); } } }