begin process at 2012 05 29 04:27:10
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Débutant(e)

 > 

fichier texte et comparaison


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

fichier texte et comparaison

dimanche 3 janvier 2010 à 19:23:59 | fichier texte et comparaison

olobo

Bonsoir!

J'aimerais avoir de l'aide svp , j'ai un fichier texte qui se compose de la forme suivante :

Bonjour
hello

j'aimerais pouvoir parcourir ce fichier et parcourir chaque ligne afin de recuperer le mot et pouvoir l'utiliser dans une fonction qui me permet de voir si ce mot est présent dans une chaine de caractere via la fonction strstr.
j'avais penser à stocker chaque ligne dans une case d'un tableau mais je n'ai pas reussi a le faire peut être existe t'il une maniere plus facile?
J'arrive a ouvrir le fichier sans probleme mais après je bloque je ne voit pas comment faire?
Merci pour votre aide :)!
en esperant avoir été clair sur ma demande ,
cdt.

lundi 4 janvier 2010 à 17:24:23 | Re : fichier texte et comparaison

rt15

Membre Club Administrateur CodeS-SourceS
Salut,

Voilà un bout de code qui charge chaque ligne dans un tableau. Pour avoir un minimum de perfs, l'idée est charger le fichier en une seule fois et de remplacer les \n et \r par des zéros terminaux.

Code C/C++ :
#include <stdio.h>
#include <stdlib.h>

FILE *SafeOpenFile(char *lpFileName, char *lpMode, FILE **lpFile)
{
  *lpFile = fopen(lpFileName, lpMode);

  if (! *lpFile)
    printf("Cannot open file: \"%s\"\n", lpFileName);

  return *lpFile;
}

long GetSizeOfFile(FILE* lpFile)
{
  long nCurrentPos;
  long nResult;

  nCurrentPos = ftell(lpFile);

  fseek(lpFile, 0, SEEK_END);
  nResult = ftell(lpFile);

  fseek(lpFile, nCurrentPos, SEEK_SET);

  return nResult;
}

char* LoadFile(FILE* lpFile)
{
  long nFileSize;
  char* lpResult;

  nFileSize = GetSizeOfFile(lpFile);

  lpResult = (char*)malloc(nFileSize + 1);
  if (! lpResult)
    goto the_end;

  if (fread(lpResult, 1, nFileSize, lpFile) != nFileSize)
  {
    free(lpResult);
    lpResult = NULL;
  }
  lpResult[nFileSize] = 0;

the_end:
  return lpResult;
}

char** LoadLines(FILE* lpFile, int* nLineCount, char** lpBuffer)
{
  char** lpResult;
  int nI, nJ;

  lpResult = NULL;
  
  *lpBuffer = LoadFile(lpFile);
  if (! *lpBuffer)
    goto the_end;

  /* On compte le nombre de ligne */
  nI = 0;
  *nLineCount = 1;
  while ((*lpBuffer)[nI])
  {
    if ((*lpBuffer)[nI] == '\n')
      (*nLineCount)++;
    nI++;
  }

  /* On alloue un tableau de pointeur sur les lignes */
  lpResult = (char**)malloc(*nLineCount * sizeof(char*));
  if (! lpResult)
  {
    free(*lpBuffer);
    goto the_end;
  }

  /* On fait pointer les cases du tableau sur les lignes */
  nI = 0;
  for (nJ = 0; nJ < *nLineCount; nJ++)
  {
    lpResult[nJ] = &(*lpBuffer)[nI];
    while (((*lpBuffer)[nI]) && ((*lpBuffer)[nI] != '\n'))
    {
      if ((*lpBuffer)[nI] == '\r')
        (*lpBuffer)[nI] = 0;
      nI++;
    }
    (*lpBuffer)[nI] = 0;
    nI++;
  }

the_end:
  return lpResult;
}

int main()
{
  FILE* lpInputFile;
  char** lpLines;
  char* lpBuffer;
  int nLineCount;
  int nResult;
  int nI;

  nResult = 1;

  if (! SafeOpenFile("input.txt", "rb", &lpInputFile))
    goto the_end;

  lpLines = LoadLines(lpInputFile, &nLineCount, &lpBuffer);
  if (! lpLines)
  {
    printf("Echec du chargement du fichier\n");
    goto close_input_file;
  }
 
  puts("===================");
  for (nI = 0; nI < nLineCount; nI++)
    puts(lpLines[nI]);
  puts("===================");

  nResult = 0;

  free(lpBuffer);
  free(lpLines);
close_input_file:
  fclose(lpInputFile);
the_end:
  return nResult;
}



Mais bon, dans ton cas, il est probablement plus simple de travailler directement sur le fichier chargé en mémoire et de traiter les \n comme des caractères séparateurs, de cette manière :

Code C/C++ :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

FILE *SafeOpenFile(char *lpFileName, char *lpMode, FILE **lpFile)
{
  *lpFile = fopen(lpFileName, lpMode);

  if (! *lpFile)
    printf("Cannot open file: \"%s\"\n", lpFileName);

  return *lpFile;
}

long GetSizeOfFile(FILE* lpFile)
{
  long nCurrentPos;
  long nResult;

  nCurrentPos = ftell(lpFile);

  fseek(lpFile, 0, SEEK_END);
  nResult = ftell(lpFile);

  fseek(lpFile, nCurrentPos, SEEK_SET);

  return nResult;
}

