view c/utils.cpp @ 144:b32947b002da

added the code to read matrices from text files
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Fri, 26 Aug 2011 19:38:11 -0400
parents a52653dca25d
children 7bf8084e720f
line wrap: on
line source

#include "utils.hpp"

#include <boost/foreach.hpp>

#include <iostream>
#include <fstream>
#include <sstream>

using namespace std;

vector<vector<float> > loadNumbers(const string& filename, const string& separator /* = " " */) {
  ifstream in(filename.c_str());
  ::openCheck(in, filename, "loadNumbers");
  vector<vector<float> > result;

  while (!in.eof()) {
    string line = ::getlineComment(in);
    vector<string> tokens;
    ::split(tokens, line, separator);
    vector<float> numbers;
    BOOST_FOREACH(string s, tokens)
      numbers.push_back(::toInt(s));
    if (!numbers.empty())
      result.push_back(numbers);
  }

  return result;
}

int toInt(const std::string& s) { int i; fromString(i, s); return i;} //atoi

float toFloat(const std::string& s) { float x; fromString(x, s); return x;}// lexical_cast<float>(s)

double toDouble(const std::string& s) { double x; fromString(x, s); return x;}

string getlineComment(ifstream& f) {
  string s;
  getline(f, s);
  while ((!f.eof()) && (s[0] == ::commentChar)) {
    getline(f, s);
  }
  
  if (s[0] == ::commentChar)
    s.clear();
  return s;
}

void openWriteScientificPrecision(ofstream& out, const string& filename, const int& precision) {
  ::openWritePrecision(out, filename, precision);
  out.setf(ios::scientific);
}

void openWritePrecision(ofstream& out, const string& filename, const int& precision) {
  out.open(filename.c_str(), ios::binary);
  ::openCheck(out, filename, "openWritePrecision");
  out.precision(precision);
}

bool openCheck(ifstream& f, const string& filename, const string& callingFunctionName) {
  if (!f.is_open()) {
    cerr << "Pb opening file " << filename << " in " << callingFunctionName << endl;
    return false;
  } else
    return true;
}

bool openCheck(ofstream& f, const string& filename, const string& callingFunctionName) {
  if (!f.is_open()) {
    cerr << "Pb opening file " << filename << " in " << callingFunctionName << endl;
    return false;
  } else
    return true;
}