/usr/include/tulip/CSVParser.h is in libtulip-dev 4.4.0dfsg2-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 | /*
*
* This file is part of Tulip (www.tulip-software.org)
*
* Authors: David Auber and the Tulip development Team
* from LaBRI, University of Bordeaux 1 and Inria Bordeaux - Sud Ouest
*
* Tulip is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation, either version 3
* of the License, or (at your option) any later version.
*
* Tulip is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
*/
///@cond DOXYGEN_HIDDEN
#ifndef CSVDATALOADER_H_
#define CSVDATALOADER_H_
#include <tulip/tulipconf.h>
#include <tulip/CSVContentHandler.h>
#include <vector>
#include <climits>
#include <QString>
class QTextCodec;
namespace tlp {
class PluginProgress;
/*
* @brief Interface for CSV data parser.
*
* Send the found tokens to the CSVContentHandler interface.
*/
class TLP_QT_SCOPE CSVParser {
public:
virtual ~CSVParser() {}
/**
* @brief Parse the data and send the tokens found to the CSVContentHandler.
*
* Notify the progression of the parsing with the progress object.
**/
virtual bool parse(CSVContentHandler * handler,tlp::PluginProgress* progress=NULL) = 0;
};
/**
* @brief Parse a csv data and send each tokens to the given CSVContentHandler object.
*
* Parse a csv data and send each tokens to the given CSVContentHandler object. Get each line of the file in the given range and parse them. This object skip empty lines.
* Send the found tokens to the CSVContentHandler interface.
* \code
* CSVParser parser(fileName,";","\"","UTF-8",true);
* \/\/Automatically remove quotes.
* CSVContentHandler * handler ;
* parser.parse(handler);
* \endcode
**/
class TLP_QT_SCOPE CSVSimpleParser : public CSVParser {
public:
/**
* @brief Construct a csv simple file parser.
* @param filename The path to the file to import.
* @param separator The separator to use.
* @param textDelimiter If a token is sourrounded by this charater we ignore all the separators found in this token. Useful if a token contains the separator.
* @param firstLine The number of the first line to read. The first line is 0.
* @param lastLine The number of the last line to read.
**/
CSVSimpleParser(const std::string& fileName,const QString &separator=";", const bool mergesep=false, char textDelimiter='"',const std::string& fileEncoding=std::string("UTF-8"),unsigned int firstLine = 0,unsigned int lastLine = UINT_MAX);
virtual ~CSVSimpleParser();
inline std::string fileName()const {
return _fileName;
}
inline void setFileName(const std::string& fileName) {
_fileName = fileName;
}
inline char textDelimiter()const {
return _textDelimiter;
}
inline void setTextDelimiter(char delimiter) {
_textDelimiter = delimiter;
}
inline std::string fileEncoding()const {
return _fileEncoding;
}
inline void setFileEncoding(const std::string& fileEncoding) {
_fileEncoding = fileEncoding;
}
bool parse(CSVContentHandler * handler,tlp::PluginProgress* progress=NULL);
protected:
virtual std::string treatToken(const std::string& token, int row, int column);
private:
void tokenize(const std::string& str, std::vector<std::string>& tokens,
const QString &delimiters, const bool mergedelim, char _textDelimiter, unsigned int numberOfCol);
std::string convertStringEncoding(const std::string& toConvert,QTextCodec* encoder);
/**
* @brief Function to extract a line from a istream. Can handle Linux,Mac and Windows end of line pattern.
**/
bool multiplatformgetline ( std::istream& is, std::string& str );
std::string removeQuotesIfAny(const std::string &s,const std::string& rejectedChars);
std::string _fileName;
QString _separator;
char _textDelimiter;
std::string _fileEncoding;
unsigned int _firstLine;
unsigned int _lastLine;
bool _mergesep;
};
/**
*@brief CSV parser used to invert the token matrix in order to treat rows as columns.
**/
class TLP_QT_SCOPE CSVInvertMatrixParser : public tlp::CSVParser , public tlp::CSVContentHandler {
public:
CSVInvertMatrixParser(CSVParser* parser);
virtual ~CSVInvertMatrixParser();
bool parse(CSVContentHandler *handler, tlp::PluginProgress *progress=NULL);
void begin();
void line(unsigned int row,const std::vector<std::string>& lineTokens);
void end(unsigned int rowNumber, unsigned int columnNumber);
private:
CSVParser *parser;
CSVContentHandler *handler;
std::vector<std::vector<std::string> > columns;
unsigned int maxLineSize;
};
}
#endif /* CSVDATALOADER_H_ */
///@endcond
|