pp

closed account (3UMLy60M)
ppp
Last edited on
to read data from file you need a filestream.
once you have declared a filestream you can then
infilestream << array[index];

this will read from the designated filestream into the array at position 'index'

In this case you know how many lines each file has and how many columns so ..... sounds like an easy thing 2 for loops can handle.

After you have reseached the above stated stuff, post your code if you still need help.

:)
Last edited on
Here you go, hope it helps. Just make sure to change the file paths and give the table the headings, ie. Name day1, day2...etc.


Mike

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134


#include <fstream>
#include <iostream>
#include <string>

using namespace std;

const int MONKEYS=3;
const int DAYS=7;
const int NAMES=3;


void read_monkeys(ifstream& the_file, string a[]);
void read_food(ifstream& the_file, double a[][7]);
void print_table(string a[], double b[][7]);
int main(){

	char dummy;

	double monkeyFood[MONKEYS][DAYS];
	string monkeyNames[NAMES];
	
	ifstream input_file("C:/Users/Mike/Desktop/test/Monkeys.txt");

	if(input_file.fail()){
	
		cout<<"File failed to open!\n";
		exit(1);
	}

	read_monkeys(input_file,monkeyNames);

	cout<<"Afer opening file, and reading monkey names into array...\n";

	for(int i=0;i<NAMES;i++)
		cout<<monkeyNames[i]<<endl;

	input_file.close();

	ifstream input_file1("C:/Users/Mike/Desktop/test/Days.txt");

	if(input_file1.fail()){
	
		cout<<"File failed to open!\n";
		exit(1);
	}


	read_food(input_file1,monkeyFood);

	input_file1.close();

	cout<<"After opening food file, and inputting all data into array...\n";

	for(int i=0;i<MONKEYS;i++){

		for(int j=0;j<DAYS;j++){
		
			cout<<monkeyFood[i][j]<<",";
		}
		cout<<endl;
	
	}

	cout<<"Finally, we have the following table\n\n";

	print_table(monkeyNames,monkeyFood);


	cin>>dummy;

	return 0;
}
void read_monkeys(ifstream& the_file, string a[]){

	string temp_name;
	int counter=0;
	while(the_file>>temp_name){
		
	
		a[counter]=temp_name;
		counter++;
		
	}



}
void read_food(ifstream& the_file, double a[][7]){

	int temp_number;
	int row_counter=0;
	int col_counter=0;
	int total_inputs=0;

	while(the_file>>temp_number){
		

		a[row_counter][col_counter]=temp_number;
		
		total_inputs++;
		col_counter++;

		if(total_inputs%DAYS==0){
			row_counter++;
			col_counter=0;
		}
	}
	


}
void print_table(string a[], double b[][7]){



	for(int i=0;i<NAMES;i++){
		
		cout<<a[i]<<"\t";
	
		for(int j=0;j<DAYS;j++){
		
			cout<<b[i][j]<<"  ";
		
		}
		cout<<endl;
	
	}


}

closed account (3UMLy60M)
Michaela and toomanystars,

Thank you both for your help. This is now my code:

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include <fstream>
#include <iostream>
#include <string>

using namespace std;

const int MONKEYS=3;
const int DAYS=7;
const int NAMES=3;

void read_monkeys(ifstream& the_file, string a[]);
void read_food(ifstream& the_file, double a[][7]);
void print_table(string a[], double b[][7]);
int main()
{
	char dummy;
	double monkeyFood[MONKEYS][DAYS];
	string monkeyNames[NAMES];
	
	ifstream input_file("Monkeys.txt");

	if(input_file.fail())
	{
		cout<<"File failed to open!\n";
		exit(1);
	}

	read_monkeys(input_file,monkeyNames);
	input_file.close();

	ifstream input_file1("Days.txt");

	if(input_file1.fail())
	{
		cout<<"File failed to open!\n";
		exit(1);
	}

	read_food(input_file1,monkeyFood);
	input_file1.close();

	cout << "Name" << "\t" << " " << "Day 1" << "\t" << " " << "Day 2" << "\t" << " " << "Day 3"
		<< "\t" << " " << "Day 4" << "\t" << " " << "Day 5" << "\t" << " " << "Day 6" << "\t" << " " << "Day 7" << endl;

	cout << "-----" << "\t" << " " << "-----" << "\t" << " " << "-----" << "\t" << " " << "-----" << "\t"
		 << " " << "-----" << "\t" << " " << "-----" << "\t" << " " << "-----" << "\t" << " " << "-----" << endl;

	print_table(monkeyNames,monkeyFood);

	cin >> dummy;
	return 0;
}

void read_monkeys(ifstream& the_file, string a[])
{
	string temp_name;
	int counter=0;
	while(the_file>>temp_name)
	{
		a[counter]=temp_name;
		counter++;
	}
}

void read_food(ifstream& the_file, double a[][7])
{
	int temp_number;
	int row_counter=0;
	int col_counter=0;
	int total_inputs=0;

	while(the_file>>temp_number)
	{
		a[row_counter][col_counter]=temp_number;
		total_inputs++;
		col_counter++;

		if(total_inputs%DAYS==0)
		{
			row_counter++;
			col_counter=0;
		}
	}
}

void print_table(string a[], double b[][7])
{
	for(int i=0;i<NAMES;i++)
	{
		cout<<a[i]<<"\t";
		for(int j=0;j<DAYS;j++)
		{
			cout<<b[i][j]<<"  ";
		}
		cout<<endl;
	}
}

As you can see it's doing exactly what I need it to; however, the last row of numbers doesn't align properly because "0" is being read instead of "00". How do I fix this?
Try using the setw() function for which you need the <iomanip> . I will leave the research up to you.

As for the code, always try to break it down into manageble chunks by using functions. Not only does it become easier to read, but logically it's easier to comprehend.

Make sure you close your input or output file streams when you are done with them.

Mike
closed account (3UMLy60M)
I used setw() to set my width to 5 and now it looks much better. One last thing, what do I do about the single "0" in the last row?
I am not sure since I deleted the program I wrote for you but I think this may do it...or something similar

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

void print_table(string a[], double b[][7]){



	for(int i=0;i<NAMES;i++){
		
		cout<<a[i]<<"\t";
	
		for(int j=0;j<DAYS;j++){
		
			if(b[i][j]==0)//change here
				cout<<"0";//change here
			cout<<b[i][j]<<"  ";
		
		}
		cout<<endl;
	
	}


}






Try that, I will be up for a bit longer so if you still have an issue let me know
Last edited on
Topic archived. No new replies allowed.