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

MFC Discussion :

[CListCtrl] Tri de fichiers


Sujet :

MFC

  1. #1
    Membre actif Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Points : 257
    Points
    257
    Par défaut [CListCtrl] Tri de fichiers
    Avez vous eja essayé de faire un tri d'une liste de fichiers selon une date.
    Les fichiers sont ajoutés un a un en utilisant la date de creation.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ...
    SYSTEMTIME localTime, fileTime
    FileTimeToSystemTime(&fileTime, fileFindData.ftLastWriteTime);
    SystemTimeToTzSpecificLocalTime(NULL, &fileTime, &localTime);
     
    m_ctlSeq.SetItemData(nItem, (DWORD_PTR)&localTime);
    ...
     
    m_ctlSeq.SortItems(MyCompareProc, 0);
    Avec la procédure de tri :

    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
    static int CALLBACK  MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
    {
      SYSTEMTIME  * time1 = (SYSTEMTIME*) lParam1;
      SYSTEMTIME  * time2 = (SYSTEMTIME*) lParam2;
     
      if ( memcmp(time1, time2, sizeof(SYSTEMTIME)) == 0 ) return 0;
     
      if ( (time1->wYear < time2->wYear) || (time1->wMonth < time2->wMonth) || (time1->wDay < time2->wDay) ||
           (time1->wHour < time2->wHour) || (time1->wMinute < time2->wMinute) || (time1->wSecond < time2->wSecond) )
      {
        if ( lParamSort == 0 ) { return -1; }
        else  { return 1; }
      }
      else if ( lParamSort == 0 )  { return 1; }
      else { return -1; }
     
    }
    Mais il m'est impossible de faire un tri correct. j'ai essayé plein de solutions...

    avez vous une meilleure solution ? merci d'avance !

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    moi je convertirai les deux dates en chaine de caracteres ou objets CString.
    en mettant dans l'ordre: l'année le mois le jour.
    apres tu renvois le retour de strcmp des deux chaines suivant les cas...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Points : 347
    Points
    347
    Par défaut
    Bonjour

    Ta fonction de comparaison de date n'est pas correct.

    Tu peux changer tes SYSTEMTIME en FILETIME puis utiliser la fonction CompareFileTime pour faire la comparaison
    http://msdn.microsoft.com/library/de...refiletime.asp

    cordialement

  4. #4
    Membre actif Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Points : 257
    Points
    257
    Par défaut
    Farscape :
    j'ai essayé plein de solutions possibles, en passant par le nom du fichier puis faire un CFile::GetStatus().

    J'ai essayé la solution proposée par ricky...
    pour l'instant, ca ne semble pas marcher... le résultat est le méme quelque soit ma valeur de lParamSort :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      FILETIME * time1 = (FILETIME *) lParam1;
      FILETIME * time2 = (FILETIME *) lParam2;
     
      long result = CompareFileTime(time1, time2);
     
      if ( lParamSort == 0 )
        return -result;
      return result;
    En fait, je crois que le mieux, c'est d'avoir une représentation numérique de la date et de l'heure, en passant par un long par exemple... y a t il quelque chose qui permette ca ?

    [edit] je vais devenir gaga avec leurs fonctions sur les heures...
    RtlTimeToSecondsSince1970() et consors

    [edit2] la doc MFC parle de 32-bit value qui est fournie a SetItemData().
    je peux bien passer un ULARGE_INTEGER *, non ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Points : 542
    Points
    542
    Par défaut
    Citation Envoyé par Rupella
    En fait, je crois que le mieux, c'est d'avoir une représentation numérique de la date et de l'heure, en passant par un long par exemple... y a t il quelque chose qui permette ca ?

    [edit] je vais devenir gaga avec leurs fonctions sur les heures...
    RtlTimeToSecondsSince1970() et consors
    Inutile de réinventer la roue,

    la classe CTime implémente tous les opérateurs de comparaison :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      CTime t1 (* reinterpret_cast<const FILETIME*> (lParam1));
      CTime t2 (* reinterpret_cast<const FILETIME*> (lParam2));
     
      if (t1 == t2)
        return 0;
      else
        return (t1 < t2 ? - 1 : 1);

  6. #6
    Membre actif Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Points : 257
    Points
    257
    Par défaut
    Ca ne fonctionne pas non plus
    Par exemple pour deux valeurs que je stocke, elles sont différentes, mais lors de l'appel à la fonction de tri, lParam1 et lParam2 sont identiques...

  7. #7
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    bon je viens de faire une recherche dans mes codes la solution de ricky doit fonctionner j'ai un code similaire.
    tu dois te planter sur ton InsertItem en precisant le itemdata...

  8. #8
    Membre actif Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Points : 257
    Points
    257
    Par défaut
    Je peux laisser mon projet pour que vous voyiez si je fais une connerie ?
    Merci, merci
    ScrutePDFs.zip

    (faut pas avoir peur du code, me demander au besoin)...
    les fichiers PDFs que je cherche sont de la forme XX_flkgjdmfkj.pdf
    avec XX correspondant à un code produit... les fichiers sont triés par code produit dans une map...

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Points : 542
    Points
    542
    Par défaut
    Citation Envoyé par Rupella
    Je peux laisser mon projet pour que vous voyiez si je fais une connerie ?
    Merci, merci
    ScrutePDFs.zip

    (faut pas avoir peur du code, me demander au besoin)...
    les fichiers PDFs que je cherche sont de la forme XX_flkgjdmfkj.pdf
    avec XX correspondant à un code produit... les fichiers sont triés par code produit dans une map...
    Ton bug est relativement évident :

    Dans CScrutePDFsDlg::OnBnClickedButton1(), c'est le même objet, plusVieux en l'occurence, qui est utilisé pour définir le paramètre utilisateur des items de m_ctlSeq :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            m_ctlSeq.SetItemData(nItem, (DWORD_PTR)&plusVieux.m_fileTime);
    Résultat des courses, tous les items ont le même paramètre (adresse du champ m_fileTime), et donc au moment du tri la valeur pointée est toujours la dernière mise dans plusVieux.m_fileTime, ce quel que soit l'item !

  10. #10
    Membre actif Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Points : 257
    Points
    257
    Par défaut
    ben, c'est ce que j'ai vu apres coup... j'ai modifié ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    FILETIME newFileTime;
    memcpy(&newFileTime, &plusVieux.m_fileTime, sizeof(FILETIME));
    m_ctlSeq.SetItemData(nItem, (DWORD_PTR)&newFileTime);
    mais c toujours autant le bazard... dans les traces, il y a des appels qui n'ont pas la meme valeur, mais souvent, j'ai des appels avec la meme valeur...

    [Edit] en regardant l'implémentation de CListCtrl::SetItemData(), j'ai bien des valeurs différentes lors de l'appel... et bien autant de valeurs différentes qu'il y a de lignes d'insérées

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Points : 542
    Points
    542
    Par défaut
    Si newFileTime est un objet unique réutilisé au gré des itérations, ça ne changera rien au problème.

    L'erreur de conception vient de ce que la fonction de tri doit disposer de tous les stamps au moment de son exécution. Il faut donc tous les stocker ... à un endroit différent.

    Par exemple :

    dans ScrutePDFsDlg.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class CScrutePDFsDlg : public CDialog
    {
      ...
     
      protected:
        std::vector<FILETIME> m_vstamps;  // nouvelle variable membre
     
      ...
    };
    dans ScrutePDFsDlg.cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void CScrutePDFsDlg::OnBnClickedButton1()
    {
      ...
      m_vstamps.clear ();
      for ( ... ; ... ; ...)
      {
        m_vstamps.push_back (plusVieux.m_fileTime);
        m_ctlSeq.SetItemData (nItem, (DWORD_PTR) &m_vstamps[m_vstamps.size () - 1]);
      }
      ...
      m_ctlSeq.SortItems(MyCompareProc, (LPARAM) 0);
    }
    C'est un exemple : il y a évidemment d'autres façons de faire.

  12. #12
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    tu peux aussi stocker directement une allocation mémoire dans setItemData.

  13. #13
    Membre actif Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Points : 257
    Points
    257
    Par défaut
    J'ai essayé, mais dans le code de la fonction, j'ai une levée d'exception...

    E_INVALIDARG... le code est celui que tu donnes plus haut :
    CTime t1 (* reinterpret_cast<const FILETIME *> (lParam1));

    [edit]
    j'avais pas vu ton post farscape
    je suis désolé vous deux, j'ai les fils qui se touchent trop!
    merci de l'aide que vous tentez de m'apporter...
    farscape : que faut il que j'alloue ? quand est ce que je libère ?
    comment tu fais ton alloc ?

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Points : 542
    Points
    542
    Par défaut
    Citation Envoyé par Rupella
    J'ai essayé, mais dans le code de la fonction, j'ai une levée d'exception...

    E_INVALIDARG... le code est celui que tu donnes plus haut :
    CTime t1 (* reinterpret_cast<const FILETIME *> (lParam1));
    Cette exception est levée lorsque lParam1 n'est pas valide (FILETIME inconsistant). Et c'est visiblement le cas dans ton code.

    Le problème n'est pas ici mais en amont (cf mon précédent post).

  15. #15
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    ton probleme est donc à l'insertion de la donnée avec SetItemData.
    celle-ci doit etre persistante, le mieux etant une allocation mémoire ou l'adresse d'un élément d'une liste (persistante à la classe bien sûr).

  16. #16
    Membre actif Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Points : 257
    Points
    257
    Par défaut
    ben... j'ai fait les modifs que tu m'as indiqué...

    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    void CScrutePDFsDlg::OnBnClickedButton1()
    {
      std::list < std::string > :: const_iterator itRepertoires;
    
      std::multimap < std::string , _SProduitFile > mapFiles;
    
      m_ctlListPDFs.ResetContent();
      m_ctlSeq.DeleteAllItems();
      for ( itRepertoires = listRepertoires.begin() ; itRepertoires != listRepertoires.end() ; ++itRepertoires )
      {
        std::string strPointEntree = *itRepertoires;
        std::string strRecherche = strPointEntree + _T("\\*.PDF");
        HANDLE hFindPDFs;
        WIN32_FIND_DATA fileFindData;
    
        hFindPDFs = FindFirstFile(strRecherche.c_str(), &fileFindData);
        if ( hFindPDFs != INVALID_HANDLE_VALUE )
        {
          do
          {
            // On recherche les fichiers uniquement
            if ( (fileFindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0 )
            {
              std::string strPathComplet = strPointEntree + _T("\\") + fileFindData.cFileName;
    
              std::string strProduit = std::string(fileFindData.cFileName);
              strProduit.erase(strProduit.begin() + 2, strProduit.end());
              _SProduitFile fichier;
              fichier.m_strFileName = strPathComplet.c_str();
              fichier.m_fileTime = fileFindData.ftLastWriteTime;
    
              mapFiles.insert(std::multimap<std::string, _SProduitFile>::value_type(strProduit, fichier));
    
            }
          }
          while(FindNextFile(hFindPDFs, &fileFindData));
          FindClose(hFindPDFs);
        }
      }
    
      _SProduitFile plusVieux;
      std::string strProduitCourant = _T("");
      int nCountPrd = 0;
      m_vstamps.clear ();
    
      std::multimap<std::string, _SProduitFile>::const_iterator itFiles;
      for ( itFiles = mapFiles.begin() ; itFiles != mapFiles.end() ; ++itFiles )
      {
        std::string strProduit = itFiles->first;
        _SProduitFile fileData = itFiles->second;
    
        if ( strProduitCourant != _T("") )
        {
          if ( strProduitCourant != strProduit )
          {
            m_ctlListPDFs.AddString(_T("---------------------------------------------------------------------------------------"));
            SYSTEMTIME localTime;
            GetLocalFileTime(&localTime, &plusVieux.m_fileTime);
            CString strFormatHeure;
            strFormatHeure.Format(_T("Fichier le plus vieux pour les %s, date du %02d-%02d-%04d à %02d:%02d:%02d et s'appelle %s"), 
                                  strProduitCourant.c_str(),
                                  localTime.wDay, localTime.wMonth, localTime.wYear, localTime.wHour, localTime.wMinute, localTime.wSecond,
                                  plusVieux.m_strFileName.c_str());
            m_ctlListPDFs.AddString(strFormatHeure);
    
            int nItem = m_ctlSeq.GetItemCount();
            m_ctlSeq.InsertItem (nItem, strProduitCourant.c_str());
            strFormatHeure.Format(_T("%d"), nCountPrd);
            m_ctlSeq.SetItem (nItem, LIST_COL_NOMBRE,     LVIF_TEXT, strFormatHeure, 0, 0, 0, 0);
            strFormatHeure.Format(_T("%02d-%02d-%04d à %02d:%02d:%02d"), 
                            localTime.wDay, localTime.wMonth, localTime.wYear, localTime.wHour, localTime.wMinute, localTime.wSecond);
            m_ctlSeq.SetItem (nItem, LIST_COL_DATE_HEURE, LVIF_TEXT, strFormatHeure, 0, 0, 0, 0);
    
            m_vstamps.push_back (plusVieux.m_fileTime);
            m_ctlSeq.SetItemData (nItem, (DWORD_PTR) &m_vstamps[m_vstamps.size () - 1]);
            strProduitCourant = strProduit;
            plusVieux.m_strFileName = _T("");
            nCountPrd = 0;
          }
        }
        else
        {
          nCountPrd = 0;
          strProduitCourant = strProduit;
          plusVieux.m_strFileName = _T("");
        }
    
        if ( plusVieux.m_strFileName == _T("") )
        {
          plusVieux.m_strFileName = fileData.m_strFileName;
          memcpy(&plusVieux.m_fileTime, &fileData.m_fileTime, sizeof(FILETIME));
        }
        else
        {
          if ( CompareFileTime(&fileData.m_fileTime, &plusVieux.m_fileTime) == -1 )
          {
            plusVieux.m_strFileName = fileData.m_strFileName;
            memcpy(&plusVieux.m_fileTime, &fileData.m_fileTime, sizeof(FILETIME));
          }
        }
    
        SYSTEMTIME fichierLocalTime;
        GetLocalFileTime(&fichierLocalTime, &fileData.m_fileTime);
        CString strFormat;
        strFormat.Format(_T("Produit %s, fichier %s, date %02d-%02d-%04d à %02d:%02d:%02d"), 
                        strProduit.c_str(), 
                        fileData.m_strFileName.c_str(), 
                        fichierLocalTime.wDay, fichierLocalTime.wMonth, fichierLocalTime.wYear, fichierLocalTime.wHour, fichierLocalTime.wMinute, fichierLocalTime.wSecond);
        m_ctlListPDFs.AddString(strFormat);
    
        nCountPrd++;
      }
    
      m_ctlListPDFs.AddString(_T("---------------------------------------------------------------------------------------"));
      CString strFormat;
      SYSTEMTIME localTime;
      GetLocalFileTime(&localTime, &plusVieux.m_fileTime);
      strFormat.Format(_T("Fichier le plus vieux pour les %s, date du %02d-%02d-%04d à %02d:%02d:%02d et s'appelle %s"), 
                      strProduitCourant.c_str(),
                      localTime.wDay, localTime.wMonth, localTime.wYear, localTime.wHour, localTime.wMinute, localTime.wSecond,
                      plusVieux.m_strFileName.c_str());
      m_ctlListPDFs.AddString(strFormat);
    
      int nItem = m_ctlSeq.GetItemCount();
      m_ctlSeq.InsertItem (nItem, strProduitCourant.c_str());
      strFormat.Format(_T("%d"), nCountPrd);
      m_ctlSeq.SetItem (nItem, LIST_COL_NOMBRE,     LVIF_TEXT, strFormat, 0, 0, 0, 0);
      strFormat.Format(_T("%02d-%02d-%04d à %02d:%02d:%02d"), 
                      localTime.wDay, localTime.wMonth, localTime.wYear, localTime.wHour, localTime.wMinute, localTime.wSecond);
      m_ctlSeq.SetItem (nItem, LIST_COL_DATE_HEURE, LVIF_TEXT, strFormat, 0, 0, 0, 0);
      
      m_vstamps.push_back (plusVieux.m_fileTime);
    m_ctlSeq.SetItemData (nItem, (DWORD_PTR) &m_vstamps[m_vstamps.size () - 1]);
      m_ctlSeq.SortItems(MyCompareProc, (LPARAM) 0);
    }

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Points : 542
    Points
    542
    Par défaut
    Lorsque je compile et exécute ton code j'ai un problème signalé sur nCountPrd à la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      strFormat.Format(_T("%d"), nCountPrd);
    comme quoi la variable n'est jamais initialisée.

    Sinon d'une manière générale, le code est très "fragile";
    chez moi il est immédiatement pris à défaut du fait que listRepertoires est vide, ce qui génère un état inconsistant dans CScrutePDFsDlg::OnBnClickedButton1() et ne permet même pas d'atteindre le secteur supposé du bug ...

  18. #18
    Membre actif Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Points : 257
    Points
    257
    Par défaut
    j'ai apporté des modifications sur le code depuis le fichier ZIP que j'ai uploadé.
    je suis bien conscient que le code ne doit surtout pas être soumis tel quel sans plus de tests.

    il est surtout la pour tester le tri... rien d'autre, j'échaffauderai un code mieux une fois que ce genre de chose fonctionnera...

    j'arrive a avoir toujours des données, je travaille en sortie de production...
    donc, c bien alimenté, dans le cadre de mon test en tout cas.

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Points : 542
    Points
    542
    Par défaut
    Bon enfin, si tu as compris mon explication concernant l'erreur de conception et que tu es conscient d'avoir écrit du code ipork de test, alors la solution est proche.

    Bon courage !

  20. #20
    Membre actif Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Points : 257
    Points
    257
    Par défaut

    bouhou !....
    je ne comprends plus grand chose...
    je sais que si je fais le tri avec nCountPrd ca marche au poil.... dans tous les sens.
    je ne vois pas pourquoi avec un FILETIME ca na marche pas. Conceptuellement parlant, c'est la meme approche !?...
    et je ne parle pas de l'inconsistance du FILETIME, logiquement avec le code tel quel, ca devrait le faire ?

    sinon je vais faire une liste (un conteneur a définir a part) rien que pour les fichier les plus anciens par produit et faire le tri moi même, na !

    en tout cas merci des encouragements...

Discussions similaires

  1. Tri de fichier selon type d'extension et nom
    Par Aliveli dans le forum Visual C++
    Réponses: 11
    Dernier message: 17/11/2006, 11h35
  2. tri de fichier
    Par sondess dans le forum C
    Réponses: 6
    Dernier message: 17/10/2006, 14h34
  3. Tri de fichier avec le "sort"
    Par LFC dans le forum Langage
    Réponses: 1
    Dernier message: 08/03/2006, 07h55
  4. Tri de fichier
    Par difficiledetrouver1pseudo dans le forum Linux
    Réponses: 2
    Dernier message: 22/02/2006, 16h47
  5. [langage] tri de fichier
    Par jj77 dans le forum Langage
    Réponses: 7
    Dernier message: 16/11/2004, 16h35

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