| | Premium | Posté le 28/05/2006 @ 23:21 | Petit astucien
205 Messages
| Bonjour,
j'ai un fichier CSV de ce type :
A,B
A,C
B,E
B,D
B,A
...
je voudrais savoir comment faire pour récuperer dans un tableau ceci:
A,B,C
puis dans un autre
B,E,D,A
et ainsi de suite
Merci par avance
| | |
| |
| Publicité |
|
| | Premium | Posté le 29/05/2006 à 08:03 | Petit astucien
205 Messages
| Salut,
en faite, je me suis trompé dans mes explications
Avec cet arbre (les chiffres représentent des IPs)
[code]
1
/ \
2 4
/ | |
3 5 5
| | |
4 6 7
[/code] on obtient ce fichier CSV pour les voisins :
1,2
1,4
2,1
2,3
2,5
3,2
3,4
4,3
4,1
4,5
5,2
5,6
5,4
5,7
6,5
7,5 Pour reconstituer l'arbre, avec l'algo suivant:
Lire une ligne, extraire les adresses IP, les mettre dans un tableau
Lire la ligne d'apres si la 1ere adresse IP = à la premiere adresse Ip de la ligne d'avant alors extraire la 2eme IP et la mettre dans le 2eme tableau.
Sinon mettre la 1ere Ip de cette ligne ainsi que la 2eme dans le tableau.
... Ça ne donnera pas l'arbre reconstituer...car ça donne une liste de voisin et le sommet de départ n'est pas la racine.
Avec l'exemple, ça donnerai :
1-2-4 puis
2-1-3-5
....
J'ai une fonction "ArbreRemplir" qui remplit une branche complète de l'arbre à partir d'une liste d'IP terminée par "NULL" (avec la 1ère IP étant impérativement l'IP de mon propre host)
Quelqu'un aurait une idée pour l'écriture en C de la fonction qui pourrait me donner l'arbre?
Merci Modifié par Premium le 29/05/2006 08:07 | | | | | koala01 | Posté le 30/05/2006 à 19:54 | Astucien
4715 Messages
| Salut,
En gros, surtout si la toute premiere ip est la tienne, il suffit de suivre un schéma classique en quatre temps:
- Lecture de l'IP parent
- recherche du noeud parent
- lecture de l'ip enfant
- ajout de l'ip enfant
Pour la facilité, je diviserais ces quatres étapes en autant de fonctions, de manière à s'y retrouver plus facilement plus tard…
Il y aurait en fait:
- une fonction de lecture (recevant un pointeur sur le fichier en argument et renvoyant l'ip lue),
- une fonction de recherche du noeud (recevant en argument l'ip et renvoyant le noeud trouvé),
-une fonction de création de noeud (recevant l'ip en argument et renvoyant un nouveau noeud) et
-une fonction d'ajout de l'enfant (recevant le noeud parent et le noeud enfant en arguments)
Le tout, harmonieusement mis en scène dans une petite boucle qui aurait, de plus un compteur (pour les vérifications) sous la forme de
noeud* parsing(char *filename)
{
//déclaration des variables
char temp;
int cpt=0;
char ip[4];
noeud* parent;
noeud *enfant;
noeud *premier;
FILE *fichier=fopen(filename,"rt");
//debut de la boucle
while(! fichier.eof())
{
ip=Lecture(fichier);
//supprimons la virugle qui se trouve entre le parent et l'enfant
temp=fgetc(fichier);
//gérer la première lecture à part
if(cpt==0)
premier=Nouveau(ip);
else
{
//pour tous les autres
parent=cherche(ip);
ip=Lecture(fichier);
enfant=Nouveau(ip);
AjouteEnfant(parent, enfant);
}
//n'oublions pas d'incrémenter le compteur
cpt++;
}
//éventuellement un affichage du nombre de lignes lues
printf("nombre de lignes lues:%d\n",cpt);
//n'oublions pas de renvoyer le noeud racine
return premier;
}
Pour le reste, tout dépendra des structures que tu as décidé d'utiliser pour ton arbre , pour les ip et des vérifications [clindoeil]
N'oublies pas (car je ne l'ai pas fait dans le code) de vérifiser systématiquement la réussite de l'allocation de tes pointeurs [clindoeil] | | | |
| | Haut de la page |
| | Inscrivez-vous ! |
- Posez vos questions
- Résolvez vos problèmes
- Aidez les autres
- Participez et créez vos discussions
- Dialoguez en privé avec d'autres membres
- Suivez vos sujets préférés
- Affichez les signatures des membres
|
|