Notes: • The solution should be general to processing any file with the same sch
ID: 3818914 • Letter: N
Question
Notes:
• The solution should be general to processing any file with the same schema, not only
applicable to the given file example.
• The program will be tested with data files with the same schema.
Assignment Marking Scheme
: • Program correctness (75%)
• Program indentation and readability (5%)
• Choice of significant names for identifiers (5%)
• Comments - description of variables and constants (5%)
my implementation of the code listed below for some reason every line is not being outputted
here is my output
here is my implementation
///DataStorage.cpp/////
#include <iostream>
#include <fstream>
#include <iterator>
#include <sstream>
#include <string>
#include<cstdlib>
#include<cstring>
#include"DataStorage.h"
using namespace std;
//Constructor of the class DataStorage
DataStorage::DataStorage()
{
}
//end of constructor
//Member function that sets pointer as an integer type
void DataStorage::setIntPtr(int* intPtr)
{
iPtr = intPtr;
fPtr = 0;
cPtr = 0;
}
//end of setIntPtr function
//Member function that sets pointer as a float type
void DataStorage::setFloatPtr(float* floatPtr)
{
iPtr = 0;
fPtr = floatPtr;
cPtr = 0;
}
//end of setFloatPtr function
//Member function that sets pointer as a character type
void DataStorage::setCharPtr(char* charPtr)
{
iPtr = 0;
fPtr = 0;
cPtr = charPtr;
}
//end of setCharPtr function
//Accessing function that returns a pointer of type integer
int* DataStorage::getIntPtr()
{
return iPtr;
}
//end of getIntPtr function
//Accessing function that returns a pointer of type float
float* DataStorage::getFloatPtr()
{
return fPtr;
}
//end of getFloatPtr function
//Accessing function that returns a pointer of type character
char* DataStorage::getCharPtr()
{
return cPtr;
}
void readFile(DataStorage*& dsPtr, int* size) {
ifstream inFile;
inFile.open("/Users/fatema/Desktop/config.dat");
// exit program if ifstream could not open file
if (!inFile) {
cout << "File could not be opened" << endl;
exit(1);
}
char line[200];
int numLines=0;
inFile.unsetf(std::ios_base::skipws);
// find out how many lines the file has
unsigned line_count = count(std::istream_iterator<char>(inFile),std::istream_iterator<char>(),' ');
cout << line_count << endl;
dsPtr = new DataStorage[line_count + 1];
inFile.clear();
inFile.setf(std::ios_base::skipws);
inFile.seekg(0);
int totalLine = 0;
//Wrting the exception code
try{
while (!inFile.eof())
{
char dataType[10];
int dSize;
inFile >> dataType;
inFile >> dSize;
// cout << dSize << dataType << endl;
if (strcmp(dataType, "int") == 0)
{
int *iPtr = new int[dSize+1];
iPtr[0] = dSize;
for (int i = 1; i <= dSize; i++)
inFile >> iPtr[i];
dsPtr[totalLine++].setIntPtr(iPtr);
}
else if (strcmp(dataType, "float") == 0)
{
float *fPtr = new float[dSize+1];
fPtr[0] = dSize;
for (int i = 1; i <= dSize; i++)
inFile >> fPtr[i];
dsPtr[totalLine++].setFloatPtr(fPtr);
}
else if (strcmp(dataType, "char") == 0)
{
char *cPtr = new char[dSize+1];
cPtr[0] = dSize;
for (int i = 1; i <= dSize; i++)
inFile >> cPtr[i];
dsPtr[totalLine++].setCharPtr(cPtr);
}
if(totalLine == line_count){
break;
}
}
*size = totalLine;
}
//Trying to catch the exception
catch (exception e)
{
cout << "do sth" << endl;
}
inFile.close();
}
//Start testing DataStorage function
int main()
{
DataStorage* dsPtr;
int numLines=0;
readFile(dsPtr,&numLines);
ofstream file("/Users/fatema/Desktop/reverse.dat");
for (int i = 0; i < numLines; i++)
{
if (dsPtr[i].getCharPtr())
{
char* ptr = dsPtr[i].getCharPtr();
for (int j = (int)ptr[0]; j >= 0 ; j--){
file << ptr[j];
cout << ptr[j] << ' ';
}
}
else if (dsPtr[i].getFloatPtr())
{
float* ptr = dsPtr[i].getFloatPtr();
for (int j = (int)ptr[0]; j >= 0 ; j--){
file << ptr[j];
cout << ptr[j] << ' ';
}
}
else
{
cout << "Correct data " << endl;
int* ptr = dsPtr[i].getIntPtr();
for (int j = 1 ; j < (int)ptr[0] ; j++){
cout << ptr[j] << ' ';
}
cout << endl << "reverse String" << endl;
for (int j = (int)ptr[0]; j >= 0 ; j--){
file << ptr[j];
cout << ptr[j] << ' ';
}
}
cout << endl;
file.close();
}
return 0;
}
///config.dat///
int 12 1 9 1 8 6 3 4 3 9 7 0
float 2 5.30 56.31
char 6 h a y K o z
float 3 5.55 22.41 10.11
///reverse.dat////
0 7 9 3 4 3 6 8 1 9 1 12 int
56.31 5.30 2 float
z o K y a h 6 char
10.11 22.41 5.55 3 float
Explanation / Answer
//Please comment for any modification
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
// Function to reverse a string
void reverseStr(string &str)
{
int n = str.length();
for (int i=0; i<n/2; i++)
swap(str[i], str[n-i-1]);
}
int main(int argc,char* argv[]){
ifstream infile;
infile.open(argv[1]);
ofstream outfile;
outfile.open(argv[2],ios::out);
string line;
cout << "Displaying record from file " << endl;
int num=1;
while (getline(infile, line))
{
cout << "RECORD " <<num<<" : "<< line << endl;
reverseStr(line);
outfile << line <<endl;
cout << line << endl;
}
cout << "Now open reverse.txt file for displaying each record in reverse order " << endl;
infile.close();
outfile.close();
return 0;
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.