Correction de mon code...

Correction de mon code... - C++ - Programmation

Marsh Posté le 16-05-2003 à 00:46:48    

Salut,
 
alors histoire de vérifier tout de suite que j'ai pas fait de grosses boulettes, je voudrais soumettre mon code à vos yeux aguerris...
 
Je tiens à préciser que ce code fonctionne bien tel quel. Ce que je veux juste savoir, c'est s'il ne fonctionnerait pas malgré quelques (?) erreurs dont je n'aurais pas conscience...
 
Tout commence avec la déclaration des structures:

Code :
  1. struct ContenuUneStatUnXML
  2. {
  3.   AnsiString NomStat;
  4.   vector<int> VecUneStatUnXML; //Contient chaque Frame
  5. };
  6. struct ContenuTtesStatUnXML
  7. {
  8.   AnsiString PathXML;
  9.   vector<ContenuUneStatUnXML> VecTtesStatUnXML;
  10. };


 
Ensuite voilà seulement les fonctions concernées:

Code :
  1. void __fastcall TListeMatchesForm::CreerClipClick(TObject *Sender)
  2. {
  3. bool AUnParent = false;
  4. vector<int> VecSelectedIndex;
  5. vector<int> VecSelectedStats;
  6. VecSelectedIndex.clear();
  7. VecSelectedStats.clear();
  8. if (ListeMatches->Selected->Parent)
  9.   AUnParent = true;
  10. //On remplit VecSelectedIndex avec l'index de chacun des fichiers sélectionnés
  11. if (AUnParent)
  12.   VecSelectedIndex.push_back(ListeMatches->Selected->Parent->Index);
  13. else
  14.   for (unsigned int i=0; i < ListeMatches->SelectionCount; i++)
  15.   VecSelectedIndex.push_back(int(ListeMatches->Selections[i]->Index));
  16. //On remplit VecSelectedStats avec l'index de chacune des stats choisies
  17. for (int i=0; i < ListeStats->Items->Count; i++)
  18.   if (ListeStats->Selected[i])
  19.     VecSelectedStats.push_back(i);
  20. if (MakeClip(VecSelectedIndex,VecSelectedStats))
  21.   ShowMessage("Le clip est réalisé" );
  22. }


 

Code :
  1. bool __fastcall TListeMatchesForm::MakeClip(
  2.     vector<int> &VecSelectedIndex,
  3.     vector<int> &VecSelectedStats)
  4. {
  5. NomSelectionne = "";
  6. //Si on a choisi une équipe, EquipeChoisie = true, sinon false
  7. EquipeChoisie = true;
  8. if (EquipeChoisie = (ListeJoueurs->ItemIndex == -1))
  9.   NomSelectionne = ListeEquipes->Items->Strings[ListeEquipes->ItemIndex];
  10. else
  11.   NomSelectionne = ListeJoueurs->Items->Strings[ListeJoueurs->ItemIndex];
  12. //On va créer VecTtesStatsTsXML qui contiendra toutes les données
  13. vector<ContenuTtesStatUnXML> VecTtesStatsTsXML;
  14. VecTtesStatsTsXML.clear();
  15. for (unsigned int i=0; i < VecSelectedIndex.size(); i++)
  16. {
  17.   int IndexDsContenu = VecSelectedIndex[i];
  18.   //On enregistre le path du XML qui va être analysé
  19.   AnsiString PathXML = VecListeMatches[IndexDsContenu].PathFichierStats;
  20.   //On va chercher dans les fichiers de stats choisis les données
  21.   //pour le clip vidéo
  22.   if (!RemplirVecTSTX(VecTtesStatsTsXML,VecSelectedStats,PathXML))
  23.     return false;
  24. }
  25. return true;
  26. }


 

