Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
CSVFormatter Class Reference

Output formatter for CSV output. More...

#include <CSVFormatter.h>

Inheritance diagram for CSVFormatter:
[legend]
Collaboration diagram for CSVFormatter:
[legend]

Public Member Functions

bool closeTag (std::ostream &into, const std::string &comment="")
 Closes the most recently opened tag.
 
 CSVFormatter (const std::string &columnNames, const char separator=';')
 Constructor.
 
OutputFormatterType getType ()
 Returns the type of formatter being used.
 
void openTag (std::ostream &into, const std::string &xmlElement)
 Keeps track of an open XML tag by adding a new element to the stack.
 
void openTag (std::ostream &into, const SumoXMLTag &xmlElement)
 Keeps track of an open XML tag by adding a new element to the stack.
 
void setExpectedAttributes (const SumoXMLAttrMask &expected, const int depth=2)
 Set the expected attributes to write. This is used for tracking which attributes are expected in table like outputs. This should be not necessary but at least in the initial phase of implementing CSV and Parquet it helps a lot to track errors.
 
template<class T >
void writeAttr (std::ostream &into, const std::string &attr, const T &val, const bool isNull)
 
template<class T >
void writeAttr (std::ostream &into, const SumoXMLAttr attr, const T &val, const bool isNull)
 writes a named attribute
 
virtual void writePadding (std::ostream &into, const std::string &val)
 Writes some whitespace to format the output. This method is only implemented for XML output.
 
virtual void writePreformattedTag (std::ostream &into, const std::string &val)
 Writes a preformatted tag to the device but ensures that any pending tags are closed. This method is only implemented for XML output.
 
void writeTime (std::ostream &, const SumoXMLAttr attr, const SUMOTime val)
 
virtual bool writeXMLHeader (std::ostream &into, const std::string &rootElement, const std::map< SumoXMLAttr, std::string > &attrs, bool writeMetadata, bool includeConfig)
 Writes an XML header with optional configuration.
 
bool wroteHeader () const
 Returns whether a header has been written. Useful to detect whether a file is being used by multiple sources.
 
virtual ~CSVFormatter ()
 Destructor.
 

Private Member Functions

void checkAttr (const SumoXMLAttr attr)
 Helper function to keep track of the written attributes and accumulate the header. It checks whether the written attribute is expected in the column based format. The check does only apply to the deepest level of the XML hierarchy and not to the order of the columns just to the presence.
 
template<class ATTR_TYPE >
void checkHeader (const ATTR_TYPE &attr)
 

Private Attributes

std::vector< std::string > myBufferedRows
 partial rows buffered before the schema is known (depth < myMaxDepth)
 
bool myCheckColumns = false
 whether the columns should be checked for completeness
 
std::string myCurrentTag
 the currently read tag (only valid when generating the header)
 
SumoXMLAttrMask myExpectedAttrs
 which CSV columns are expected (just for checking completeness)
 
std::vector< std::string > myHeader
 the CSV header
 
const std::string myHeaderFormat
 the format to use for the column names
 
int myMaxDepth = 2
 the maximum depth of the XML hierarchy (excluding the root element)
 
bool myNeedsWrite = false
 whether any attribute has been written since the last row was emitted
 
SumoXMLAttrMask mySeenAttrs
 which CSV columns have been set (just for checking completeness)
 
const char mySeparator
 The value separator.
 
const OutputFormatterType myType
 the type of formatter being used (XML, CSV, Parquet, etc.)
 
std::vector< std::string > myValues
 the current attribute / column values
 
bool myWroteHeader = false
 whether the CSV header line has been written
 
std::vector< int > myXMLStack
 The number of attributes in the currently open XML elements.
 

Detailed Description

Output formatter for CSV output.

Definition at line 34 of file CSVFormatter.h.

Constructor & Destructor Documentation

◆ CSVFormatter()

CSVFormatter::CSVFormatter ( const std::string &  columnNames,
const char  separator = ';' 
)

Constructor.

Definition at line 34 of file CSVFormatter.cpp.

References myHeaderFormat, and myWroteHeader.

◆ ~CSVFormatter()

virtual CSVFormatter::~CSVFormatter ( )
inlinevirtual

Destructor.

Definition at line 40 of file CSVFormatter.h.

Member Function Documentation

◆ checkAttr()

void CSVFormatter::checkAttr ( const SumoXMLAttr  attr)
inlineprivate

Helper function to keep track of the written attributes and accumulate the header. It checks whether the written attribute is expected in the column based format. The check does only apply to the deepest level of the XML hierarchy and not to the order of the columns just to the presence.

Parameters
[in]attrThe attribute (name)

Definition at line 106 of file CSVFormatter.h.

References checkHeader(), myCheckColumns, myExpectedAttrs, myMaxDepth, mySeenAttrs, myXMLStack, TLF, and toString().

Referenced by writeAttr(), and writeTime().

Here is the caller graph for this function:

◆ checkHeader()

template<class ATTR_TYPE >
void CSVFormatter::checkHeader ( const ATTR_TYPE &  attr)
inlineprivate

