Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1959 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  aide écriture code c++ recherche et cumul de nombres

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

aide écriture code c++ recherche et cumul de nombres

n°2370807
redscreen
Posté le 09-12-2020 à 13:15:55  profilanswer
 

bonjour à tous.
j'avais commencé à apprendre les bases du C++ mais vite arrêté par manque de temps...
 
aujourd'hui j'aimerais écrire un petit programme qui :
 
ouvre et lit un "fichier.txt" (~2000 lignes), et fait le cumul des nombres qui se trouvent juste avant chaque caractère "€".
 
 
j'ai comme base un bout de code qui fait un cumul, mais le fichier ne doit contenir que des chiffres tel 0 2 5 8 etc...
c'est à améliorer... :
 

Code :
  1. #include <fstream> // pour ifstream ( flux fichier)
  2. #include <iostream> // pour cin et cout
  3. #define NOM_FICHIER "liste.txt"
  4. using namespace std; // déclaration espace de nom STL par défaut (éviter la résolution de nom d'espace std:: à chaque fois)
  5. int main(int argc, char *argv[])
  6. {
  7. int Cumul; // cumul des chiffres
  8. int Num; // chiffre individuel à lire
  9. ifstream Fichier; // objet Fichier à lire
  10. Fichier.open(NOM_FICHIER); // ouvrir le flux E/S (Fichier)
  11. if (!Fichier) { // si le fichier est ouvert correctement
  12.     cout << "Opps! erreur d'ouverture du fichier :" << NOM_FICHIER << endl; // informe d'une erreur
  13.  cout << "Presser une touche pour terminer...";
  14.  cin.get(); // attend une entrée clavier
  15.     return 1; // sortie signalant un échec  
  16. }
  17. Cumul = 0; // initialise le cumul  
  18. while (Fichier >> Num) // lire tant qu'il y a des chiffres à lire
  19.  Cumul += Num; // ajoute le chiffre lu au cumul
  20. Fichier.close(); // fermer le flux E/S (Fichier)
  21. cout << "Cumul = " << Cumul << endl; // aficher le cumul et un CR/LF
  22. cout << "Presser une touche pour terminer...";
  23. cin.get(); // attend une entrée clavier
  24. return 0;
  25. }


 
si quelqu’un pouvait m'aider...,
j'ai clairement des lacunes en C++, mais j'ai je voudrais m'améliorer.
(au passage, si vous connaissez un bon site pour apprendre de bonnes bases).
 
merci.  :hello:


Message édité par redscreen le 10-12-2020 à 13:01:08
mood
Publicité
Posté le 09-12-2020 à 13:15:55  profilanswer
 

n°2370954
redscreen
Posté le 10-12-2020 à 12:52:13  profilanswer
 

Bon bien je fais question et réponse...
 
Ma "liste.txt" a comme format :
 
blabla blablabla ->15€
blabla 2 blablabla ->11€
blablablablabla ->3€
etc...
 
et voici mon code :
 

Code :
  1. #include <iostream> // pour cin et cout
  2. #include <string>
  3. #include <cstring> // ancienne bibliothèque utilisée en C
  4. #include <fstream> // pour ifstream (flux fichier)
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. using namespace std;
  8. int main()
  9. {
  10. char a[255], separator[] = ">", chiffre[] = "0123456789", *p;
  11. int somme = 0;
  12. fstream f("liste.txt", ios::in);
  13. if (!f) {
  14.  cout << "Erreur d'ouverture du fichier!" << endl;
  15.  return 1;
  16. }
  17. while (!f.eof()) {
  18.  f.getline(a, 255, '\n');
  19.  p = strtok(a, separator); // sépare la chaine avec ">"
  20.  while (p) {
  21.   if (strspn(p, chiffre) == strlen(p))
  22.    somme += atoi(p);
  23.   cout << p << "\n";
  24.   p = strtok(NULL, separator);
  25.  }
  26. }
  27. cout << "Total = " << somme << " euros" << endl;
  28. return 0;
  29. }


 
J'aimerais pouvoir "spliter" sur le caractère €, mais il est non reconnu..., comment faire ?
(Pour que ça fonctionne, pour le moment je dois supprimer tous les signes "€" de ma "liste.txt" )
 
Je transforme donc ma question en :
 
Comment reconnaitre le caractère " € " dans une chaine de caractères en C++ ?


Message édité par redscreen le 10-12-2020 à 13:02:02
n°2371093
rat de com​bat
attention rongeur méchant!
Posté le 10-12-2020 à 20:55:10  profilanswer
 

Le signe '€' n'est pas du ASCII, il doit être encodé en UTF-8 ou autre. Je ne parle pas C++, mais tu devrais trouver sur internet comment faire avec ces mots-clé, genre "read UTF-8 file C++".
 
Sinon pour ton code attention aux "nombres magiques", tu devrais utiliser un #define ou une constante pour le 255 histoire de ne pas avoir à changer la valeur à plusieurs endroits si il faut.

n°2371156
redscreen
Posté le 11-12-2020 à 12:03:57  profilanswer
 

merci pour ta réponse
oui j'ai vu que ce n'était pas de l'ASCII, (l'ASCII est plus ancien que l'euro...), et du coup j'avais essayé de convertir mon txt en UTF8, mais rien de mieux...
bonne remarque pour le 255, habitude à prendre. (pour ce petit programme ça fera l'affaire).
j'ai réussi à faire exactement ce que je voulais avec NodeJs, mais en C++ j'ai toujours du mal.
je vais relire quelques cours... et si un pro C++ passe par là... :jap:  

n°2385869
djinto
Posté le 21-05-2021 à 00:17:41  profilanswer
 

Bonjour,
comme le nombre de données est important,
utilises la ressource "expressions régulières",
c'est comme if ( la chaine == nombre + caractere euro ).
les expressions régulières permettent de définir un schèma.
de l'utiliser comme 'critère de recherche' dans un ensemble + grand.
 
et aussi de récupérer toutes les occurences 'trouvées' de ton schèma,
dans un tableau de 'output'.
C'est le plus pratique sur des échantillons de données important...
 
pour tester si une chaine est 'numerique' , il y a des fonctions natives qui sont simples.
Mais pour des fichiers de données, sans en connaitre d'avance le nombre, et la taille des fichiers , les expressions régulières font ça trés bien.
C'est dédié à cet usage. Imbattable pour ce type de recherche.
et pour ton schèma : tu es sur ( { des chiffres ... } puis le symbole 'currency' ) .
 
 
Attention au références sur Internet , car toutes regExp sont en 'variantes' selon le langage concerné.
Les syntaxes sont parfois différentes.
c'est vraiment "C++ regexp " qui convient.
 
 
 


---------------
Nom : Prénom : Age : Adresse : Ville : Code Postal : Num Trois Tel

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  aide écriture code c++ recherche et cumul de nombres

 

Sujets relatifs
Besoin d'aide pour créer un site B2B[Résolu] aide pour manipulation fichier texte en powershell
Aide sur une amélioration d'un script powershell[Résolu] [JS] Besoin d’aide sur réalisation d’un convertisseur dec/hex
Besoins d'aide installation auto shop phpun code php qui déconne (erreur bête surement )
Aide exercice assembleur[KSH-88] récupérer le code retour d'un sous-shell
[Python] Utilisation d'un code existantPHP PSQL Aide sur un moteur de recherche
Plus de sujets relatifs à : aide écriture code c++ recherche et cumul de nombres


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR