begin process at 2012 05 28 14:26:22
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Débutant(e)

 > 

boucle fopen


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

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

Administrateur CodeS-SourceS
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++ :
char chaine3=".txt"
.

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

Administrateur CodeS-SourceS
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++ :
fopen(filename,"r");

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

Administrateur CodeS-SourceS
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++ :
const char chaine1[]=
.

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

Administrateur CodeS-SourceS
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

1 2

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


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,153 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales