Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;正在读取文件搜索该文件中的内容_C++_Readfile - Fatal编程技术网

C++ C++;正在读取文件搜索该文件中的内容

C++ C++;正在读取文件搜索该文件中的内容,c++,readfile,C++,Readfile,所以我有一个.txt文件,看起来像这样: 1:肉菜:牛排:11.5 2:鱼菜:鱼和薯条:12 第一个数字是项目编号,“肉菜”是我的类别,“牛排”是我的描述,最后“11.5”是我的价格 所以基本上我想搜索itemNo,我想让它显示该行的价格。这就是我到目前为止所拥有的: #include <iostream> #include <fstream> #include <string> #include <vector> // We will use t

所以我有一个.txt文件,看起来像这样:
1:肉菜:牛排:11.5

2:鱼菜:鱼和薯条:12

第一个数字是项目编号,“肉菜”是我的类别,“牛排”是我的描述,最后“11.5”是我的价格

所以基本上我想搜索itemNo,我想让它显示该行的价格。这就是我到目前为止所拥有的:

#include <iostream>
#include <fstream>
#include <string>
#include <vector> // We will use this to store Players
using std::string;
using std::ofstream; 
using std::ifstream; 
using std::cout;
using std::cin;

struct MenuList // Define a "Player" data structure
{
    string itemNo;
    string category;
    string descript;
    double price;
};

std::istream& operator>>(std::istream& infile, MenuList& menu)
{
    // In this function we will define how information is inputted into the player struct
    // std::cin is derived from the istream class
    getline(infile, menu.itemNo, ':'); 
    getline(infile, menu.category, ':');
    getline(infile, menu.descript, ':');
    infile >> menu.price;
    // When we have extracted all of our information, return the stream
    return infile;
}

std::ostream& operator<<(std::ostream& os, MenuList& menu)
{
    // Just like the istream, we define how a player struct is displayed when using std::cout
    os << "" << menu.itemNo << " " << menu.category << " - " << menu.descript;
    // When we have extracted all of our information, return the stream
    return os;
}

void Load(std::vector<MenuList>& r, string filename) 
{
    std::ifstream ifs(filename.c_str()); // Open the file name
    if(ifs)
    {
        while(ifs.good()) // While contents are left to be extracted
        {
            MenuList temp;
            ifs >> temp;        // Extract record into a temp object
            r.push_back(temp);  // Copy it to the record database
        }
        cout << "Read " << r.size() << " records.\n\n"; 
    }
    else
    {
        cout << "Could not open file.\n\n";
    }
}

void Read(std::vector<MenuList>& r) // Read record contents
{
    for(unsigned int i = 0; i < r.size(); i++)
        cout << r[i] << "\n";
}

void Search(std::vector<MenuList>& r) // Search records for name
{
    string n;
    cout << "Search for: ";
    cin >> n;
    for(int i = 0; i < r.size(); i++)
    {
        if(r[i].itemNo.find(n) != string::npos)
            cout << r[i];
    }
}

int main()
{
    std::vector<MenuList> records;
    Load(records, "delete.txt");
    Read(records);
    Search(records);
    return 0;
}
#包括
#包括
#包括
#include//我们将使用它来存储玩家
使用std::string;
使用std::of流;
使用std::ifstream;
使用std::cout;
使用std::cin;
struct MenuList//定义一个“Player”数据结构
{
字符串itemNo;
字符串类别;
字符串描述符;
双倍价格;
};
std::istream&operator>>(std::istream&infle、菜单列表&菜单)
{
//在这个函数中,我们将定义如何将信息输入到播放器结构中
//std::cin派生自istream类
getline(infle,menu.itemNo,':');
getline(infle,menu.category,':');
getline(infle,menu.descript,':');
infle>>menu.price;
//提取完所有信息后,返回流
返回填充;
}

std::ostream&operator我已经编写了自己的代码,可以读取文本文件并将信息存储在结构中。一旦你有了一个菜单列表向量,只打印你想要的东西就非常简单了

include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include <vector>

using namespace std;

struct MenuList // Define a "Player" data structure
{
    string itemNo;
    string category;
    string descript;
    double price;
};

void addToList(vector<MenuList*>& vector_menu_list, string& itemNo, string& category, string& descript, string& price)
{
    MenuList* p_menu_list = new MenuList;
    p_menu_list->itemNo = itemNo;
    p_menu_list->category = category;
    p_menu_list->descript = descript;
    p_menu_list->price = std::stod(price);
    vector_menu_list.push_back(p_menu_list);
}

