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

C

 > 

Divers

 > 

Débutant(e)

 > 

indexer des mots


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

indexer des mots

samedi 29 décembre 2007 à 17:09:20 | indexer des mots

mapinfo

Bonjour,

Voici un texte, je voudrais écrire un code en C, qui affiche par exemple que le mot vraiment se situe en ligne 2, c'est-à-dire , vraiment : [2]. Je pense l'écrire avec structure et typedef, je voudrais bien une assistance pour bien m'éclairer, voire comprendre et toute suggestion est la bien venue. Merci

Un programme qui tourne bien, c'est un plaisir, mais un
programme qui marche mal ou pas du tout, c'est vraiment
une (grosse) frustration. La solution c'est de le coder par
petits bouts, en testant progressivement chaque expression
pour avoir la certitude qu'elle retourne bien la valeur
attendue, avant de s'en servir dans une expression plus
large, autrement dit une "instruction" du programme. On
teste alors chaque instruction avec le contexte voulu, ce
qui, progressivement, garantit le bon fonctionnement global.

Pour les autres mots, l'éxecution du programme donne ce résultat.

alors : [8]
attendue : [6]
autrement : [7]
avant : [6]
avec : [8]
avoir : [5]
bien : [1, 5]
bon : [9]
bouts : [4]
ce : [8]
certitude : [5]
chaque : [4, 8]
coder : [3]
contexte : [8]
dit : [7]
expression : [4, 6]
fonctionnement : [9]
frustration : [3]
garantit : [9]
global : [9]
grosse : [3]
instruction : [7, 8]
large : [7]
mal : [2]
marche : [2]
petits : [4]
plaisir : [1]
programme : [1, 2, 7]
progressivement : [4, 9]
qu'elle : [5]
retourne : [5]
s'en : [6]
servir : [6]
solution : [3]
testant : [4]
teste : [8]
tourne : [1]
tout : [2]
valeur : [5]
voulu : [8]
vraiment : [2]

Cordialement
samedi 29 décembre 2007 à 19:17:24 | Re : indexer des mots

juju12

Et bien il faut que tu scannes ton texte en comptant le nombre de délimiteurs de ligne (CR sûrement, code ASCII 13) jusqu'à tomber sur le mot souhaité...
samedi 29 décembre 2007 à 20:06:56 | Re : indexer des mots

Neo_Fr

Membre Club
Tu peux utiliser cette source pr lire tes lignes: http://www.cppfrance.com/codes/WIN32-LIRE-FICHIER-LIGNE-LIGNE_44453.aspx Ensuite utilise cette fonction: LPSTR __stdcall StrSearch(LPSTR Str, LPSTR ToSearch) { DWORD StrLen = 0, ToSearchLen = 0, i = 0; StrLen = strlen(Str); ToSearchLen = strlen(ToSearch); while(1) { if(Str[i] == ToSearch[0]) { if(!memcmp(Str, ToSearch, ToSearchLen)) break; } if(i++ == StrLen) break; } return &Str[i]; } Neo_Fr
dimanche 30 décembre 2007 à 16:51:45 | Re : indexer des mots

mapinfo

Bonsoir,

Je n'ai pas compris ton code source pour lire le fichier ilgne par ligne, expliquez-moi ce qu'il est fait (main.c et le Readline.c), le role de chaque fonction. Il y a beaucoup de choses que je n'arrive pas à comprendre, elles sont nouvelles pour moi.

lundi 31 décembre 2007 à 10:11:08 | Re : indexer des mots

Neo_Fr

Membre Club
Ne t'occupe pas du code, tout ce que tu as a faire c'est d'inclure ReadLine.c et ReadLine.h dans ton projet, dans ton main.c met #include "ReadLine.h" Cet exemple lit les 10 premiere ligne de 'szFileName': #define LINE_MAX_SIZE 512 char szFileName[] = "C:\\ton_fichier.txt"; BYTE Buffer[LINE_MAX_SIZE]; // Le Buffer qui contiendra la ligne DWORD i; LPOPENL lpoLine; lpoLine = OpenLine(szFileName, GetTypeOfFile(szFileName)); // On ouvre le ficier. for(i=1; i<=10; i++) { ReadLine(lpoLine, i, Buffer); // On lit la ligne 'i' et on la met dans la variable 'Buffer' printf("Ligne(%i) = %s\n", i, Buffer); // On l'affiche.. } //Quand on a fini on appelle CloseLine: CloseLine(lpoLine); Neo_Fr
mercredi 2 janvier 2008 à 17:21:38 | Re : indexer des mots

