#include <string>
#include <vector>
#include <fstream>
#include <iostream>
#include <sstream>
#include <math.h>
#include <stdio.h>
using namespace std;
// files has to be in folder ../Data/
int main(void)
{
fstream inputFile;
ofstream outputFile;
string fileName;
string fileOutName = "";
string fileOutNameHelp = "";
string castString; // help-string for casting int to string...
string outputString;
vector< vector <int> > inputRanges(2000, vector<int> (181, 0));
int sumRanges = 0;
float average;
int outputFileLenght = 0;
int inputRange;
float initFloat;
char* charArray = new char[80];
// float outputX, outputY;
// float mittelwert[2000];
// const float pi = 3.14159;
// const float divisorRadToDeg = 2*pi/360;
// iterate over all 2000 input-files
for (int i = 0; i <= 1999; i++)
{
// creating input-fileName depends on the lenght of i
if (i < 10)
{
fileName = "../Data/Front00000"; // i < 0 means there are 5 Zeros before adding i
stringstream castStringStream;
castStringStream<<i;
castStringStream>>castString;
fileName.append(castString);
fileName.append(".dat");
}
if (i >= 10 && i < 100)
{
fileName = "../Data/Front0000"; // i >= 10 && i < 100 means there are 4 Zeros before adding i
stringstream castStringStream;
castStringStream<<i;
castStringStream>>castString;
fileName.append(castString);
fileName.append(".dat");
}
if (i >= 100 && i < 1000)
{
fileName = "../Data/Front000"; // i >= 100 && i < 1000 means there are 3 Zeros before adding i
stringstream castStringStream;
castStringStream<<i;
castStringStream>>castString;
fileName.append(castString);
fileName.append(".dat");
}
if (i >= 1000)
{
fileName = "../Data/Front00"; // i >= 1000 means there are 2 Zeros before adding i
stringstream castStringStream;
castStringStream<<i;
castStringStream>>castString;
fileName.append(castString);
fileName.append(".dat");
}
// open Input-File
inputFile.open(fileName.c_str(), ios::in);
// if read in of input-file successfull
if (inputFile.good())
{
// delete the two comment-lines at the beginning of input-file
getline(inputFile, castString);
getline(inputFile, castString);
for (int j = 0; j <= 180; j++)
{
getline(inputFile, castString); // get next line of the input-file
{
if(castString.find("#") == string::npos)
{
// cast string to int
std::istringstream helpString("0");
helpString.str(castString);
helpString>>inputRange;
inputRanges[i][j] = inputRange;
}
}
}
}
}
// create output-file
string castHelpString;
outputString = "# 181 points";
outputFileLenght += 12;
outputString.append("\n");
outputFileLenght++;
outputString.append("# average of 2000 range-measurements");
outputFileLenght += 36;
for (int i = 0; i <= 180; i++)
{
for (int j = 0; j <= 1999; j++)
{
sumRanges += inputRanges[j][i];
}
average = sumRanges / 2000;
outputString.append("\n");
// next 3 lines: casting float average to Array of chars charArray to get it in the outputString
// inputRange is used as a help variable to count the file-lenght correctly
initFloat = 0.0;
sprintf(charArray, "%f", initFloat);
inputRange = sprintf(charArray, "%f", average);
outputString.append(charArray);
outputFileLenght++;
outputFileLenght += inputRange;
}
// open and write output-file
fileOutName = "averageOfRanges.dat";
outputFile.open(fileOutName.c_str(), ios::out);
outputFile.write(outputString.c_str(), outputFileLenght);
outputFileLenght = 0;
// cleaning some variables
castString.clear();
outputString.clear();
inputFile.close();
outputFile.close();
cout << "Fertig!";
return 0;
}