Help with output file formatting

Hello all, hope you all are well.

Here's my problem:

Write a simple text-formatting program that reads a text file and produces another text file in which blank lines are removed, multiple blanks are replaced with a single blank, and no lines are longer than some given length. Put as many words as possible in the same line. You will have to break some lines of the given file, but do not break any words or put punctuation marks at the beginning of a new line.

Here is what I have so far. I am stuck out on how to reformat everything for output file.

Any help would be greatly appreciated!!

Thanks in advance!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
#include <fstream>
#include <string>
#include <cassert>
#include <cfloat>
#include <iomanip>


using namespace std;

int main()

{
	string inputFileName;
	cout << "Please enter the name of the file containing unformatted text:"  << endl;
	getline (cin, inputFileName);

	ifstream fin;
	fin.open(inputFileName.data());
	assert(fin.is_open());

	string line;

	while (fin.good())
	{
		getline(fin,line);
		cout << line << endl; // used this to make sure entire file was read in
	}

	fin.close();

	cout << endl;
	cout << endl;
	cout << "Please enter maximum length of line (1 -72)" << endl;
	int max_length = 0;
	cin >> max_length;
	cout << endl;

	cout << "Please enter the name of the file to contain formatted text:" << endl;
	string outputFileName;
	getline(cin, outputFileName);
	cout << endl;

	ofstream fout(outputFileName.data());

	assert (fout.is_open());

	fout << line << endl;

	fout.close();

}



This is an example of a file before formatting:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
		The Gettysburg Address
	Fourscore  and seven   years ago  
our fathers brought forth on
	this continent a new nation, 
		conceived in liberty, and dedicated to
the proposition that all men are created equal.
	Now we are engaged in a great civil war, testing 
whether that
nation, or any nation so conceived and so dedicated, 

can long endure.
	We are met on a great battlefield of that war. 
We have come to     dedicate a portion of that field as a final resting-place for those
who here gave their lives that the nation might live. It is altogether


fitting and proper that we should do this. But, in a larger sense, we
cannot dedicate, we cannot 
consecrate, we cannot hallow, this ground.
The brave men, living and dead, who struggled here have consecrated
it, far above our poor power to add or detract. The world will little
      note, nor long remember, what we say here, but it can never forget
what they did here. It is for us 

the living, rather, to be dedicated
here to the unfinished work which they who fought here have thus far
so nobly advanced. 
It is rather for us to be here dedicated to the
great task remaining before us - that from these honored dead we take
increased devotion to that cause for which they gave the last full
measure 

of devotion - that we here highly resolve that these dead
shall not have died 

in vain - that this nation, under God, shall have
a new birth of freedom and that government of the people, by the
people, for the people, shall not perish from the earth.


And here is what it would be after formatting and setting the max_length to 40

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
The Gettysburg Address Fourscore and 
seven years ago our fathers brought 
forth on this continent a new nation, 
conceived in liberty, and dedicated to 
the proposition that all men are created 
equal. Now we are engaged in a great 
civil war, testing whether that nation, 
or any nation so conceived and so 
dedicated, can long endure. We are met 
on a great battlefield of that war. We 
have come to dedicate a portion of that 
field as a final resting-place for those 
who here gave their lives that the 
nation might live. It is altogether 
fitting and proper that we should do 
this. But, in a larger sense, we cannot 
dedicate, we cannot consecrate, we 
cannot hallow, this ground. The brave 
men, living and dead, who struggled here 
have consecrated it, far above our poor 
power to add or detract. The world will 
little note, nor long remember, what we 
say here, but it can never forget what 
they did here. It is for us the living, 
rather, to be dedicated here to the 
unfinished work which they who fought 
here have thus far so nobly advanced. It 
is rather for us to be here dedicated to 
the great task remaining before us - 
that from these honored dead we take 
increased devotion to that cause for 
which they gave the last full measure of 
devotion - that we here highly resolve 
that these dead shall not have died in 
vain - that this nation, under God, 
shall have a new birth of freedom and 
that government of the people, by the 
people, for the people, shall not perish 
from the earth. 
Last edited on
someone please help me
nothing out there for me?
You need to read in one word at a time.

Then check the size of the string and use a if else based on string size like this;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
	while (fin.good())
	{
	fin >> wordIn;
	wordcount ++;
	if (lineOut.size() == 0)
		{
		lineOut = wordIn;
		}
	else
		if (lineOut.size() + wordIn.size() <= max_length)
		{
		lineOut = lineOut + " " + wordIn;
		}
	else
		if (lineOut.size() + wordIn.size() > max_length)
		{
		cout << lineOut << endl;
		lineOut= "";
		lineOut = wordIn;
		}
	}
	cout << lineOut << endl;
Topic archived. No new replies allowed.