Definition at line 117 of file CSVFormatter.h.

References myBufferedRows, myCurrentTag, myHeader, myHeaderFormat, myNeedsWrite, mySeparator, myValues, myWroteHeader, and toString().

Referenced by checkAttr(), and writeAttr().

Here is the caller graph for this function:

◆ closeTag()

bool CSVFormatter::closeTag ( std::ostream &  into,
const std::string &  comment = "" 
)
virtual

Closes the most recently opened tag.

Parameters
[in]intoThe output stream to use
Returns
Whether a further element existed in the stack and could be closed
Todo:
it is not verified that the topmost element was closed

Implements OutputFormatter.

Definition at line 67 of file CSVFormatter.cpp.

References joinToString(), myBufferedRows, myCheckColumns, myHeader, myMaxDepth, myNeedsWrite, mySeenAttrs, mySeparator, myValues, myWroteHeader, myXMLStack, and WRITE_WARNING.

◆ getType()

OutputFormatterType OutputFormatter::getType ( )
inlineinherited

Returns the type of formatter being used.

Returns
the formatter type

Definition at line 150 of file OutputFormatter.h.

References OutputFormatter::myType.

Referenced by OutputDevice::isXML(), OutputDevice::writeAttr(), OutputDevice::writeFuncAttr(), and OutputDevice::writeOptionalAttr().

Here is the caller graph for this function:

◆ openTag() [1/2]

void CSVFormatter::openTag ( std::ostream &  into,
const std::string &  xmlElement 
)
virtual

Keeps track of an open XML tag by adding a new element to the stack.

Parameters
[in]intoThe output stream to use (unused)
[in]xmlElementName of element to open (unused)
Returns
The OutputDevice for further processing

Implements OutputFormatter.

Definition at line 43 of file CSVFormatter.cpp.

References myCurrentTag, myMaxDepth, myValues, myWroteHeader, myXMLStack, and WRITE_WARNINGF.

◆ openTag() [2/2]

void CSVFormatter::openTag ( std::ostream &  into,
const SumoXMLTag xmlElement 
)
virtual

Keeps track of an open XML tag by adding a new element to the stack.

Parameters
[in]intoThe output stream to use (unused)
[in]xmlElementName of element to open (unused)

Implements OutputFormatter.

Definition at line 55 of file CSVFormatter.cpp.

References myCurrentTag, myMaxDepth, myValues, myWroteHeader, myXMLStack, toString(), and WRITE_WARNINGF.

◆ setExpectedAttributes()

void CSVFormatter::setExpectedAttributes ( const SumoXMLAttrMask expected,
const int  depth = 2 
)
inlinevirtual

Set the expected attributes to write. This is used for tracking which attributes are expected in table like outputs. This should be not necessary but at least in the initial phase of implementing CSV and Parquet it helps a lot to track errors.

Parameters
[in]expectedwhich attributes are to be written (at the deepest XML level)
[in]depththe maximum XML hierarchy depth (excluding the root)

Reimplemented from OutputFormatter.

Definition at line 93 of file CSVFormatter.h.

References myCheckColumns, myExpectedAttrs, and myMaxDepth.

◆ writeAttr() [1/2]

template<class T >
void CSVFormatter::writeAttr ( std::ostream &  into,
const std::string &  attr,
const T &  val,
const bool  isNull 
)
inline

Definition at line 78 of file CSVFormatter.h.

References checkHeader(), myCheckColumns, myValues, and toString().

◆ writeAttr() [2/2]

template<class T >
void CSVFormatter::writeAttr ( std::ostream &  into,
const SumoXMLAttr  attr,
const T &  val,
const bool  isNull 
)
inline

writes a named attribute

Parameters
[in]intoThe output stream to use
[in]attrThe attribute (name)
[in]valThe attribute value

Definition at line 72 of file CSVFormatter.h.

References checkAttr(), myValues, and toString().

◆ writePadding()

virtual void OutputFormatter::writePadding ( std::ostream &  into,
const std::string &  val 
)
inlinevirtualinherited

Writes some whitespace to format the output. This method is only implemented for XML output.

Parameters
[in]intoThe output stream to use
[in]valThe whitespace

Reimplemented in PlainXMLFormatter.

Definition at line 136 of file OutputFormatter.h.

References UNUSED_PARAMETER.

Referenced by OutputDevice::writePadding().

Here is the caller graph for this function:

◆ writePreformattedTag()

virtual void OutputFormatter::writePreformattedTag ( std::ostream &  into,
const std::string &  val 
)
inlinevirtualinherited

Writes a preformatted tag to the device but ensures that any pending tags are closed. This method is only implemented for XML output.

Parameters
[in]intoThe output stream to use
[in]valThe preformatted data

Reimplemented in PlainXMLFormatter.

Definition at line 125 of file OutputFormatter.h.

References UNUSED_PARAMETER.

Referenced by OutputDevice::writePreformattedTag().

Here is the caller graph for this function:

◆ writeTime()

