All pastes #794224 Raw Edit

average - seb

public text v1 · immutable
#794224 ·published 2007-11-23 00:10 UTC
rendered paste body
#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 specified in (string) fileLocation

int main(void)
{
	fstream inputFile;
	ofstream outputFile;
	string fileName;
	string fileLocation = "../Data/";
	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];
	int numberOfGoodFiles = 0;
	int numberOfBadFiles = 0;
	
	float sumRangesFloat = 0.0;
	float numberOfGoodFilesFloat = 0.0;
	
	// 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 = fileLocation;
			fileName.append("Front00000");		// i >= 0 && i < 10 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 = fileLocation;
			fileName.append("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 = fileLocation;
			fileName.append("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 = fileLocation;
			fileName.append("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;
					}
				}
			}
			numberOfGoodFiles++;
		}
		
		else
		{
			numberOfBadFiles++;
		}
		
		inputFile.close();
	}
	
	// create output-filename
	fileOutName = fileLocation;
	fileOutName.append("averageOfRanges.dat");
	
	// 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];
		}
		
		if (numberOfGoodFiles != 0)
		{
			sumRangesFloat = sumRanges;
			numberOfGoodFilesFloat = numberOfGoodFiles;
			average = sumRangesFloat / numberOfGoodFilesFloat;
		}
		else
			average = 0.0;

		sumRanges = 0;
		
		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
	outputFile.open(fileOutName.c_str(), ios::out);
	outputFile.write(outputString.c_str(), outputFileLenght);
	outputFileLenght = 0;
	
	// cleaning output file
	outputFile.close();

	cout << "\nsuccessfull reading of " << numberOfGoodFiles << " input Files.\n";
	if(numberOfBadFiles >= 1)
		cout << "could not read " << numberOfBadFiles << " input Files.\n";
	else
		cout << "Read all input Files!\n";
	cout << "1 File created: " << fileOutName << "\n\n";
	cout << "Done!";
	
	return 0;
}