I have a program here with a text file below the code. How can I show a output that shows the Unique Idenifiers in a text file (Items bought once only such as gum and Icecream) and the Frequencies of each item from the text file.
#include
using namespace std;
int main()
{
string line; // variable used to read a line from file
int lines =0; // variable conatining the number of transactions
ifstream myfile(“/Users/TheKid/Library/Mobile Documents/com~apple~TextEdit/Documents/en.lproj/marketdata.txt”); //opening market.data file in read mode using ifstream and providing the path to the file. Either keep the file in the same path where the cpp file is else specify the full path of market.data
if (myfile.is_open()) // checking if the file was opened
{
while(getline(myfile,line)) //read the file line by line until end of file is reached
{
lines ++; // calculating the transactions
}
cout<
myfile.close(); //closing the file
ifstream myfile(“/Users/TheKid/Library/Mobile Documents/com~apple~TextEdit/Documents/en.lproj/marketdata.txt”); // re-opening the file
while(getline(myfile,line)) //read the file line by line until end of file is reached
{
cout<
}
myfile.close(); // closing the file
}else
cout<<“Unable to open file”;
return 0;
} // end of main
Text File
7 \number of transactions
1, 3, gum,bread,fish Transactions ID, #of Items, gum,bread,fish
2, 2, fish,bread
3, 1, juice
4, 3, bread, mangos fish
5, 2, bread,mangos
6, 3, Icecream,bread,fish
7, 1, fish
Expert Answer
main.cpp:
#include <iostream>
#include <map>
#include <iterator>
#include <algorithm>
#include <string>
#include <cstdlib>
#include <fstream>
#include <sstream>
using namespace std;
string toLower(string s) {
string data = s;
std::transform(data.begin(), data.end(), data.begin(), ::tolower);
return data;
}
string trim(string str){
stringstream trimmer;
trimmer << str;
str.clear();
trimmer >> str;
return str;
}
int main()
{
map<string, int> item_count;
string line; // variable used to read a line from file
int lines =0; // variable conatining the number of transactions
ifstream myfile(“../itemdata.txt”);
if (myfile.is_open()) // checking if the file was opened
{
getline(myfile,line); // to ignore the first line which contains number of transactions
while(getline(myfile,line)) //read the file line by line until end of file is reached
{
// now we are processign each line
stringstream ss(line);
int i;
string item;
int count;
// ignore Transactions ID, #of Items
getline(ss, item, ‘,’);
getline(ss, item, ‘,’);
count = atoi(item.c_str());
while (count– && getline(ss, item, ‘,’)) {
item = trim(toLower(item));
// Now the item variable is containing the item name
map<string,int>::iterator itr = item_count.find(item);
if (itr == item_count.end() ) {
// means the element is not present
item_count.insert(pair<string,int>(item,1));
} else {
// increment the count
itr->second = 1 + itr->second;
}
}
}
// now traverse in the array and print entries which have count 1
cout << “unique items: ” << endl;
for( map<string,int>::const_iterator it = item_count.begin(); it != item_count.end(); ++it ) {
if(it->second == 1) {
cout << it->first << endl;
}
}
cout << endl << “Items frequencies: ” << endl;
for( map<string,int>::const_iterator it = item_count.begin(); it != item_count.end(); ++it ) {
cout << it->first << “:” << it->second << endl;
}
myfile.close(); //closing the file
} else{
cout << “Unable to open input file.” << endl;
return 1;
}
return 0;
}
itemdata.txt:
7 \number of transactions
1, 3, gum,bread,fish Transactions ID, #of Items, gum,bread,fish
2, 2, fish,bread
3, 1, juice
4, 3, bread, mangos fish
5, 2, bread,mangos
6, 3, Icecream,bread,fish
7, 1, fish
Please adjust the file location in ifstream myfile(“../itemdata.txt”); line.. Otherwise program will report that it is unable to find the file.