void CSVFormatter::writeTime ( std::ostream &  ,
const SumoXMLAttr  attr,
const SUMOTime  val 
)
inlinevirtual

Implements OutputFormatter.

Definition at line 84 of file CSVFormatter.h.

References checkAttr(), myValues, and time2string().

◆ writeXMLHeader()

virtual bool OutputFormatter::writeXMLHeader ( std::ostream &  into,
const std::string &  rootElement,
const std::map< SumoXMLAttr, std::string > &  attrs,
bool  writeMetadata,
bool  includeConfig 
)
inlinevirtualinherited

Writes an XML header with optional configuration.

If something has been written (myXMLStack is not empty), nothing is written and false returned. The default implementation does nothing and returns false.

Parameters
[in]intoThe output stream to use
[in]rootElementThe root element to use
[in]attrsAdditional attributes to save within the rootElement
[in]includeConfigwhether the current config should be included as XML comment
Returns
whether something has been written

Reimplemented in PlainXMLFormatter.

Definition at line 77 of file OutputFormatter.h.

References UNUSED_PARAMETER.

Referenced by OutputDevice::writeXMLHeader().

Here is the caller graph for this function:

◆ wroteHeader()

bool CSVFormatter::wroteHeader ( ) const
inlinevirtual

Returns whether a header has been written. Useful to detect whether a file is being used by multiple sources.

Returns
Whether a header has been written

Implements OutputFormatter.

Definition at line 89 of file CSVFormatter.h.

References myWroteHeader.

Field Documentation

◆ myBufferedRows

std::vector<std::string> CSVFormatter::myBufferedRows
private

partial rows buffered before the schema is known (depth < myMaxDepth)

Definition at line 164 of file CSVFormatter.h.

Referenced by checkHeader(), and closeTag().

◆ myCheckColumns

bool CSVFormatter::myCheckColumns = false
private

whether the columns should be checked for completeness

Definition at line 167 of file CSVFormatter.h.

Referenced by checkAttr(), closeTag(), setExpectedAttributes(), and writeAttr().

◆ myCurrentTag

std::string CSVFormatter::myCurrentTag
private

the currently read tag (only valid when generating the header)

Definition at line 146 of file CSVFormatter.h.

Referenced by checkHeader(), openTag(), and openTag().

◆ myExpectedAttrs

SumoXMLAttrMask CSVFormatter::myExpectedAttrs
private

which CSV columns are expected (just for checking completeness)

Definition at line 170 of file CSVFormatter.h.

Referenced by checkAttr(), and setExpectedAttributes().

◆ myHeader

std::vector<std::string> CSVFormatter::myHeader
private

the CSV header

Definition at line 143 of file CSVFormatter.h.

Referenced by checkHeader(), and closeTag().

◆ myHeaderFormat

const std::string CSVFormatter::myHeaderFormat
private

the format to use for the column names

Definition at line 137 of file CSVFormatter.h.

Referenced by checkHeader(), and CSVFormatter().

◆ myMaxDepth

int CSVFormatter::myMaxDepth = 2
private

the maximum depth of the XML hierarchy (excluding the root element)

Definition at line 155 of file CSVFormatter.h.

Referenced by checkAttr(), closeTag(), openTag(), openTag(), and setExpectedAttributes().

◆ myNeedsWrite

bool CSVFormatter::myNeedsWrite = false
private

whether any attribute has been written since the last row was emitted

Definition at line 161 of file CSVFormatter.h.

Referenced by checkHeader(), and closeTag().

◆ mySeenAttrs

SumoXMLAttrMask CSVFormatter::mySeenAttrs
private

which CSV columns have been set (just for checking completeness)

Definition at line 173 of file CSVFormatter.h.

Referenced by checkAttr(), and closeTag().

◆ mySeparator

const char CSVFormatter::mySeparator
private

The value separator.

Definition at line 140 of file CSVFormatter.h.

Referenced by checkHeader(), and closeTag().

◆ myType

const OutputFormatterType OutputFormatter::myType
privateinherited

the type of formatter being used (XML, CSV, Parquet, etc.)

Definition at line 168 of file OutputFormatter.h.

Referenced by OutputFormatter::getType().

◆ myValues

std::vector<std::string> CSVFormatter::myValues
private

the current attribute / column values

Definition at line 152 of file CSVFormatter.h.

Referenced by checkHeader(), closeTag(), openTag(), openTag(), writeAttr(), writeAttr(), and writeTime().

◆ myWroteHeader

bool CSVFormatter::myWroteHeader = false
private

whether the CSV header line has been written

Definition at line 158 of file CSVFormatter.h.

Referenced by checkHeader(), closeTag(), CSVFormatter(), openTag(), openTag(), and wroteHeader().

◆ myXMLStack

std::vector<int> CSVFormatter::myXMLStack
private

The number of attributes in the currently open XML elements.

Definition at line 149 of file CSVFormatter.h.

Referenced by checkAttr(), closeTag(), openTag(), and openTag().


The documentation for this class was generated from the following files: