IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Comparer deux valeurs, suppression de la moins importante des deux


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2019
    Messages : 22
    Par défaut Comparer deux valeurs, suppression de la moins importante des deux
    Salut à tous !

    Je suis actuellement sur un devoir universitaire en programmation C++. Mais je bloque ne maîtrisant pas du tout ce langage je vous demande un peu d'aide.

    Sujet : Le traitement consiste à ouvrir le fichier log.csv et recopier dans un autre fichier (le fichier log-copie.csv) toutes les lignes du fichier log.csv. Par contre, il ne faut pas recopier plusieurs fois les lignes contenant le même numPièce et la même ref mais prendre seulement la ligne contenant la quantité la plus élevée. Par exemple, la ligne N°7 et la ligne N°8 sont identiques car elles contiennent le même numPièce qui est 1 et la même ref qui est 14. Il faut garder la ligne 7 car elle contient la quantité la plus élevée, ici 9. La ligne à supprimer est donc la ligne N°8.

    Je vous joint le document log.csv et voici, la première partie de mon code ou j'arrive à ouvrir le dossier, extraire les valeur, et nommé chaque valeur de chaque colonne. J'aimerai garder intacte la partie de code déjà réalié, puisqu'elle marche.

    log.xlsx

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
     
    #include <fstream> 
    #include <string>
    #include <iostream> // utilisation de la bibliothèque iostream : inputoutput stream
    using namespace std; // utilisation de l'espace de nommage standard
     
    int main()
    {
     
    	ifstream fichier ("log.csv", ios :: in); // on ouvre le fichier en lecture
    	string numPiece;
    	string ref ;
    	string Quantite;
    	int PositionPointVirgule;
    	int PositionPointVirgule2;
    	int Taille;
    	string LignePrecedente;
     
    	if(fichier) // si l'ouverture à reussi
    	{
    		string ligne; 
    		while(getline(fichier, ligne)) // tant que l'on peut mettre la ligne dans "LigneLu"
    			{
     
    				cout<<ligne<<endl; // On affiche 
    				PositionPointVirgule=ligne.find(';');
    				PositionPointVirgule2=ligne.rfind(';');
    				Taille = ligne.length();
    				//cout<<"Taille: "<<Taille-1<<endl;
    				//cout<<"PositionPointVirgule: "<<PositionPointVirgule2<<endl;
    				numPiece=ligne.substr(0,PositionPointVirgule);
    				ref=ligne.substr(PositionPointVirgule+1,PositionPointVirgule2-PositionPointVirgule-1);
    				Quantite=ligne.substr(PositionPointVirgule2+1,(Taille-1)-PositionPointVirgule2);
    				//cout << "Quantite : "<<Quantite<<endl;
     
    				// if ligne précédante à la même référence, comparer les quantité de toutes les réf identiques
    				// Garder uniquement la ligne qui à la quantité la plus grande 
    				// côpier la ligne dans le dossier
    			//}
    		//do
    			//{
    				//LignePrecedente = ligne;
    					//cout<<"Ligne précédente est :"<<LignePrecedente<<endl;
     
     
    		fichier.close (); // on ferme le fichier
    		}
    	}
    	else // sinon 
    		cerr << "Impossible d'ouvrir le fichier" << endl;
    	return 0;
    }
    Merci d'avance !

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 470
    Par défaut
    Vous êtes complètement perdu.
    Ici c'est du C++/CLI, dialecte du C++ spécifique à Windows .NET.
    (à moins que le fichier xlsx en PS n'est pas une fausse manipulation, car C++/CLI permet d'avoir accès à .NET donc à facilement décortiquer les fichiers Excel 2003 et supérieur)

    using namespace std; // utilisation de l'espace de nommage standard
    être compatible avec des compilateurs ne respectant pas la première norme C++ de 1998, c'est dans le cahier des charges de votre code ?
    Il a quel age votre prof ?
    90 ans ?
    Dégagez moi cette cochonnerie et utilisez "std::" là où c'est nécessaire. Mort bleu.

    Le format CSV est bien plus complexe que ce que vous semblez connaitre.
    Donc, pas la peine de réinventer une roue carrée :
    http://lmgtfy.com/?q=c%2B%2B+csv+parser+semicolon

    (gestion de l'en-tête, etc..., à vérifier, il y a souvent des roues carrées sur Internet )

    Déjà, vous utilisez des std::string et pas des char[], votre prof a 90ans mais il connait la différence entre le C et le C++.

    J'aimerai garder intacte la partie de code déjà réalisé, puisqu'elle marche.
    Arrêtez d'être pusillanime.
    Les zombis aussi marchent, c'est pas pour cela qu'ils battent le record du 100 m.

    Votre code est bien trop fragile et il y manque l'essentiel (cast en entier, utilisation de map pour le tri, etc...).
    A la rigueur, il servira à comparer les parsers de fichier CSV que vous trouverez sur le Net.

    Avant de coder, vous deviez avoir fait l'algorithme à implémenter sur papier.

    Utilisez des map de tuple<int,int> pour stocker le maximum de la paire <numPièce,ref>, puis utilisez le contenu de cette map pour construire le fichier en sortie.
    https://fr.cppreference.com/w/cpp/container/map
    https://fr.cppreference.com/w/cpp/utility/tuple

    P.S.: c'est le genre de truc qu'on fait avec des outils d'ETL, pas avec un programme console C/C++ fait sur un coin de table. (Encore des exercices débiles)

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2019
    Messages : 22
    Par défaut
    La première partie du code à été réalisé avec l'aide de notre prof, une modification de celui ci, voudrait dire qu'on à forcement demander de l'aide. Mais je comprend votre point de vue, il n'a pas 90 ans peut être 45 ans. Son cours n'est pas développé, nous avons seulement une deux séances de cours et il nous demande un programme comme celui-ci pour nous évaluer. Problème on ne maitrise pas du tout ce langage.

    MAis votre message ne m'avance pas beaucoup sur ce que je dois faire

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 470
    Par défaut
    MAis votre message ne m'avance pas beaucoup sur ce que je dois faire
    What, c'est quasiment tout algo. que je donne :
    Utilisez des map de tuple<int,int> pour stocker le maximum de la paire <numPièce,ref>, puis utilisez le contenu de cette map pour construire le fichier en sortie.
    https://fr.cppreference.com/w/cpp/container/map
    https://fr.cppreference.com/w/cpp/utility/tuple
    Vous lisez une ligne, vous cherchez la paire <numPièce,ref> dans la map, :
    elle y n'est pas, vous ajoutez la paire comme clé de l’élément de la map et la valeur de la troisième colonne du fichier comme valeur de l’élément de la map.
    elle y est, vous vérifiez que la valeur associé est supérieur à la valeur de la troisième colonne du fichier, sinon, vous remplacez dans la map cette valeur.
    Lisez la documentation de std::map et de std::tuple.
    Ça tombera pas tout seul dans votre bec.

    Une fois la map rempli avec toutes les lignes du fichier, vous copiez le contenu de la map dans le fichier de sortie, c'est tout.

    Pour la conversion std::string en entier, pour la valeur de la 3ème colonne du fichier : "std::stoi":
    http://www.cplusplus.com/reference/string/stoi/

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2019
    Messages : 22
    Par défaut
    Je ne l'avais pas vu comme ca, merci je vais me pencher dessus longuement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [DeskI XiR2] Comparer les valeurs de deux colonnes
    Par EmmanuelleC dans le forum Débuter
    Réponses: 2
    Dernier message: 27/02/2009, 08h45
  2. Comparer deux valeurs avec javascript (td caché et zone de texte)
    Par beegees dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/01/2009, 12h57
  3. [MySQL] Comparer deux valeurs depuis deux tables
    Par jbidou88 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 03/03/2008, 14h20
  4. Comparer deux valeurs d'un champ
    Par goulhasch dans le forum Macro
    Réponses: 7
    Dernier message: 13/09/2007, 09h44
  5. Comparer une valeur à plus ou moins quelque chose...?
    Par Thierry8 dans le forum Langage
    Réponses: 4
    Dernier message: 11/10/2005, 13h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo