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
Merci d'avance !
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; }
Partager