mapinfo

Bonsoir,

Voilà, j'utilise in IDE (code::Blocs), j'ai créé un projet index, puis dans les sources, j'ai écris les fichiers suivants (main.c et ReadLine.c). Dans les headers, j'ai écris le fichier ReadLine.h. Expliquez-moi comment je peux intégrer mon fichier de texte (index) qui contient neuf lignes pour qu'il puisse être lu. Comment compiler et exécuter tous ces fichiers, sachant que je n'ai pas un seul fichier, si c'était le cas, je sais comment compiler et exécuter un seul fichier sous code::Blocs( Build et Run). Tous ce que je veux savoir maintenant, c'est comment faire pour que mon fichier texte soit lu ligne par ligne, l'intégrer parmi tous ces fichiers, c'est-à-dire lors de la compilation et l'exécution, soit reconnu et qu'il fait parti de mon projet et finalement, il affiche ce que je vous ai montré tout au début, exemple :
petits : [4]
plaisir : [1]
programme : [1, 2, 7]

mapinfo
mercredi 2 janvier 2008 à 22:12:31 | Re : indexer des mots

Neo_Fr

Membre Club
dans ton projet tu doit avoir main.c, ReadLine.c et ReadLine.h, met ca dans ton fichier main.c: #incude #include #include "ReadLine.h" #define LINE_MAX_SIZE 512 char szFileName[] = "C:\\ton_fichier.txt"; // met le chemin de ton fichier ici int main(void) { BYTE Buffer[LINE_MAX_SIZE]; // Le Buffer qui contiendra la ligne DWORD i; LPOPENL lpoLine; lpoLine = OpenLine(szFileName, GetTypeOfFile(szFileName)); // On ouvre le ficier. for(i=1; i<=10; i++) { ReadLine(lpoLine, i, Buffer); // On lit la ligne 'i' et on la met dans la variable 'Buffer' printf("Ligne(%i) = %s\n", i, Buffer); // On l'affiche.. } system("PAUSE"); return 0; } Voila cet exemple te lira les 10 premiere lignes de ton fichier, maintenant que tu sais comment lire le fichier ligne par ligne a toi de faire le reste.. Neo_Fr
mercredi 2 janvier 2008 à 22:13:49 | Re : indexer des mots

Neo_Fr

Membre Club
Et met CloseLine(lpoLine); juste avant system("PAUSE"); Neo_Fr
mercredi 2 janvier 2008 à 22:13:50 | Re : indexer des mots

Neo_Fr

Membre Club
Et met CloseLine(lpoLine); juste avant system("PAUSE"); Neo_Fr
jeudi 3 janvier 2008 à 14:33:05 | Re : indexer des mots

mapinfo

Bonjour,
Voilà, j'ai appliqué ce que tu m'as indiqué. j'ai mis dans mon projet les trois fichiers suivants: main.c, ReadLine.c et ReadLine.h. Mon fichier texte s'appelle indexe-moi, j'ai mis le chenin de mon fichier. Je travaille avec code::blocks et non pas avec dev C++, donc je n'ai pas besoin de system("pause");
Voici main.c
#include <windows.h>
#include <stdio.h>
#include "ReadLine.h"

#define LINE_MAX_SIZE 512
char szFileName[] = "C:\Documents and Settings\Mes documents\Informatique\Python\indexe-moi.txt"; // met le chemin de ton fichier ici

int main(void)
{
    BYTE Buffer[LINE_MAX_SIZE]; // Le Buffer qui contiendra la ligne
    DWORD i;
    LPOPENL lpoLine;
    lpoLine = OpenLine(szFileName, GetTypeOfFile(szFileName)); // On ouvre le ficier.
    for(i=1; i<=10; i++)
    {
        ReadLine(lpoLine, i, Buffer); // On lit la ligne 'i' et on la met dans la variable 'Buffer'
        printf("Ligne(%i) = %s\n", i, Buffer); // On l'affiche..
    }
    CloseLine(lpoLine);
    return 0;
}


