Question

Problème:

J'ai un fichier texte contenant des lignes d'informations selon les besoins ci-dessous sous "fichier txt".J'essaie de cartographier les éléments afin de pouvoir terminer ma mission.En les cartographiant, j'utilise istringstream.Mon problème vient de le faire fonctionner lorsqu'il y a plusieurs mots dans un élément que je souhaite enregistrer dans une seule chaîne.Par exemple, la "Compote de pommes non sucrée", je veux que ce soit une seule chaîne (item.setNewItem).Toute aide serait vraiment appréciée, et comme je suis un étudiant actuel, toute abrutissement pour mon bien serait vraiment appréciée.=)

fichier txt :

1 tasse de sucre | 1 tasse de compote de pommes non sucrées | calorie

Code:

void mapList(ifstream &foodReplace, map<string, Substitutions> &subs)
{
    string line;
    while (getline (foodReplace, line));
    {
        Substitutions item;
        istringstream readLine(line);

        readLine << item.setOldAmount
                 << item.setOldMeasurement
                 << item.setOldItem
                 << item.setNewAmount
                 << item.setNewMeasurement
                 << item.setNewItem;

        subs.insert(pair<string, Substitutions>(item.getOldItem, item));
    }

}
Était-ce utile?

La solution 2

je vraiment j'apprécie l'aide de tout le monde, cela m'a aidé à arriver là où j'en avais besoin même si je n'ai pas utilisé exactement le même code, vous trouverez ci-dessous la solution que j'ai choisie, encore une fois, merci à tous.=)

//function to populate map and update object info
void mapList(fstream &foodReplace, map<string, Substitutions> &subs) 
{
    string line;
    while (getline (foodReplace, line)) //gets the line and saves it to line
    {
        Substitutions item;
        istringstream readLine(line); //reads it into readLine

        //declaring variables
        double amount;
        string unit;
        string ingredient;
        string benefit;

        //gets old ingredient and saves in object
        getIngredient(readLine, amount, unit, ingredient);
        item.setOldAmount(amount);
        item.setOldMeasurement(unit);
        item.setOldItem(ingredient);

        //gets new ingredient and saves to object
        getIngredient(readLine, amount, unit, ingredient);
        item.setNewAmount(amount);
        item.setNewMeasurement(unit);
        item.setNewItem(ingredient);

        //reads in last piece and saves in object
        readLine >> benefit;
        item.setBenefit(benefit);

        //inserts object into map
        subs.insert(pair<string, Substitutions>(item.getOldItem(), item));
    }
}

//function to extract amount-units-ingredient
void getIngredient(istringstream &stream, double &amount, string &unit, string &ingredient)
{
    //resetting variables
    amount = 0;
    unit = "";
    ingredient = "";
    string temp;

    //setting variables
    stream >> amount;
    stream >> unit;
    stream >> temp;

    //read until delimiter is hit
    while (temp != "|")
    {
        ingredient += temp + " ";
        stream >> temp;
    }

    //removes the space at the end of the ingredient
    ingredient = ingredient.substr(0, ingredient.length() - 1);
}

Autres conseils

Vous pouvez simplement fournir un troisième paramètre à getline pour spécifier le délimiteur :

http://www.cplusplus.com/reference/string/string/getline/

Et puis vous pouvez lire les premier et deuxième champs vers « » et le troisième champ vers « | ».

L'appel serait le suivant :

void mapList(ifstream &foodReplace, map<string, Substitutions> &subs)
{
    string line;
    while (getline (foodReplace, line));
    {
        Substitutions item;
        istringstream readLine(line);

        getline(readLine, item.setOldAmount, ' '); //you may need to read this in to a temp string if setOldAmount is an int
        getline(readLine, item.setOldMeasurement, ' ');
        getline(readLine, item.setOldItem, '|');

        getline(readLine, item.setNewAmount, ' '); //you may need to read this in to a temp string if setNewAmount is an int
        getline(readLine, item.setNewMeasurement, ' ');
        getline(readLine, item.setNewItem, '|');

        subs.insert(pair<string, Substitutions>(item.getOldItem, item));
    }

}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top