15 using namespace Diana;
41 filestream.open(fFilename.c_str(), fstream::in);
42 bool exists = filestream.good();
53 filestream.open(fFilename.c_str(), fstream::in);
54 while(getline(filestream, line))
56 if(line[0]==
'#' && ExcludeComments)
continue;
67 filestream.open(fFilename.c_str(), fstream::in);
68 if(!filestream.good())
return 0;
75 while(getline(filestream, line))
77 if(line[0] ==
'#')
continue;
78 istringstream stream(line);
79 while (stream >> dummy)
82 QVector* qvec =
new QVector(
vec.size());
83 for(
unsigned int i=0; i<
vec.size(); i++)
94 if(endline < startline) endline = this->NumberOfLines(
false);
97 filestream.open(fFilename.c_str(), fstream::in);
98 if(!filestream.good())
return 0;
106 while(getline(filestream, line))
109 if(line[0] ==
'#')
continue;
110 if(LineNumber < startline)
continue;
111 if(LineNumber > endline)
break;
113 istringstream stream(line);
114 for(
int i=0; i<=ColumnNumber; i++)
123 vec.push_back(std::numeric_limits<double>::quiet_NaN());
125 else vec.push_back(dummy);
128 QVector* qvec =
new QVector(
vec.size());
129 for(
unsigned int i=0; i<
vec.size(); i++)
141 if(append) filestream.open(fFilename.c_str(), ofstream::app);
142 else filestream.open(fFilename.c_str(), ofstream::out);
144 if(!filestream.good())
return 0;
146 int NumberElements = outputVector.Size();
147 int NumberWritten = 0;
149 for(
int i=0; i<NumberElements; i++)
151 filestream << outputVector[i] << endl;
152 if(!filestream.fail()) NumberWritten++;
156 return NumberWritten;
162 if(append) filestream.open(fFilename.c_str(), ofstream::app);
163 else filestream.open(fFilename.c_str(), ofstream::out);
165 if(!filestream.good())
return 0;
167 int NumberOfQVectors = outputVectors.size();
168 QVector NumberOfElements(NumberOfQVectors);
169 for(
int i=0; i<NumberOfQVectors; i++)
171 NumberOfElements[i] = outputVectors[i].Size();
173 int MaxSize = int(NumberOfElements.GetMax());
174 int NumberWritten = 0;
176 for(
int i=0; i<MaxSize; i++)
178 for(
int j=0; j<NumberOfQVectors; j++)
180 if(i < NumberOfElements[j])
182 filestream << outputVectors[j][i] <<
'\t';
183 if(!filestream.fail()) NumberWritten++;
194 return NumberWritten;
200 if(append) filestream.open(fFilename.c_str(), ofstream::app);
201 else filestream.open(fFilename.c_str(), ofstream::out);
203 filestream << outputString << flush;
204 bool fail = filestream.fail();
212 if(append) filestream.open(fFilename.c_str(), ofstream::app);
213 else filestream.open(fFilename.c_str(), ofstream::out);
215 filestream << line << endl;
216 bool fail = filestream.fail();
224 filestream.open(fFilename.c_str(), ofstream::app);
226 filestream <<
"# " << comment << endl;
227 bool fail = filestream.fail();
235 filestream.open(fFilename.c_str(), fstream::in);
236 if(!filestream.good())
return 0;
238 int commentsRead = 0;
241 while(getline(filestream, line))
245 if(commentsRead==commentNumber)
249 int commentStartIndex = line.find_first_not_of(
"# ");
250 return line.substr(commentStartIndex);
262 if(endline < startline) endline = this->NumberOfLines(
false);
265 filestream.open(fFilename.c_str(), fstream::in);
266 if(!filestream.good())
return 0;
270 while(startline > LineNumber)
272 getline(filestream, dummy);
280 while(filestream.good())
282 c = filestream.get();
283 if(c==
'\n') LineNumber++;
284 if(LineNumber > endline)
break;
286 if(oss.fail())
break;
289 readString = oss.str();
297 filestream.open(fFilename.c_str(), fstream::in);
301 if(!filestream.good())
return vec;
306 while(getline(filestream, line))
308 if(line[0] ==
'#')
continue;
309 istringstream stream(line);
310 while (stream >> dummy)
311 vec.push_back(dummy);
321 if(endline < startline) endline = this->NumberOfLines(
false);
324 filestream.open(fFilename.c_str(), fstream::in);
328 if(!filestream.good())
return vec;
335 while(getline(filestream, line))
338 if(line[0] ==
'#')
continue;
339 if(LineNumber < startline)
continue;
340 if(LineNumber > endline)
break;
342 istringstream stream(line);
343 for(
int i=0; i<=ColumnNumber; i++)
352 else vec.push_back(dummy);
363 if(append) filestream.open(fFilename.c_str(), ofstream::app);
364 else filestream.open(fFilename.c_str(), ofstream::out);
366 if(!filestream.good())
return 0;
368 int NumberElements = outputVector.size();
369 int NumberWritten = 0;
371 for(
int i=0; i<NumberElements; i++)
373 filestream << outputVector[i] << endl;
374 if(!filestream.fail()) NumberWritten++;
378 return NumberWritten;
384 if(append) filestream.open(fFilename.c_str(), ofstream::app);
385 else filestream.open(fFilename.c_str(), ofstream::out);
387 if(!filestream.good())
return 0;
389 int NumberElements = outputVector.size();
390 int NumberWritten = 0;
392 for(
int i=0; i<NumberElements; i++)
394 filestream << outputVector[i] << endl;
395 if(!filestream.fail()) NumberWritten++;
399 return NumberWritten;
405 if(append) filestream.open(fFilename.c_str(), ofstream::app);
406 else filestream.open(fFilename.c_str(), ofstream::out);
408 if(!filestream.good())
return 0;
410 int NumberOfVectors = outputVectors.size();
411 vector<int> NumberOfElements(NumberOfVectors, 0);
413 for(
int i=0; i<NumberOfVectors; i++)
415 NumberOfElements[i] = outputVectors[i].size();
416 if(NumberOfElements[i] > MaxSize) MaxSize = NumberOfElements[i];
418 int NumberWritten = 0;
420 for(
int i=0; i<MaxSize; i++)
422 for(
int j=0; j<NumberOfVectors; j++)
424 if(i < NumberOfElements[j])
426 filestream << outputVectors[j][i] <<
'\t';
427 if(!filestream.fail()) NumberWritten++;
438 return NumberWritten;
444 filestream.open(fFilename.c_str(), fstream::in);
445 if(!filestream.good())
return -1;
451 for(
int i=0; i<startline; i++)
453 getline(filestream, line);
458 while(getline(filestream, line))
473 if(append) filestream.open(fFilename.c_str(), ofstream::app);
474 else filestream.open(fFilename.c_str(), ofstream::out);
476 if(!filestream.good())
return true;
481 if(filestream.fail()) ret=
true;
490 if(startline<0)
return 0;
493 filestream.open(fFilename.c_str(), fstream::in);
494 if(!filestream.good())
return 0;
497 unsigned long long NsTime;
498 unsigned int StartRunUnix;
502 while(getline(filestream, line))
505 if(line[0] ==
'#')
continue;
506 if(LineNumber < startline)
continue;
510 istringstream stream(line);
523 istringstream stream(line);
524 if(stream.good()) stream >> StartRunUnix;
Class for reading and writing ascii text files.
std::vector< double > ReadVector()
Reads a text file into a vector. Text file should contain a list of numbers.
int NumberOfLines(bool ExcludeComments=true)
Returns the number of lines in the file, excluding comments by default.
bool Exists()
Returns true if the file exists and can be opened.
bool WriteLine(std::string line, bool append=true)
Writes a string to a file, terminated with newline.
int WriteQVectors(std::vector< Diana::QVector > outputVector, bool append=false)
Writes a vector of QVectors, each QVector in a new column. Warning: QVectors of different lengths can...
std::string ReadString(int startline=0, int endline=-1)
Reads entire file or subset of file into a string.
bool WriteQTime(Diana::QTime *qt, bool append=true)
Writes an object of type QTime.
bool Comment(std::string comment)
Writes a comment to a file; begins with '#', terminates with newline.
QASCII()
default constructor
std::string fFilename
Name of the file on disk.
virtual ~QASCII()
destructor
bool WriteString(std::string outputString, bool append=false)
Writes a string to a file.
int WriteQVector(Diana::QVector outputVector, bool append=false)
Writes data from a QVector to a file.
int FindLine(std::string pattern, int startline=0)
Finds a line matching the string pattern.
Diana::QVector * ReadQVector()
Reads a text file into a QVector. Text file should contain a list of numbers.
int WriteVectors(std::vector< std::vector< double > > outputVector, bool append=false)
Writes a vector of vectors, each vector in a new column. Warning: vectors of different lengths can be...
std::string ReadComment(int commentNumber=0)
Reads the nth comment from a file. Comments are lines beginning with '#'.
Diana::QTime * ReadQTime(int startline=0)
Reads an object of type QTime.
int WriteVector(std::vector< double > outputVector, bool append=false)
Writes data from a vector to a file.
unsigned long long GetFromStartRunNs() const
retrieve time from start of run in ns
void SetStartRunUnix(unsigned int time)
set time of start of run in seconds from 1/1/1970
time_t GetStartRunUnix() const
retrieve time of start of run in seconds from 1/1/1970
void SetFromStartRunNs(unsigned long long time)
set time from start of run in ns
the Diana namespace is needed because sometimes we use Qt libraries, that use same class names of our...