Accueil > Forum > > > > boucle fopen
boucle fopen
dimanche 18 juillet 2010 à 18:49:34 |
boucle fopen

vercd7am
|
Bonjour, j'aurai aime savoir comment faire un boucle de fopen. Voila pour l'instant ce que j'ai
Code C/C++ : FILE* fichier = NULL; // nombre de points
fichier = fopen("C:\\Documents and Settings\\....\\nombreDePointsPoisson001.txt","r");
if (fichier != NULL)
{
fscanf(fichier, "%d", &nombreDePoints);
printf("Il y a %d points\n\n", nombreDePoints);
fclose(fichier);
fichier = NULL;
}
else
{
printf("Il n'y a pas de point dans le processus.\n\n");
}
J'ai d'autres boucles fopen sur le meme principe qui ouvrent d'autres fichiers.
Ensuite je fais toute une serie de calculs.
Je voudrait faire une boucle, mes parametres changeant, tous les fopen que j'ai dans le programme ouvrent des fichiers qui ont des valeurs qui changent a chaque fois. Par simplicite, j'ai appele chaque groupe avec un numero different, j ai donc par exemple "nombre001.txt" "coordonnees001.txt" et ainsi de suite, qui deviennent "nombre002.txt" "coordonnees002.txt"... J'aimerais change le 1 en 2 puis en 3 et ainsi de suite pour faire mes calculs pour chaque donnee.
Merci d'avance.
|
|
lundi 19 juillet 2010 à 02:18:58 |
Re : boucle fopen

