Hello, I am a newbie in C++ programming. I try to write a C++ program to first read and split a hugh text file (that containing multiple small files inside it) into multiple small text files, then I need to write the first line of each small text file into a log and also delete the last 3 lines of each small text file.
I manage to split the hugh text file into small text files and also write the first line of each small text file into a log file. I also able to delete the last 3 lines of the first small text file but I can open nor alter subsequent small files.:confused:
Some example:
1) First, I got this hugh text file containing, let say (it has > 1000 files in the text):
C:\File_A
100 123
101 123
C:\File_B
100 100
103 50
C:\File_C
50 12
51 500
2) Then I split them into 3 small text file called temp_1.txt, temp_2.txt, temp_3.txt. I also read the first line of each text into a log file:)
temp_1.txt temp_2.txt temp_3.txt
\File_A \File_B \File_C
100 123 100 100 50 12
101 123 103 50 51 500
C C
log.txt
temp_1.txt \File_A
temp_2.txt \File_B
temp_3.txt \File_C
3) Finally, I want to delete the last 3 lines of the text from each text file, meaning that I don't want 'C' and empty lines in the file. I got stuck here.:?:
I figure it may due to the ifstream function which not allow me to re-use same ifstream variable for multiple text files. Can anyone help me??:'(
Here is what I have done so far:
#include <iostream>
#include <string> // string support
#include <fstream> // I/O file support
#include <sstream> // stringstream functions
using namespace std;
// convert number into string for auto-numbering text filenames
string Convert_To_String(int s)
{
string character;
ostringstream outputs; // using <sstream> dictionary
outputs << s; // convert value into a string
character = outputs.str();
return character;
}
const string inputFileName = "inputFile.txt";
const string outputFileHeader = "OUTPUT_";
const string outputFileExt = ".txt";
const string tempFileHeader = "Temp_";
int main()
{
declare Input File Reader
ifstream FILE_READER, FILE_READERS;
FILE_READER.open(inputFileName.c_str());
// temporary store information of the inputFile.txt
string tempArray[5000];
int i = 0, totFiles = 0;
string outputFileName, tempFileName;
// find number of files
while(!FILE_READER.eof())
getline(FILE_READER, tempArray[i++], ':');
// write total number of files into 'totFiles'
totFiles = i;
// close Input File
FILE_READER.close();
ofstream FILE_WRITER, LOG_WRITER;
// write temp output text files using auto-generated number
for (i = 1; i < totFiles; i++)
{
tempFileName = tempFileHeader + Convert_To_String(i) + outputFileExt;
FILE_WRITER.open(tempFileName.c_str());
FILE_WRITER << tempArray[i] << endl;
FILE_WRITER.close();
}
// clear array
for (i = 1; i < totFiles; i++)
tempArray[i] = "";
// display total number of output files
cout << endl << "Total files created > " << totFiles - 1 << endl;
// create a log file
LOG_WRITER.open("log.txt");
int count; // count number of lines in each file
// read one file at a time into tempArray, write first line of the file into log
// file and write each line of the file (excepting the last 3 lines) into
// with different output filename
for (i = 1; i < totFiles; i++)
{
tempFileName = tempFileHeader + Convert_To_String(i) + outputFileExt;
FILE_READERS.open(tempFileName.c_str(), ios::in);
outputFileName = outputFileHeader + Convert_To_String(i) + outputFileExt;
FILE_WRITER.open(outputFileName.c_str());
// check if the file is available
if (FILE_READERS)
{
for (count = 0; !FILE_READER.eof(); count++)
getline(FILE_READER, tempArray[count], '\n');
FILE_READERS.close();
LOG_WRITER << outputFileName << "\t" << tempArray[0] << endl;
cout << endl << "#Lines in " << tempFileName << " > " << count;
for (int j = 0; j < count - 3; j++)
FILE_WRITER << tempArray[j] << endl;
// clear array
for (int j = 0; j < count - 3; j++)
tempArray[j] = "";
FILE_WRITER.close();
}
else
cout << "File " << tempFileName << " Not Found." << endl;
}
LOG_WRITER.close();
system("pause");
return 0;
}