ReadLine.c
#include "ReadLine.h"

LPOPENL __stdcall OpenLine(char* FileName, BYTE FileType)
{
LPOPENL lpoLine;
lpoLine = (LPOPENL) HeapAlloc(GetProcessHeap(), HEAP_NO_SERIALIZE, sizeof(OPENL));
ZeroMemory(lpoLine, sizeof(OPENL));
lpoLine->hFile = CreateFile(FileName, GENERIC_READ, 0, 0, OPEN_ALWAYS, 0, 0);
if(lpoLine->hFile == INVALID_HANDLE_VALUE) goto Error;
lpoLine->FileSize = GetFileSize(lpoLine->hFile, 0);
if(lpoLine->FileSize == INVALID_FILE_SIZE) goto Error;
lpoLine->hFileMapping = CreateFileMapping(lpoLine->hFile, 0, PAGE_READONLY, 0, 0, 0);
if(!lpoLine->hFileMapping) goto Error;
lpoLine->Buffer = (BYTE*) MapViewOfFile(lpoLine->hFileMapping, FILE_MAP_READ, 0, 0, 0);
if(!lpoLine->Buffer) goto Error;
lpoLine->FileType = FileType;
if((FileType == OPENL_WINDOWS_FILE)||(FileType == OPENL_MAC_FILE)) lpoLine->CrLf = 0x0D;
if(FileType == OPENL_UNIX_FILE) lpoLine->CrLf = 0x0A;
return (LPOPENL) lpoLine;
Error:
CloseLine(lpoLine);
return (LPOPENL) 0;
}

DWORD __stdcall ReadLine(LPOPENL lpoLine, DWORD nLine, char* LineOut)
{
DWORD LineSize = 0, pBuff = 0, ln = 0;
if(!nLine) return 0;
if(nLine >= lpoLine->LastLine) pBuff = lpoLine->pFile;
while(1)
{
if(lpoLine->Buffer[pBuff] == lpoLine->CrLf)
{
ln++;
if(ln == nLine) break;
LineSize = 0;
}
if(pBuff == lpoLine->FileSize) break;
pBuff++; LineSize++;
}

if( (lpoLine->FileType == OPENL_WINDOWS_FILE)&&(pBuff != LineSize) ) LineSize -= 2;
if( (lpoLine->FileType == OPENL_UNIX_FILE)&&(pBuff != LineSize) ) LineSize--;
if( (lpoLine->FileType == OPENL_MAC_FILE)&&(pBuff != LineSize) ) LineSize--;
pBuff -= LineSize;
if(LineOut)
{
memcpy(LineOut, &lpoLine->Buffer[pBuff], LineSize);
LineOut[LineSize] = 0;
lpoLine->pFile = pBuff;
lpoLine->LastLine = nLine;
}
return LineSize;
}

void __stdcall CloseLine(LPOPENL lpoLine)
{
if(lpoLine->Buffer)UnmapViewOfFile(lpoLine->Buffer);
if(lpoLine->hFileMapping) CloseHandle(lpoLine->hFileMapping);
if(lpoLine->hFile) CloseHandle(lpoLine->hFile);
HeapFree(GetProcessHeap(), HEAP_NO_SERIALIZE, lpoLine);
}