vercd7am
|
J'ai un peu progresse mais je n'y arrive toujours pas.
J'ai essaye avec itoa et strcat ceci
Code C/C++ : #include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int nombre=0, i=1;
const char chaine1[]="C:\\Documents and Settings\\Qui qui quoi dont ou\\Plocha\\Memoire\\Processus de poisson, 1000 points, premier exemple\\nombreDePointsProcessusPoissonDehors00";
const char chaine3[]=".txt";
for(i=1;i<30;i++);
{
nombre=i;
char chaine2[10]; // une chaine est un tableau de char, une chaine se finit toujours par \0
itoa(nombre, chaine2, 10);
printf("%d", chaine2[10]);
strcat(chaine1,chaine2);
strcat(chaine1,chaine3);
printf("%s\n\n",chaine1);
}
return 0;
}
(Je n'ai pas defini la taille des chaines 1 et 3 mais je ne pense pas que cela soit important).
Deja, le print etant dans le for, j'aimerai qu'il affiche la chaine a chaque fois pour voir si ca ne fait pas de conneries, mais il l'affiche juste au dernier passage. A priori ca a l'air d'etre bon, mais defois entre ca a l'air et c'est il y a un monde.
Ensuite le probleme, c'est que bien que je sois capable d'ecrire mes adresses absolues en faisant defiler les chiffres grace a ma boucle, je ne sais pas les rentrer dans mon fopen. Comment j'indique a fopen ce que j'ai dans chaine1????
|
|
lundi 19 juillet 2010 à 10:03:08 |
Re : boucle fopen

CptPingu
|
Tu n'étais pas très loin de réussir, il te suffisait juste de faire une boucle avec "feof", qui permet de savoir si on est en fin de fichier ou non:
Code C/C++ :
#include <stdio.h>
int main(void)
{
FILE* fichier = NULL;
int nombreDePoints;
/* fichier = fopen("C:\\Documents and Settings\\....\\nombreDePointsPoisson001.txt", "r"); */
fichier = fopen("test.txt", "r");
if (fichier != NULL)
{
while (!feof(fichier))
{
fscanf(fichier, "%d", &nombreDePoints);
printf("Il y a %d points\n\n", nombreDePoints);
}
fclose(fichier);
fichier = NULL;
}
else
{
printf("Il n'y a pas de point dans le processus.\n\n");
}
return 0;
}
________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
|
|
lundi 19 juillet 2010 à 13:51:20 |
Re : boucle fopen

vercd7am
|
Non, ce n'est pas ce que je cherche a faire. Je me suis peut etre mal exprime.
Quand je fais fopen, j'ouvre un document avec son adresse abslue. Peut importe ou il se trouve, la seule chose qui soit d'interet et que je l'ai nomme "blabla001.txt".
Une fois que j'ai recupere ce qu'il contient et fais ce que je voulais, je veux repeter l'operation pour ses petits freres, des dossiers contenant le meme type d'informations que j'ai nomme "blabla002.txt" jusqu'a "blabla00n.txt" Je veux faire une boucle pour ne pas avoir a rentrer le nom du fichier a chaque fois, j'en ai tellement que cela pendrait des heures.
Avec ce que j'ai fait hier avec itoa et strcat, j'arrive a faire des chaines qui reforment le nom, avec le numero. Disons que j'ai Code C/C++ : char chaine1[]="blabla00"
puis aussi Code C/C++ : .
je me saire de itoa pour faire une boucle Code C/C++ : nombre=i;
char chaine2[10]; // une chaine est un tableau de char, une chaine se finit toujours par \0
itoa(nombre, chaine2, 10);. Donc quand ensuite je fais Code C/C++ : strcat(chaine1,chaine2);
strcat(chaine1,chaine3);
printf("%s\n\n",chaine1);
je recupere "blabla001.txt" par exemple quand i =1.
Le probleme et que je ne sais pas comment chaine1 doit etre lu par fopen pour qu'il comprenne que c'est l'adresse absolue marquee.
|
|
lundi 19 juillet 2010 à 14:33:35 |
Re : boucle fopen

CptPingu
|
Ok, alors dans ce cas, 2 solutions:
- Scannez les dossiers: avec readdir (Linux) ou FindFirst/FindNext (Windows)
- Donnez une liste de fichier (solution sur laquelle tu sembles t'orienter)
Pour ton exemple, si tu es sur et certains que le nom de fichier ne changera pas (aura toujours la même taille).
Tu peux faire ceci:
Code C/C++ :
#include <stdio.h>
int main(void)
{
char filename[] = "blabla000.txt";
int i = 0;
for (i = 0; i < 1000; ++i)
{
filename[6] = '0' + i / 100;
filename[7] = '0' + (i % 100) / 10;
filename[8] = '0' + (i % 10);
printf("%i %s\n", i, filename);
}
return 0;
}
Ou alors, à coup de sprintf:
Code C/C++ :
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char filename[1024];
int i = 0;
for (i = 0; i < 1000; ++i)
{
sprintf(filename, "blabla%i.txt", i);
printf("%i %s\n", i, filename);
}
return 0;
}
________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
|
|
lundi 19 juillet 2010 à 20:38:24 |
Re : boucle fopen

vercd7am
|
Merci, mais ce n'est pas encore tout a fait ca. La, on fait defiler les chiffres. C'est l'etape d'apres qui me pose probleme, l'utilisation de fopen. Celle-ci attend deux entrees, le nom du fichier et la facon dont on l'ouvre. Si j'ecris le chemin absolu, elle lit sans probleme.
Avec ce que l'on a ecrit, le chemin absolu se trouve dans un tableau de char, disons comme dans l'exemple filename[].
Mais autant je peux lui ecrire le chemin absolu autant je ne peux pas ecrire
Code C/C++ :
par exemple (fopen attend un pointeur, non). Moi je souhaite qu'elle comprenne que ce que je lui mets ce n'est ni plus ni moins que l'adresse absolue du fichier.
|
|
lundi 19 juillet 2010 à 22:41:29 |
Re : boucle fopen

CptPingu
|
Heu... Dans mon exemple, tu peux sans problème lui donner filename.
Je te rapelle que filename[] est considéré comme un pointeur.
fopen(filename, "r"); est tout à fait *valable* !
________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
|
|
lundi 19 juillet 2010 à 23:47:28 |
Re : boucle fopen

vercd7am
|
Ben la, je suis comme qui dirait sur le cul  , devant ma stupidite.
En lisant ta reponse, je me suis dit: nom de Dieu ce n'est pas possible, il a raison, pourquoi ca ne marche toujours pas. Je suis retourne voir ce que j'avais ecrit de mon cote au debut avec itoa et strcat (mon deuxieme message) parce que je renvoyais aussi cela dans une liste nommee chaine1. Je relis et la je vois que comme un con j'avais fais une definition Code C/C++ : .
Et la je dit: quel con  , predre autant de temps parce que j'avais ecrit "const".
Neanmoins merci pour toutes les reponses, ce que tu as ecrit est nettement plus joli que ce que j'avais fait. J'aurais donc une ultime question: qu'est ce qui est le plus rapide entre mon "itoa+strcat", ta solution 1 en divison/modulo ou ta solution 2 "sprintf"? Apriori je pense que c'est at solution 1. Je dois faire 100 boucles de mon programme, et j'ai des "for" dedans avec des indices qui peuvent depasser les 1000, ca peut peut-etre avoir son importance.
|
|
mardi 20 juillet 2010 à 00:07:37 |
Re : boucle fopen

CptPingu
|
Réponse acceptée !
Dans l'ordre je pense que le plus rapide:
- Solution 1 avec les modulo
- Solution avec les sprintf
- Ta solution
Si tu n'es pas sur du nombre de fichiers, la solution 2 avec sprintf est la plus pratique.
En revanche, je ne voit pas l'erreur avec le const ? fopen prend de toute façon une chaine const.
const char* filename = "pouet"; ou const char filename[] = "pouet";
fopen(filename, "r");
Fonctionne sans problème.
Bonne chance pour la suite ! N'hésite pas à faire part de tes avancées :)
________________________________________________________________________
Historique de mes créations, et quelques articles:[url= http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
|
|
mardi 20 juillet 2010 à 00:25:50 |
Re : boucle fopen

vercd7am
|
Ben ca compilait, mais la console renvoyait automatiquement un message d'erreur. Je pense que ca venait du fait que je faisais strcat dans la chaine alors que celle-ci avait ete declaree comme const. En tout cas en l'ayant enleve, cette methode fonctionnait aussi et sans renvoyer de message d'erreur.
Je suis quand meme passe a la methode modulo. Je suis toujours un peu fier de faire un truc qui marche, mais si on peu faire quelque chose qui marche mieux  ... je ne vais pas m'en priver.
Merci bien du coup de main, la je vais faire un test, au pire demain matin, on verra bien le resultat mais a priori il ne devrait pas y avoir de couac. Bonne soiree
|
|
Cette discussion est classée dans : fichier, boucle, code, txt, fopen
Répondre à ce message
Sujets en rapport avec ce message
aide pour création forcée d'un fichier txt (et écriture)... [ par scelw ]
De la même façon que pour "forcer" l'affichage d'un printf() ou d'un cout << "texte_à_afficher", il faut utiliser un "flush" (cout << "texte_à_affiche
ouverture d'un fichier [ par casper_2 ]
Bojour tous le monde,j'aimerai savoir koment ouvrir un fichier.txt physikement en C.Je c'est ouvrir a l'aide de fopen,en en fesant mon traitement avec
Utiliser une variable en dehors d'un boucle !! [ par chanandler ]
Bonjour ! Mon probléme est le suivant : J'ai un programme qui lit un fichier LieuDate1.txt (fichier donc le comptenu peut varier mais pas la forme )et
Probléme de boucle !! [ par chanandler ]
Bonjour ! Mon probléme est le suivant : J'ai un programme qui lit un fichier LieuDate1.txt (fichier donc le comptenu peut varier mais pas la forme )et
Gestion fichiers TXT [ par trystan007 ]
Salut, je cherche une commande afin de gérer des fichier texte.En cherchant, je suis tombé sur la commande fopen, mais le code suivant (code d'exempl
fopen VS Fichier.Open [ par kididouille ]
Bonjour,Vous savez comment faire pour que l'utilisateur puisse ouvrir un fichier en le choisissant dans la boite de dialogue "Ouvrir" (Comme la "Enreg
Parcours de fichier [ par mmx1 ]
Bonjour, j'ai un petit code qui prend en paramètre un fichier txt et qui créer un fichier du même nom mais en .rawje voudrais ne plus utiliser ces par
Ecriture dans un fichier [ par 0x80h4x0r ]
Salut,J'ai code un petit programme de hook de clavier qui ecrit les touches sur un fichier .txt . le probleme c'est que si je ne code pas le nom absol
deconcatenation de chaine [ par malouve ]
Bonjour, j'ai un fichier txt à traiter en C, ayant plusieurs fichiers, j'entre le chemin du fichier au clavier, je voudrais en sortie, avoir un fich
Livres en rapport
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|