Accueil > Forum > > > > fichier texte et comparaison
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
|
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
|
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
Livres en rapport
|
Derniers Blogs
JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft 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
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
|