char* LoadFile(FILE* lpFile)
{
  long nFileSize;
  char* lpResult;

  nFileSize = GetSizeOfFile(lpFile);

  lpResult = (char*)malloc(nFileSize + 1);
  if (! lpResult)
    goto the_end;

  if (fread(lpResult, 1, nFileSize, lpFile) != nFileSize)
  {
    free(lpResult);
    lpResult = NULL;
  }
  lpResult[nFileSize] = 0;

the_end:
  return lpResult;
}

int main()
{
  FILE* lpInputFile;
  char* lpLines;
  char lpWord[200];
  int nResult;
  int nJ;
  int nI;

  nResult = 1;

  if (! SafeOpenFile("input.txt", "rb", &lpInputFile))
    goto the_end;

  lpLines = LoadFile(lpInputFile);
  if (! lpLines)
  {
    printf("Echec du chargement du fichier\n");
    goto close_input_file;
  }

  puts("===================");
  nI = 0;
  nJ = 0;
  while (1)
  {
    if ((! lpLines[nI]) || (lpLines[nI] == '\n')) 
    {
      memcpy(lpWord, &lpLines[nJ], nI - nJ);
      lpWord[nI - nJ] = 0;
      nJ = nI + 1;
      puts(lpWord);
      if (! lpLines[nI])
        break;
    }
    if (lpLines[nI] == '\r')
      lpLines[nI] = 0;
    nI++;
  }
  puts("===================");

  nResult = 0;

  free(lpLines);
close_input_file:
  fclose(lpInputFile);
the_end:
  return nResult;
}

lundi 4 janvier 2010 à 17:32:36 | Re : fichier texte et comparaison

rt15

Membre Club Administrateur CodeS-SourceS
Ou moins performant mais moins de code, tu peux utiliser fgets.

Code C/C++ :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

FILE *SafeOpenFile(char *lpFileName, char *lpMode, FILE **lpFile)
{
  *lpFile = fopen(lpFileName, lpMode);

  if (! *lpFile)
    printf("Cannot open file: \"%s\"\n", lpFileName);

  return *lpFile;
}

int main()
{
  FILE* lpInputFile;
  char lpWord[200];
  int nResult;
  int nI;

  nResult = 1;

  if (! SafeOpenFile("input.txt", "rb", &lpInputFile))
    goto the_end;

  puts("===================");
  while (fgets(lpWord, 200, lpInputFile))
  {
    nI = 0;
    while(lpWord[nI])
    {
      if ((lpWord[nI] == '\n') || (lpWord[nI] == '\r'))
        lpWord[nI] = 0;
      nI++;
    }
    puts(lpWord);
  }
  puts("===================");

  nResult = 0;

  fclose(lpInputFile);
the_end:
  return nResult;
}




Cette discussion est classée dans : fichier, aide, texte, parcourir, comparaison


Répondre à ce message

Sujets en rapport avec ce message

chercher une donnée dans un fichier texte !! De l'aide !! [ par nakounet ] Je vous en suplie ! je vais devenir fou si personne ne m'aide !!voilà je suis en train de faire un carnet d'adresse évolué !! là je fais la fonction r fichier texte [ par codavi ] Bonjour, Voilà, je viens de décrouvrir ce forum et je souhaiterais que quelqu'un m'apporte un peu d'aide. Je veux pouvoir lire/ecrire dans un fichier Parcourir fichier [ par frenchie_st ] Bonjour, Je dois faire un programme qui gère un fichier texte et j'aurais 2 questions: 1) Le fichier texte est composé de 2 parties: une introduction parcourir tous les lignes d'un fichier texte [ par mqsi ] salut a tous,j'ai un  petit problème c que je cherche a parcourir tous les lignes d'un fichier texte ,pour le nombre du  lignes n'est pas connu(varrié remplacer valeurs dans un fichier texte [ par stephanou6 ] Bonjour!Je suis actuellemnt en stage et je doit réaliser une application grâce à visual studio.Mais je ne connaît quasiment rien en c++..J aurai besoi Connaitre le nombre de ligne d'un fichier texte [ par sarah65536 ] Salut !Voila, je voudrai savoir qu'elle fonction en C++ me permettrait de connaitre exactement le nombre de lignes que comporte un fichier texte.Est-c remplir un LDAP via un fichier texte [ par Kaazar ] Bonjour, je dois développer un petit outil permettant de populer (remplir) un annuaire LDAP à l'aide d'un fichier texte. Je vois comment lire ce fichi Lire un fichier texte et mettre les donnees dans un tableau [ par t047554 ] Bonjour a tous,Je suis un debutant en c et j'aimerai bien arrive a résoudre mon probleme.Voila mon probleme, j'aimerai lire un fichier texte qui a un pb CreateProcess ressources [ par mat74 ] bonjour à tous,   je suis en train de faire une aide pour mon logiciel programmé avec Visual Studio 6.0 pour Pocket PC (en c++). Je fais cette aide en Lire la nième ligne d'un fichier texte [ par boninou ] Bonjour à tous !J'aurais voulu savoir comment lire la nième ligne d'un fichier texte en C.Que dois-je utiliser ? fgets? je dois me deplacer avec fseek


Nos sponsors


Sondage...

Comparez les prix

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 : 0,624 sec (3)

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