/** * FileWriterASCIIATabular.cc * Created on: 21 oct. 2014 * Author: AKKA */ #include "FileWriterASCIITabular.hh" namespace AMDA { namespace ParamOutputImpl { namespace Download { namespace FileWriter { FileWriterASCIITabular::FileWriterASCIITabular(AMDA::Parameters::ParameterManager& pParameterManager) : FileWriterASCIIAbstract(pParameterManager) { } FileWriterASCIITabular::~FileWriterASCIITabular(void) { } std::string FileWriterASCIITabular::getExtension(void) { return "txt"; } std::string FileWriterASCIITabular::getDataFillCharacter(void) { return " "; } std::string FileWriterASCIITabular::getNanString(void) { return "nan"; } void FileWriterASCIITabular::writeBeginFile(void) { //nothing to do } void FileWriterASCIITabular::writeEndFile(void) { //nothing to do } void FileWriterASCIITabular::writeBeginGeneralDescription(void) { //nothing to do } void FileWriterASCIITabular::writeEndGeneralDescription(void) { //nothing to do } void FileWriterASCIITabular::writeErrorInfo(std::string msg) { if (!_outputFile.is_open()) return; _outputFile << msg; } void FileWriterASCIITabular::writeBeginInfoGroup(std::string title, int level) { if (!_outputFile.is_open()) return; if (title.empty() || level > 0) { _outputFile << "#" << std::endl; return; } std::string fullTitle = title; fullTitle += " :"; std::string separatorLine; for (unsigned int i = 0; i < fullTitle.size(); ++i) separatorLine += "-"; _outputFile << "# " << separatorLine << std::endl; _outputFile << "# " << fullTitle << std::endl; _outputFile << "# " << separatorLine << std::endl; } void FileWriterASCIITabular::writeEndInfoGroup(int level) { if (!_outputFile.is_open()) return; if (level == 0) _outputFile << "#" << std::endl; } void FileWriterASCIITabular::writeSingleInfo(std::string key, std::string value, int level) { if (!_outputFile.is_open()) return; std::string prefix; for (int i = 0; i < level; ++i) prefix += " "; std::stringstream ss(value); std::string info_line; bool first_line = true; while(std::getline(ss,info_line,'\n')){ _outputFile << "# " << prefix; if (first_line) { _outputFile << key << " : "; first_line = false; } else { for (int i = 0; i < (int)key.size()+3; ++i) _outputFile << " "; } _outputFile << info_line << std::endl; } } void FileWriterASCIITabular::writeBeginInfoList(std::string /*title*/, int /*level*/) { //nothing to do } void FileWriterASCIITabular::writeEndInfoList(void) { //nothing to do } void FileWriterASCIITabular::writeBeginFieldsDescription(void) { if (!_outputFile.is_open()) return; writeBeginInfoGroup("DATA", 0); _outputFile << "# DATA_COLUMNS : "; } void FileWriterASCIITabular::writeEndFieldsDescription(void) { if (!_outputFile.is_open()) return; _outputFile << std::endl; _outputFile << "#" << std::endl; } void FileWriterASCIITabular::writeFieldDescription(std::string paramId) { if (!_outputFile.is_open()) return; if (_fieldInfoMap[paramId].type != DT_TIME) _outputFile << ", "; if (_fieldInfoMap[paramId].dimSize1 * _fieldInfoMap[paramId].dimSize2 == 1) { //it's a scalar _outputFile << paramId; } else { bool isfirstComponent = true; for (auto component : _fieldInfoMap[paramId].componentsList) { if (!isfirstComponent) _outputFile << ", "; _outputFile << paramId << "[" << component.getDim1Index(); if (_fieldInfoMap[paramId].dimSize2 > 1) _outputFile << "," << component.getDim2Index(); _outputFile << "]"; isfirstComponent = false; } } } void FileWriterASCIITabular::writeBeginData(void) { //nothing to do } void FileWriterASCIITabular::writeEndData(void) { //nothing to do } std::string FileWriterASCIITabular::getDataStartTag(bool /* isTimeData */) { return ""; } std::string FileWriterASCIITabular::getDataStopTag(void) { return ""; } void FileWriterASCIITabular::writeDataRecord(std::string record) { if (!_outputFile.is_open()) return; _outputFile << record << std::endl; } std::string FileWriterASCIITabular::getDataValueSeparator(void) { return ""; } } /* namespace FileWriter */ } /* namespace Download */ } /* namespace ParamOutputImpl */ } /* namespace AMDA */