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 :

[MFC]Migrer dans un fichier txt le contenu d'un TreeCtrl


Sujet :

MFC

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2002
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 31
    Points : 24
    Points
    24
    Par défaut [MFC]Migrer dans un fichier txt le contenu d'un TreeCtrl
    Bonjour à tous
    J'ai donc un TreeControle dans lequel je viens placer tout une arborescence de fichiers. La méthode de création de cet arbre est récursive, je ne peux donc pas "batcher" à la voler dans mon fichier texte.

    Je souhaite donc, une fois mon arbre créé entièrement, placer le contenu de mon arbre dans un fichier texte, en reflétant la hierarchie par des tabulations.

    Auriez vous une petite idée pour faire la chose de manière relativement simple et claire ?

    Merci d'avance !!
    A l'impossible nul n'est tenu !

  2. #2
    mat.M
    Invité(e)
    Par défaut
    eh bien rien de bien compliqué , tu parcours récursivement l'arbre et tu détermine si tu est à la racine ou bien sur une branche.
    Pour la racine tu écrits un "+" et une branche un "-".

    Est-ce que c'est avec MFC ou non ?
    Il ya des fonctionnalités pour parcourir les arborescences

  3. #3
    Membre à l'essai
    Inscrit en
    Août 2002
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 31
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par mat.M
    eh bien rien de bien compliqué , tu parcours récursivement l'arbre et tu détermine si tu est à la racine ou bien sur une branche.
    Pour la racine tu écrits un "+" et une branche un "-".

    Est-ce que c'est avec MFC ou non ?
    Il ya des fonctionnalités pour parcourir les arborescences
    oui c'est en MFC
    Quelles sont ces fonctionnalités ?
    Y en a t'il pour écrire facilement dans un fichier texte ?
    Merci
    A l'impossible nul n'est tenu !

  4. #4
    tut
    tut est déconnecté
    Membre averti
    Avatar de tut
    Inscrit en
    Juillet 2002
    Messages
    373
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 373
    Points : 394
    Points
    394
    Par défaut
    il n'y a rien à ma connaissance qui puisse te permettre de faire une solution très simple.
    Par contre, ce n'est pas très compliqué à implémenter. Tu peux parcourir séquentiellement ton arbre avec les méthodes :
    GetChildItem(), ItemHasChildren(), GetNextItem()
    et suivant la profondeur de l'item ajouter un préfixe de tabulations.

    Après tu peux améliorer le truc en rajoutant des caractères alphanumériques (+,-,etc...) pour que ce soit plus lisible. 8)

  5. #5
    Membre à l'essai
    Inscrit en
    Août 2002
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 31
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par tut
    il n'y a rien à ma connaissance qui puisse te permettre de faire une solution très simple.
    Par contre, ce n'est pas très compliqué à implémenter. Tu peux parcourir séquentiellement ton arbre avec les méthodes :
    GetChildItem(), ItemHasChildren(), GetNextItem()
    et suivant la profondeur de l'item ajouter un préfixe de tabulations.

    Après tu peux améliorer le truc en rajoutant des caractères alphanumériques (+,-,etc...) pour que ce soit plus lisible. 8)
    ouais, tout à la mimine 8)
    le dernier truc, c'est que je n'arrive pas à ecrire en lusieurs fois dans mon fichier texte.
    Y a t'il des restriction par rapport à ça ?? j'ai rien vu dans le MSDN...
    A l'impossible nul n'est tenu !

  6. #6
    tut
    tut est déconnecté
    Membre averti
    Avatar de tut
    Inscrit en
    Juillet 2002
    Messages
    373
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 373
    Points : 394
    Points
    394
    Par défaut
    ça veut dire quoi :
    je n'arrive pas à ecrire en lusieurs fois dans mon fichier texte.
    soit plus explicite, stp.

  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
    salut essaye ça:
    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
     
    void CMyForm::Test()
    {
    CStdioFile File;
    	if(File.Open( "essai.txt", CFile::modeCreate | CFile::modeWrite | CFile::typeText ))
    	{
    		HTREEITEM hti = m_Tree.GetRootItem();
    		while( hti )
    		{
    			int nLevel = GetTreeLevel( hti );
    			while( nLevel-- ) File.WriteString( "\t" );
    			File.WriteString(m_Tree.GetItemText( hti ) + "\r\n");
    			hti = GetNextItem( hti );
    		}
    	}
    }
     
    int CMyForm::GetTreeLevel( HTREEITEM hItem )
    {
    	int iIndent = 0;
    	while( (hItem = m_Tree.GetParentItem( hItem )) != NULL )
    		iIndent++;
    	return iIndent;
    }
     
     
    HTREEITEM CMyForm::GetNextItem( HTREEITEM hItem )
    {
    	HTREEITEM	hti;
     
    	if( m_Tree.ItemHasChildren( hItem ) )
    		return m_Tree.GetChildItem( hItem );		
    	else
    	{		
    		while( (hti = m_Tree.GetNextSiblingItem( hItem )) == NULL )
    		{
    			if( (hItem = m_Tree.GetParentItem( hItem ) ) == NULL )
    				return NULL;
    		}
    	}
    	return hti;
    }

  8. #8
    Membre à l'essai
    Inscrit en
    Août 2002
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 31
    Points : 24
    Points
    24
    Par défaut Re: [MFC]Migrer dans un fichier txt le contenu d'un TreeCtrl
    Merci Farscpae
    perso j'ai essayé ça :
    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
    CString PostTreatement(HTREEITEM hParent, int nLevel, int nMaxLevel)
    {
     
    	CString  strTmp, str, strWriteFile;
     
    	CTreeCtrl* ptrTree = (CTreeCtrl*) GetDlgItem(IDC_TREE);
     
    	int nNiveau = --nLevel;
     
    	if (ptrTree->ItemHasChildren(hParent))
    	{
     
    		HTREEITEM hItem = ptrTree->GetChildItem(hParent);
     
    		while (hItem != NULL )
    		{
    			/* on formate la chaine en fonction du niveau d'arborescence */
    			str="";
    			int i=nNiveau;
    			if (i != nMaxLevel)
    			{
    				str +="\t";
    				i++;
    			}
     
    			while ( i != nMaxLevel)
    			{
    				str +="|\t";
    				i++;
    			}
    			strTmp.Format("%s+--- %s\n",str,ptrTree->GetItemText(hItem));
    			strWriteFile += strTmp;
    			/* si on pointe sur un dossier et que le niveau d'arborescence limite n'est pas atteint */
    			if ( ptrTree->ItemHasChildren(hItem) && (nNiveau>0) )
    			{
    				strWriteFile += PostTreatement( hItem, nNiveau, nMaxLevel );	
    			}
     
    			hItem = ptrTree->GetNextSiblingItem(hItem);
    		}
    	}
     
    	return strWriteFile ;
    }
    NOTE : les levels sont là pour développer mon arbre jusqu'à un certain rang d'arborescence....


    Dernière chose : je dois formatter la taille de mes fichiers sous forme
    XX.XXX.XXX ( cad insérer des points dans la taille de mon dossier )
    Y a t'il un outils permettant de formatter mon entier ?
    A l'impossible nul n'est tenu !

  9. #9
    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
    re,
    j'ai pas bien compris la question !
    un entier dans une chaine il suffit de faire un format ,
    du style %3d ou %03d si on veut caler avec des 0 .

  10. #10
    Membre à l'essai
    Inscrit en
    Août 2002
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 31
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par farscape
    re,
    j'ai pas bien compris la question !
    un entier dans une chaine il suffit de faire un format ,
    du style %3d ou %03d si on veut caler avec des 0 .
    le but est de partir d'une taille de 1256236 octets et d'arriver à présenter le résultat sous forme 1.256.236 octets.
    Pi j'ai pas saisi la réponse....
    A l'impossible nul n'est tenu !

  11. #11
    Membre à l'essai
    Inscrit en
    Août 2002
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 31
    Points : 24
    Points
    24
    Par défaut
    dans la série vaste usine à gaz j'ai fait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    char Buffer[20];
    					itoa(nTmpTaille,Buffer,10);
    					str = CString(Buffer);
     
    					int j=0;int i;
    					for ( i=str.GetLength(); i= 0 ; i-- )
    					{
    						j++;
    						if (j%3 == 0) 
    						{
    							str.Insert(i-1,".");
    						}
    					}
    bon ça marche mais je trouve ça vilain...
    donc si y'a plus élégant, je suis preneur
    A l'impossible nul n'est tenu !

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

Discussions similaires

  1. Défilement d'un texte contenu dans un fichier .txt
    Par Gwegz dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 13/07/2007, 10h36
  2. Réponses: 4
    Dernier message: 12/07/2006, 20h54
  3. Réponses: 4
    Dernier message: 26/06/2006, 11h41
  4. [MFC] Chaine dans un fichier txt
    Par le-makinero dans le forum MFC
    Réponses: 5
    Dernier message: 21/04/2006, 10h10
  5. Ecrire dans un fichier txt sans en effacer le contenu
    Par cari dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 14/12/2005, 18h11

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