int __stdcall GetTypeOfFile(char* FileName)
{
HANDLE hFile;
BYTE* Buffer;
DWORD FileSize = 0, Cr = 0, Lf = 0, pBuff = 0, br;
int RetValue = -1;
hFile = CreateFile(FileName, GENERIC_READ, 0, 0, OPEN_ALWAYS, 0, 0);
if(hFile == INVALID_HANDLE_VALUE) return RetValue;
FileSize = GetFileSize(hFile, 0);
if(FileSize == INVALID_FILE_SIZE) goto End;
Buffer = (BYTE*) VirtualAlloc(0, FileSize, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
if(!Buffer) goto End;
if(!ReadFile(hFile, Buffer, FileSize, &br, 0)) goto End;
if(br != FileSize) goto End;
while(1)
{
if(Buffer[pBuff] == 0x0D) Cr++;
if(Buffer[pBuff] == 0x0A) Lf++;
if(pBuff == FileSize) break;
pBuff++;
}
if(Cr == Lf) RetValue = OPENL_WINDOWS_FILE;
if( (!Cr) && (Lf) ) RetValue = OPENL_UNIX_FILE;
if( (Cr) && (!Lf) ) RetValue = OPENL_MAC_FILE;
End:
if(Buffer) VirtualFree(Buffer, 0, MEM_RELEASE);
CloseHandle(hFile);
return RetValue;
}

ReagLine.h
#ifndef _WINDOWS_
#define _WIN32_WINNT 0x0501
#include <windows.h>
#endif

#define OPENL_WINDOWS_FILE 0
#define OPENL_UNIX_FILE 1
#define OPENL_MAC_FILE 2
#define BufferSize 0x200000 //2mo

typedef struct _openl
{
HANDLE hFile;
HANDLE hFileMapping;
BYTE* Buffer;
BYTE FileType;
BYTE CrLf;
DWORD FileSize;
DWORD pFile;
DWORD LastLine;
}OPENL, *LPOPENL;

LPOPENL __stdcall OpenLine(char* FileName, BYTE FileType);
DWORD __stdcall ReadLine(LPOPENL lpoLine, DWORD nLine, char* LineOut);
void __stdcall CloseLine(LPOPENL lpoLine);
int __stdcall GetTypeOfFile(char* FileName);

Lors de la compilation , il m'affiche

Build: Release in index ---------------

Target is up to date.

Nothing to be done.

Lors de l'exécution, il m'affiche la console de windows noir, avec seulement le temps d'exécution, rien d'autres. Aidez-moi SVP


1 2

Cette discussion est classée dans : programme, mots, vraiment, instruction, progressivement


Répondre à ce message

Sujets en rapport avec ce message

mots clef de programme [ par sdfght ] pouvait vous svp mexpliquer sil y a des mots clef a metre dans les programmes et quelle sont leur definitions.merci Java --> C [ par AbsoLuT ] Y'a t-il des programme qui peuvent traduire un programme en java en un programme en C ?Y'a t-il quelqu'un qui aurai par hasard un programme en C pour Big problème pour faire ce programme [ par nulmaisveutcomprendre ] Salut tout le monde.Voilà j'aimerai bien comprendre comment programmer ce programme mais je ne sais pas le faire j'ai beau réfléchir mais je n'y compr Probleme d'execution d'un programme vraiment tres bizarre [ par dletozeun ] Bonjour,J'ai créé un prog compilé sous devcpp et bizarrement il ne fonctionne que dans le dossier ou il a ete compilé !des que je le deplace dans un a instruction pour calculer le temps cpu d'un programme [ par omar2fatnassi ] SVP qu'elle est l'instruction pour calculer le temps cpu d'un programme lors d'une execution??? Merci d'avance. Recuperer réponse d'un autre programme [ par Poischack ] Bonjour,je n'y connais pratiquemment rien en c/c++ mais je ne pense pas que ce soit bien dur:je dois lancer un programme et recuperer ce qu'il dit mai Exporter tableau [ par 3463 ] Salut à tous !! J'ai vraiment vraiment besoin de votre aide [^^sad1] J'ai un problème sur mon programme que je me traîne depuis super longtemps et j' aidez moi svp! [ par wettanam ] salutje suis nouveau dans la programmation et je veux m'exercer vraiment mais des fois j'y arrive vraiment pasc un programme qui doit ouvrir un fichie Manipulation des fichiers [ par ouafaei ] Bonjour à tous, Comment faire pour écrire un programme qui affiche les mots d'un programme c sans les mots clés avec les numéros de lignes de leur app quel instruction utiliser [ par manyyy67 ] Bonjour, Je debute en c++, je suis charger des faire quelque ameliorations sur un (gros) programme professionel en c++(le IE est visual C++ 6 et le pr


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

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,671 sec (3)

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