CSVFormat.h
Go to the documentation of this file.
1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
2 
3 /*
4  Sonic Visualiser
5  An audio file viewer and annotation editor.
6  Centre for Digital Music, Queen Mary, University of London.
7  This file copyright 2006 Chris Cannam.
8 
9  This program is free software; you can redistribute it and/or
10  modify it under the terms of the GNU General Public License as
11  published by the Free Software Foundation; either version 2 of the
12  License, or (at your option) any later version. See the file
13  COPYING included with this distribution for more information.
14 */
15 
16 #ifndef SV_CSV_FORMAT_H
17 #define SV_CSV_FORMAT_H
18 
19 #include <QString>
20 #include <QStringList>
21 
22 #include <set>
23 #include <map>
24 
25 #include "base/BaseTypes.h"
26 
27 class CSVFormat
28 {
29 public:
30  enum ModelType {
38  };
39 
40  enum TimingType {
43  };
44 
45  enum TimeUnits {
50  };
51 
60  };
61 
62  enum HeaderStatus {
66  };
67 
69  ColumnNumeric = 1, // No non-numeric values were seen in sample
70  ColumnIntegral = 2, // All sampled values were integers
71  ColumnIncreasing = 4, // Sampled values were monotonically increasing
72  ColumnSmall = 8, // All sampled values had magnitude < 1
73  ColumnLarge = 16, // Values "quickly" grew to over 1000
74  ColumnSigned = 32, // Some negative values were seen
75  ColumnNearEmpty = 64, // Nothing in this column beyond first row
76  };
77  typedef unsigned int ColumnQualities;
78 
80  SampleRangeSigned1 = 0, // -1 .. 1
82  SampleRangeSigned32767, // -32768 .. 32767
83  SampleRangeOther // Other/unknown: Normalise on load
84  };
85 
86  CSVFormat() : // arbitrary defaults
90  m_separator(""),
91  m_sampleRate(44100),
92  m_windowSize(1024),
94  m_columnCount(0),
95  m_variableColumnCount(false),
97  m_allowQuoting(true),
99  { }
100 
101  CSVFormat(QString path); // guess format
102 
123  bool guessFormatFor(QString path);
124 
125  ModelType getModelType() const { return m_modelType; }
127  TimeUnits getTimeUnits() const { return m_timeUnits; }
129  int getWindowSize() const { return m_windowSize; }
130  int getColumnCount() const { return m_columnCount; }
132  bool getAllowQuoting() const { return m_allowQuoting; }
134  QChar getSeparator() const {
135  if (m_separator == "") return ',';
136  else return m_separator[0];
137  }
138  // set rather than QSet to ensure a fixed order
139  std::set<QChar> getPlausibleSeparators() const {
140  return m_plausibleSeparators;
141  }
142 
146  void setSeparator(QChar s) { m_separator = s; }
148  void setWindowSize(int s) { m_windowSize = s; }
149  void setColumnCount(int c) { m_columnCount = c; }
151  void setAllowQuoting(bool q) { m_allowQuoting = q; }
153 
154  QList<ColumnPurpose> getColumnPurposes() const;
155  void setColumnPurposes(QList<ColumnPurpose> cl);
156 
157  ColumnPurpose getColumnPurpose(int i) const;
158  void setColumnPurpose(int i, ColumnPurpose p);
159 
160  // only valid if format has been guessed:
161  QList<ColumnQualities> getColumnQualities() const;
162 
163  // only valid if format has been guessed:
164  QList<QStringList> getExample() const { return m_example; }
165  int getMaxExampleCols() const { return m_maxExampleCols; }
166 
167 protected:
171  QString m_separator; // "" or a single char - basically QChar option
172  std::set<QChar> m_plausibleSeparators;
176 
179 
180  std::map<int, ColumnQualities> m_columnQualities;
181  std::map<int, ColumnPurpose> m_columnPurposes;
182  std::map<int, QString> m_columnHeadings;
183 
184  std::map<int, float> m_prevValues;
185 
187 
189 
190  QList<QStringList> m_example;
192 
193  void guessSeparator(QString line);
194  void guessQualities(QString line, int lineno);
195  void guessPurposes();
196  void guessAudioSampleRange();
197 };
198 
199 #endif
double sv_samplerate_t
Sample rate.
Definition: BaseTypes.h:51
CSVFormat()
Definition: CSVFormat.h:86
int m_maxExampleCols
Definition: CSVFormat.h:191
AudioSampleRange getAudioSampleRange() const
Definition: CSVFormat.h:131
HeaderStatus getHeaderStatus() const
Definition: CSVFormat.h:133
void guessSeparator(QString line)
Definition: CSVFormat.cpp:104
int getMaxExampleCols() const
Definition: CSVFormat.h:165
int m_columnCount
Definition: CSVFormat.h:177
std::set< QChar > getPlausibleSeparators() const
Definition: CSVFormat.h:139
sv_samplerate_t m_sampleRate
Definition: CSVFormat.h:173
AudioSampleRange m_audioSampleRange
Definition: CSVFormat.h:186
TimeUnits getTimeUnits() const
Definition: CSVFormat.h:127
std::set< QChar > m_plausibleSeparators
Definition: CSVFormat.h:172
int m_windowSize
Definition: CSVFormat.h:174
void setHeaderStatus(HeaderStatus s)
Definition: CSVFormat.h:152
bool guessFormatFor(QString path)
Guess the format of the given CSV file, setting the fields in this object accordingly.
Definition: CSVFormat.cpp:42
QList< ColumnPurpose > getColumnPurposes() const
Definition: CSVFormat.cpp:535
HeaderStatus m_headerStatus
Definition: CSVFormat.h:175
void setSampleRate(sv_samplerate_t r)
Definition: CSVFormat.h:147
void setSeparator(QChar s)
Definition: CSVFormat.h:146
int getWindowSize() const
Definition: CSVFormat.h:129
void guessQualities(QString line, int lineno)
Definition: CSVFormat.cpp:122
void setWindowSize(int s)
Definition: CSVFormat.h:148
void setAllowQuoting(bool q)
Definition: CSVFormat.h:151
void guessPurposes()
Definition: CSVFormat.cpp:292
std::map< int, ColumnPurpose > m_columnPurposes
Definition: CSVFormat.h:181
ModelType m_modelType
Definition: CSVFormat.h:168
void setModelType(ModelType t)
Definition: CSVFormat.h:143
void setTimingType(TimingType t)
Definition: CSVFormat.h:144
ColumnPurpose getColumnPurpose(int i) const
Definition: CSVFormat.cpp:554
std::map< int, ColumnQualities > m_columnQualities
Definition: CSVFormat.h:180
std::map< int, float > m_prevValues
Definition: CSVFormat.h:184
TimingType m_timingType
Definition: CSVFormat.h:169
sv_samplerate_t getSampleRate() const
Definition: CSVFormat.h:128
QList< QStringList > m_example
Definition: CSVFormat.h:190
void setColumnCount(int c)
Definition: CSVFormat.h:149
void setColumnPurpose(int i, ColumnPurpose p)
Definition: CSVFormat.cpp:564
AudioSampleRange
Definition: CSVFormat.h:79
ModelType getModelType() const
Definition: CSVFormat.h:125
bool getAllowQuoting() const
Definition: CSVFormat.h:132
void setAudioSampleRange(AudioSampleRange r)
Definition: CSVFormat.h:150
TimingType getTimingType() const
Definition: CSVFormat.h:126
void setColumnPurposes(QList< ColumnPurpose > cl)
Definition: CSVFormat.cpp:545
QChar getSeparator() const
Definition: CSVFormat.h:134
std::map< int, QString > m_columnHeadings
Definition: CSVFormat.h:182
bool m_allowQuoting
Definition: CSVFormat.h:188
QString m_separator
Definition: CSVFormat.h:171
unsigned int ColumnQualities
Definition: CSVFormat.h:77
void setTimeUnits(TimeUnits t)
Definition: CSVFormat.h:145
QList< QStringList > getExample() const
Definition: CSVFormat.h:164
bool m_variableColumnCount
Definition: CSVFormat.h:178
void guessAudioSampleRange()
Definition: CSVFormat.cpp:467
TimeUnits m_timeUnits
Definition: CSVFormat.h:170
int getColumnCount() const
Definition: CSVFormat.h:130
QList< ColumnQualities > getColumnQualities() const
Definition: CSVFormat.cpp:570