vector<MenuList*> readFile(string filename, bool& error_encountered)
{
    vector<MenuList*> vector_menu_list;

    ifstream file;
    file.open(filename);

    if (file.is_open())
    {
        string itemNo;
        string category;
        string descript;
        string price;
        short number_of_colons_encountered = 0;

        char c;
        while (file.get(c))
        {
            if ('\n' != c && EOF != c)
            {
                if (':' == c)
                {
                    number_of_colons_encountered++;
                    continue;
                }

                switch (number_of_colons_encountered)
                {
                case 0:
                    itemNo += c;
                    break;
                case 1:
                    category += c;
                    break;
                case 2:
                    descript += c;
                    break;
                case 3: 
                    price += c;
                    break;
                default:
                    error_encountered = true;
                    file.close();
                    return vector_menu_list;
                }
            }
            else
            {
                addToList(vector_menu_list, itemNo, category, descript, price);
                itemNo.clear();
                category.clear();
                descript.clear();
                price.clear();
                number_of_colons_encountered = 0;
            }
        }

        addToList(vector_menu_list, itemNo, category, descript, price);

        error_encountered = false;
    }
    else
    {
        error_encountered = true;
    }

    file.close();

    return vector_menu_list;
}
int main()
{
    bool error_encountered;
    vector<MenuList*> p_menu_list = readFile("menu list.txt", error_encountered);

    if (true == error_encountered)
    {
        return -1;
    }

    cout << "List menu items:" << endl;
    for (unsigned long long i = 0; i < p_menu_list.size(); i++)
    {
        cout << p_menu_list.at(i)->itemNo << " ";
        cout << p_menu_list.at(i)->category << " ";
        cout << p_menu_list.at(i)->descript << " ";
        cout << p_menu_list.at(i)->price << endl;
    }

    cout << "\n\nHere are only the prices: " << endl;
    for (unsigned long long i = 0; i < p_menu_list.size(); i++)
    {
        cout << p_menu_list.at(i)->price << endl;
    }

    for (unsigned long long i = 0; i < p_menu_list.size(); i++)
    {
        delete p_menu_list.at(i);
    }
    return 0;
}
包括“stdafx.h”
#包括
#包括
#包括
#包括
使用名称空间std;
struct MenuList//定义一个“Player”数据结构
{
字符串itemNo;
字符串类别;
字符串描述符;
双倍价格;
};
无效添加列表(矢量和矢量菜单列表、字符串和项目编号、字符串和类别、字符串和描述、字符串和价格)
{
菜单列表*p_菜单列表=新建菜单列表;
p_菜单\u列表->项目编号=项目编号;
p_菜单\u列表->类别=类别;
p_菜单\u列表->描述=描述;
p_菜单_列表->价格=标准::stod(价格);
向量菜单列表。向后推(p菜单列表);
}
矢量读取文件(字符串文件名、布尔值和遇到的错误)
{
矢量菜单列表;
ifstream文件;
打开(文件名);
if(file.is_open())
{
字符串itemNo;
字符串类别;
字符串描述符;
串价;
遇到的字符数较短=0;
字符c;
while(file.get(c))
{
如果('\n'!=c&&EOF!=c)
{
如果(':'==c)
{
遇到的字符数++;
继续;
}
开关(遇到的列数)
{
案例0:
itemNo+=c;
打破
案例1:
类别+=c;
打破
案例2:
描述符+=c;
打破
案例3:
价格+=c;
打破
违约:
遇到错误_=true;
file.close();
返回向量菜单列表;
}
}
其他的
{
addToList(矢量菜单列表、项目编号、类别、描述、价格);
itemNo.clear();
类别。清除();
descript.clear();
price.clear();
遇到的列数=0;
}
}
addToList(矢量菜单列表、项目编号、类别、描述、价格);
遇到的错误=错误;
}
其他的
{
遇到错误_=true;
}
file.close();
返回向量菜单列表;
}
int main()
{
遇到布尔错误;
向量p_menu_list=readFile(“menu list.txt”,遇到错误);
if(true==遇到错误)
{
返回-1;
}

cout
cout
cout
cout Wait就这么简单?!你是上帝。请注意
(ifs.good())
它在读取流之前测试流是否良好,在使用坏值之前让您任由读取失败而不被检测。类似于这里描述的问题:继续读取。再次感谢。您可以随时研究使用
#include
,此库允许读取整行字符串另外,我建议您阅读一些关于的文档。通过使用“>>”操作符(如文档中所示),它将允许您仅从字符串中提取价格。