Code :
  1. bool __fastcall TListeMatchesForm::RemplirVecTSTX(
  2.     vector<ContenuTtesStatUnXML> & VecTtesStatsTsXML,
  3.     vector<int> & VecSelectedStats,
  4.     AnsiString PathXML)
  5. {
  6. //On crée une nouvelle structure qui contiendra le nom de la stat et les
  7. //frames correspondantes pour un fichier
  8. ContenuUneStatUnXML CUSUX;
  9. //On crée une nouvelle structure qui contiendra le path du fichier stat
  10. //et une structure CUSUX pour chaque stat choisie
  11. ContenuTtesStatUnXML CTSUX;
  12. //On place le path du XML des stats pour pouvoir le distinguer des autes
  13. //CTSUX
  14. CTSUX.PathXML = PathXML;
  15. XMLStats->FileName = PathXML;
  16. XMLStats->Active = true;
  17. if (!XMLStats->Active)
  18.   return false;
  19. _di_IXMLNode PtrContenu = XMLStats->DocumentElement;
  20. //On scanne dans l'ordre:
  21. // * les équipes
  22. int NbreJoueurs = PtrStaff->ChildNodes->GetCount();
  23. int NbreStatsChoisies = VecSelectedStats.size();
  24. int NbreStats = PtrStatGlob->ChildNodes->GetCount();
  25. for (int i=0; i < 2; i++)
  26. {
  27.   _di_IXMLNode PtrEquipe = PtrContenu->ChildNodes->GetNode(i);
  28.   AnsiString NomEquipe = PtrEquipe->GetAttribute("Equipe" );
  29.   _di_IXMLNode PtrStaff = PtrEquipe->ChildNodes->GetNode(0);
  30.   //On remet à zéro la liste des frames
  31.   CUSUX.VecUneStatUnXML.clear();
  32.   // * les joueurs
  33.   for (int j=0; j < NbreJoueurs; j++)
  34.   {
  35.     _di_IXMLNode PtrJoueur = PtrStaff->ChildNodes->GetNode(j);
  36.     AnsiString NumNomJoueur = PtrJoueur->GetAttribute("Nom" );
  37.     char * NomJoueur = NumNomJoueur.c_str();
  38.     NomJoueur = strchr(NomJoueur,' ') + 1;
  39.     //Si on a choisi un joueur, on arrête la boucle si on n'a
  40.     //pas choisi une équipe et si le nom scanné correspond
  41.     //au joueur choisi
  42.     if (EquipeChoisie || (AnsiString(NomJoueur) == NomSelectionne))
  43.     {
  44.     //On remet à zéro la liste des stats déjà scannées
  45.     CTSUX.VecTtesStatUnXML.clear();
  46.     // * les categories de stats
  47.     for (unsigned int k=0; k < NbreStatsChoisies; k++)
  48.     {
  49.       _di_IXMLNode PtrStatGlob = PtrJoueur->ChildNodes->GetNode(VecSelectedStats[k]);
  50.       //On ajoute à CUSUX le nom de la stat
  51.       //pour la distinguer
  52.       CUSUX.NomStat = pListeStats[VecSelectedStats[k]];
  53.       // * les stats individuellement
  54.       for (int l=0; l < NbreStats; l++)
  55.       {
  56.         _di_IXMLNode PtrStat = PtrStatGlob->ChildNodes->GetNode(l);
  57.         int FrameStat = PtrStat->GetNodeValue();
  58.         //On ajoute au vecteur de CUSUX la
  59.         //Frame actuelle
  60.         CUSUX.VecUneStatUnXML.push_back(FrameStat);
  61.       }
  62.       //On ajoute au vecteur de CTSUX la catégorie
  63.       //de stat scannée juste avant
  64.       CTSUX.VecTtesStatUnXML.push_back(CUSUX);
  65.     }
  66.   }
  67. }
  68. //Si on a choisi une équipe, on arrête la boucle quand le nom
  69. //scanné correspond au nom choisi
  70. if (EquipeChoisie && (NomEquipe == NomSelectionne))
  71.   break;
  72. }
  73. //On ajoute au vecteur qui contient toutes les données le résultat du scan
  74. //de ce fichier XML de stats...
  75. VecTtesStatsTsXML.push_back(CTSUX);
  76. return true;
  77. }


 
Si vous pouviez me dire quoi, notamment au niveau des passages par référence, notamment pour la dernière fonction RemplirVecTSTX:
Je déclare CUSUX et CTSUX dans cette fonction... hors, après l'appel à cette fonction dans MakeClip, je dois récupérer tout ce qui a été enregistré dans ces structures...
 
Que vaut-il mieux que je fasse:
Comme maintenant, et après l'appel à RemplirVecTSTX redéclarer CUSUX et CTSUX? J'ai essayé, ça fonctionne, mais je ne sais pas si c'est la manière de procéder...
 
Ou bien déclarer CUSUX et CTSUX avant d'appeller RemplirVecTSTX, et passer ces deux structures par référence?
 
J'attends vos avis...
 
Merci d'avance!!


---------------
Another .Net Blog
Reply

Marsh Posté le 16-05-2003 à 00:46:48   

Reply

Marsh Posté le 16-05-2003 à 09:50:39    

j'ai rien compris: t'es sur que ton code nous est utile? c'est pas plutot un problème de conception?

Reply

Marsh Posté le 16-05-2003 à 19:03:08    

Effectivement ce code ne vous servira pas à grand chose...
 
Il sert à parcourir un fichier XML pour récupérer des données qui y sont contenues.
 
Ce que je voulais juste savoir, c'est si mes références dans mes paramètres de fonctions sont correctes, et pour quel choix je devrai opter concernant ma dernière question:
 
déclarer les structures avant l'appel à RemplirVecTXTS et utiliser des références à ces structures dans cette fonction
 
ou bien les déclarer dans la fonction pour remplir les vecteurs de ces structures, et les déclarer une nouvelle fois dans la fonction appellante pour pouvoir exploiter le contenu de ces vecteurs...
 
Voilà tout...


---------------
Another .Net Blog
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed