As you can see below from the code sample, the string is aligned to the left of the field and the floating point value is aligned to the right of its field. So my desired output should look something like this:
Expand|Select|Wrap|Line Numbers
- value = -4.000 value = -4.000 value = -4.000
- value = -4.000 value = -3.000 value = -2.000
- value = -4.000 value = -2.000 value = 0.000
Expand|Select|Wrap|Line Numbers
- value = -4.000 value = -4.000 value = -4.000
- value = -4.000 value = -3.000 value = -2.000
- value = -4.000 value = -2.000 value = 0.000
Expand|Select|Wrap|Line Numbers
- // In File Parser.h
- #include <iostream>
- #include <fstream>
- #include <vector>
- #include <sstream>
- #include <string>
- #include <dirent.h>
- #include <iomanip>
- // Note, I am including only relevant parts of this class, it's kind of large....
- class Parser
- {
- public:
- Parser(std::string FileName, std::ios_base::openmode Mode);
- ~Parser();
- bool isOpen(){ return(mOpen); }
- void SetLineWriterPrecision(int p){ mLineWriter.precision(p); }
- void SetLineWriterFlags(std::ios_base::fmtflags f){ mLineWriter.setf(f); }
- void SetLineWriterFlags(std::ios_base::fmtflags f, std::ios_base::fmtflags m)
- { mLineWriter.setf(f, m); }
- void WriteLine(string line)
- {
- mLineWriter << line << std::endl;
- }
- template <typename T>
- void WriteW(T item, int w, std::ios_base::fmtflags flag)
- {
- mLineWriter.width(w);
- mLineWriter.setf(flag);
- mLineWriter << item;
- }
- private:
- std::ofstream mLineWriter;
- std::ios_base::openmode mMode;
- bool mOpen;
- };
- // In StreamTest.cpp
- #include "Parser.h"
- #include "Matrix.h"
- using namespace std;
- int main(int argc, char *argv[])
- {
- Parser parser("outStream.txt", ios::out);
- int s = 3;
- if(parser.isOpen())
- {
- parser.SetLineWriterFlags(ios::fixed, ios::floatfield);
- parser.SetLineWriterFlags(ios::showpoint);
- parser.SetLineWriterPrecision(3);
- //parser.SetLineWriterFlags(ios::right);
- Matrix mat(s, s);
- mat.SetIdentity();
- for(int i = 0; i < s; ++i)
- {
- for(int j = 0; j < s; ++j)
- {
- mat(i, j) = (i * j) - (s*s)/2;
- string o = "value =";
- parser.WriteW(o, 12, ios::left);
- parser.WriteW(mat(i, j), 8, ios::right);
- }
- parser.WriteLine("");
- }
- parser.Close();
- }
- return(0);
- }
Thanks!