[LMI] - TD4 - Se placer à la nième ligne d'un fichier....

Page 1 sur 2 1, 2  Suivant

Voir le sujet précédent Voir le sujet suivant Aller en bas

[LMI] - TD4 - Se placer à la nième ligne d'un fichier....

Message  Jiraiya-08 le Ven 02 Mai 2008, 17:58

Salut Smile

Dans le cadre de l'exercice d'évaluation du TD4, où il faut traiter la propriété palindrome de chaque ligne de fichier, j'aurais voulu savoir comment faire pour se placer au début d'une nième ligne du dit fichier. J'avais pensé à faire à LSEEK avec un décalage du nombre de caractère (avec les LF) de chaque ligne depuis le début du fichier, mais je me suis dis qu'il y avais surement une manière plus simple de faire....


Enfin voilà, j'espère que je me suis fais comprendre, parce que je suis souvent confu ^^

Merci Smile


Dernière édition par Jiraiya-08 le Sam 03 Mai 2008, 13:26, édité 1 fois

Jiraiya-08

Nombre de messages : 111
Age : 28
Prénom : Georges
Statut : Ancien - Promo 2010
Localisation : Rapture
Date d'inscription : 13/10/2007

Revenir en haut Aller en bas

Re: [LMI] - TD4 - Se placer à la nième ligne d'un fichier....

Message  nvs le Ven 02 Mai 2008, 18:34

sachant que les lignes ne sont pas de taille fixe, je ne vois d'autre solution que de se placer au caractère suivant le n-1è retour chariot pour atteindre le premier caractère de la nè ligne. si certains ont d'autres idées, qu'ils n'hésitent surtout pas Smile






_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [LMI] - TD4 - Se placer à la nième ligne d'un fichier....

Message  Jiraiya-08 le Ven 02 Mai 2008, 18:39

en gros comme je l'ai expliqué non ??? Suspect

Jiraiya-08

Nombre de messages : 111
Age : 28
Prénom : Georges
Statut : Ancien - Promo 2010
Localisation : Rapture
Date d'inscription : 13/10/2007

Revenir en haut Aller en bas

Re: [LMI] - TD4 - Se placer à la nième ligne d'un fichier....

Message  pbt le Ven 02 Mai 2008, 18:43

Jiraiya-08 a écrit:en gros comme je l'ai expliqué non ??? Suspect
Sauf qu'il faudra que tu m'expliques comment tu vas connaitre le nombre de bytes représentants les n-1 lignes. Amha pour cet exercice le mieux est de lire ligne par ligne. C'est-à-dire écrire une fonction qui lit une ligne et ... l'utiliser dans une boucle.

N'oubliez pas que ça a son importance de ne pas lire deux fois le fichier ...


_________________
smartq.namok.be · faq ·  · IRC / irc.freenode.net #esi · blog.namok.be
style #pbt {heigth:189cm; weight:79kg; eye-color:#524000; hair:very short; dead pixels: some; }

pbt
Admin

Nombre de messages : 4862
Age : 45
Prénom : Pierre
Statut : prof
Localisation : La cité des géants
Date d'inscription : 24/11/2005

http://esi.namok.be

Revenir en haut Aller en bas

Re: [LMI] - TD4 - Se placer à la nième ligne d'un fichier....

Message  Jiraiya-08 le Ven 02 Mai 2008, 19:08

Lire ligne par ligne, d'accord, je veux bien, mais avec quoi ??? fgets ??? getLine ?

J'ai regardé dans les man respectifs, et on parle de "FILE* stream"... Je ne vois pas ce que c'est malheureusement...

Je comprends vraiment pas...

En labo, vous nous aviez conseillé de faire une méthode lireLigne, mais quelle ligne (son numéro ??? ) ???

Vous aurez compris que je suis dans une confusion totalle quant à lire LA ligne... Crying or Very sad

Merci pour votre aide... ;-)

Jiraiya-08

Nombre de messages : 111
Age : 28
Prénom : Georges
Statut : Ancien - Promo 2010
Localisation : Rapture
Date d'inscription : 13/10/2007

Revenir en haut Aller en bas

Re: [LMI] - TD4 - Se placer à la nième ligne d'un fichier....

Message  nvs le Ven 02 Mai 2008, 19:27

PbT a écrit:N'oubliez pas que ça a son importance de ne pas lire deux fois le fichier ...
pour l'exercice d'évaluation également ?






_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [LMI] - TD4 - Se placer à la nième ligne d'un fichier....

Message  nvs le Ven 02 Mai 2008, 19:28

Jiraiya-08 a écrit:En labo, vous nous aviez conseillé de faire une méthode lireLigne, mais quelle ligne (son numéro ??? ) ???
l'appel système qui permet de lire une suite de caractère, il lit quels caractères ? et bien, la fonction lireLigne fait de même Smile






_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [LMI] - TD4 - Se placer à la nième ligne d'un fichier....

Message  Jiraiya-08 le Ven 02 Mai 2008, 19:39

nvs a écrit:
Jiraiya-08 a écrit:En labo, vous nous aviez conseillé de faire une méthode lireLigne, mais quelle ligne (son numéro ??? ) ???
l'appel système qui permet de lire une suite de caractère, il lit quels caractères ? et bien, la fonction lireLigne fait de même Smile



Bah il lit les caractère à partir du premier, dans le file descriptor passé en paramètre, et ce, avec count caractères maximum. Alors que la, je n'ai ni le début de la lecture (ou lire ?) ni combien lire (ça, c'est pas vraiment un pb, tant que(char !=10))...

Jiraiya-08

Nombre de messages : 111
Age : 28
Prénom : Georges
Statut : Ancien - Promo 2010
Localisation : Rapture
Date d'inscription : 13/10/2007

Revenir en haut Aller en bas

Re: [LMI] - TD4 - Se placer à la nième ligne d'un fichier....

Message  nvs le Ven 02 Mai 2008, 19:45

Jiraiya-08 a écrit:
nvs a écrit:
Jiraiya-08 a écrit:En labo, vous nous aviez conseillé de faire une méthode lireLigne, mais quelle ligne (son numéro ??? ) ???
l'appel système qui permet de lire une suite de caractère, il lit quels caractères ? et bien, la fonction lireLigne fait de même Smile



Bah il lit les caractère à partir du premier, dans le file descriptor passé en paramètre, et ce, avec count caractères maximum. Alors que la, je n'ai ni le début de la lecture (ou lire ?) ni combier lire (ca, c'est pas vraiment un pb, tant que(char !=10))...
il me semble que tu réponds à ta question, à ton insu. lireLigne lit la ligne qui commence au prochain caractère, dans le file descriptor passé en paramètre. il est prudent de limiter sa lecture à un nombre de caractères stockables dans le tampon de sortie (exactement comme l'appel système en fait).










_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [LMI] - TD4 - Se placer à la nième ligne d'un fichier....

Message  Jiraiya-08 le Ven 02 Mai 2008, 19:59

nvs a écrit:

"il me semble que tu réponds à ta question, à ton insu. lireLigne lit la ligne qui commence au prochain caractère, dans le file descriptor passé en paramètre. il est prudent de limiter sa lecture à un nombre de caractères stockables dans le tampon de sortie (exactement comme l'appel système en fait)."

"lireLigne lit la ligne qui commence au prochain caractère">>> au prochain, mais à partir de quoi ? Suspect

"dans le file descriptor passé en paramètre" >>> mais à quel ligne ? comment lui dire: "lis à partir de tel ligne" ????

PS: Je suis désolé si je semble ne rien comprendre, mais je vois vraiment pas comment mettre en oeuvre le machin... Crying or Very sad

Jiraiya-08

Nombre de messages : 111
Age : 28
Prénom : Georges
Statut : Ancien - Promo 2010
Localisation : Rapture
Date d'inscription : 13/10/2007

Revenir en haut Aller en bas

Re: [LMI] - TD4 - Se placer à la nième ligne d'un fichier....

Message  nvs le Ven 02 Mai 2008, 20:08

Jiraiya-08 a écrit:"lireLigne lit la ligne qui commence au prochain caractère">>> au prochain, mais à partir de quoi ? Suspect
à partir du caractère suivant le dernier lu dans le fichier concerné.

Jiraiya-08 a écrit:"dans le file descriptor passé en paramètre" >>> mais à quel ligne ? comment lui dire: "lis à partir de tel ligne" ????
à la ligne qui commence au premier caractère suivant le dernier lu dans le fichier concerné.

l'appel système permettant de lire un fichier lit les octets séquentiellement. lors d'un appel, les octets lus sont ceux qui suivent le dernier lu. la méthode java nextLine() de la classe Scanner lit la prochaine ligne disponible dans le flux associé au Scanner. ta méthode lireLigne en fait de même.

l'appel système pour lire un (ou une suite de) caractère(s) reçoit en paramètre un descripteur de fichier, un tampon en sortie et un nombre maximal d'octets à lire.

de même la fonction lireLigne reçoit en paramètre un descripteur de fichier, un tampon en sortie et un nombre maximal d'octets à lire.

lire une ligne dans un fichier, c'est simplement lire une séquence d'octets jusqu'à rencontrer le délimiteur de ligne Smile










_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [LMI] - TD4 - Se placer à la nième ligne d'un fichier....

Message  Jiraiya-08 le Ven 02 Mai 2008, 20:37

Merci BEAUCOUP lol Wink


Donc, en gros, je fais:

traiterFichier:
____ouvrir(file);
____lseek(file, début);
____String L;
____tantque(! file.eof()){
________L = lireLigne(file);
________if( estPalindrome(L) ){
____________compteur ++
____________if(param2 = -sp){
________________ecrireLigne(L):
____________}
________}
____}
finTraiterFichier:

et aussi:

lireLigne:
____String L;
____char c;
____faire:
________lire(fd, c, 1);
________L += c;
____tantque(c=!10 && !file.eof());
____return L;
finLireLigne:

C'est bien ca ?? Smile


Dernière édition par Jiraiya-08 le Ven 02 Mai 2008, 20:44, édité 1 fois

Jiraiya-08

Nombre de messages : 111
Age : 28
Prénom : Georges
Statut : Ancien - Promo 2010
Localisation : Rapture
Date d'inscription : 13/10/2007

Revenir en haut Aller en bas

Re: [LMI] - TD4 - Se placer à la nième ligne d'un fichier....

Message  nvs le Ven 02 Mai 2008, 21:02

Jiraiya-08 a écrit:Donc, en gros, je fais:

[...]
en gros oui.

quand tu ouvres un fichier, inutile de te positionner en début, tu y est d'office. je te conseille de donner à lireLigne le prototype suivant :
Code:
int lireLigne(int fd, char * buffer, int maxLength)
où l'entier retourné sert à savoir si tout s'est bien passé, fd indique dans quel fichier lire, buffer reçoit le résultat de la lecture et maxLength sert à ne pas exploser le buffer. cela entraîne l'obsolescence de la variable locale L de ton lireLigne.

mais bon, à part ces petits points (et peut-être d'autres), tes logiques me semblent tenir la route Smile







Dernière édition par nvs le Ven 02 Mai 2008, 21:15, édité 1 fois

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [LMI] - TD4 - Se placer à la nième ligne d'un fichier....

Message  pbt le Ven 02 Mai 2008, 21:13

nvs a écrit:
PbT a écrit:N'oubliez pas que ça a son importance de ne pas lire deux fois le fichier ...
pour l'exercice d'évaluation également ?
Non, je ne pense pas, c'est plutot dans le cas du "tail" que ça a son importance.


_________________
smartq.namok.be · faq ·  · IRC / irc.freenode.net #esi · blog.namok.be
style #pbt {heigth:189cm; weight:79kg; eye-color:#524000; hair:very short; dead pixels: some; }

pbt
Admin

Nombre de messages : 4862
Age : 45
Prénom : Pierre
Statut : prof
Localisation : La cité des géants
Date d'inscription : 24/11/2005

http://esi.namok.be

Revenir en haut Aller en bas

Re: [LMI] - TD4 - Se placer à la nième ligne d'un fichier....

Message  Jiraiya-08 le Ven 02 Mai 2008, 21:29

nvs a écrit:

quand tu ouvres un fichier, inutile de te positionner en début, tu y est d'office. je te conseille de donner à lireLigne le prototype suivant :
Code:
int lireLigne(int fd, char * buffer, int maxLength)
où l'entier retourné sert à savoir si tout s'est bien passé, fd indique dans quel fichier lire, buffer reçoit le résultat de la lecture et maxLength sert à ne pas exploser le buffer. cela entraîne l'obsolescence de la variable locale L de ton lireLigne.

mais bon, à part ces petits points (et peut-être d'autres), tes logiques me semblent tenir la route Smile

Pour le buffer de la ligne, le buffer du char, et le fd, j'utilise des variables non déclarée. C'est bon ? (au lieu de les passer en paramètre)

Et puis, le maxLength ne peut t'il pas être fixe et non paramètrable ???? (genre 200 charactères )

Encore Merci Smile


Dernière édition par Jiraiya-08 le Sam 10 Mai 2008, 13:58, édité 1 fois

Jiraiya-08

Nombre de messages : 111
Age : 28
Prénom : Georges
Statut : Ancien - Promo 2010
Localisation : Rapture
Date d'inscription : 13/10/2007

Revenir en haut Aller en bas

Re: [LMI] - TD4 - Se placer à la nième ligne d'un fichier....

Message  nvs le Ven 02 Mai 2008, 21:45

Jiraiya-08 a écrit:Pour le buffer de la ligne, le buffer du char, et le fd, j'utilise des variables non déclarée. C'est bon ? (au lieu de les passer en paramètre)
j'ignore ce qu'est une variable non déclarée... mais je ne vois pas comment ne pas passer en paramètre le descripteur de fichier Shocked

Jiraiya-08 a écrit:Et puis, le maxLength ne peut t'il pas être fix et non paramètrable ???? (genre 200 charactères )
l'intérêt d'utiliser des paramètres, c'est la souplesse dans la réutilisabilité. pourquoi fixer des valeurs alors qu'elles varient selon les besoins. c'est un peut comme si l'appel système pour lire dans un fichier ne permettait pas de choisir la nombre d'octets qu'on veut lire. c'est inutilement contraignant Smile





_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [LMI] - TD4 - Se placer à la nième ligne d'un fichier....

Message  Jiraiya-08 le Ven 02 Mai 2008, 21:52

pas une variable non déclarée pardon lol, une variable non initialisée...

Pour le fd, il sera le même durant tout le traitement des lignes d'un fichier, et je le sauvegarde dans une variable aussi.

Le fait que je n'utilise pas beaucoup les paramètres viens simplement du fait que je ne suis vraiment pas à l'aise avec Crying or Very sad

Jiraiya-08

Nombre de messages : 111
Age : 28
Prénom : Georges
Statut : Ancien - Promo 2010
Localisation : Rapture
Date d'inscription : 13/10/2007

Revenir en haut Aller en bas

Re: [LMI] - TD4 - Se placer à la nième ligne d'un fichier....

Message  nvs le Ven 02 Mai 2008, 21:58

Jiraiya-08 a écrit:pas une variable non déclarée pardon lol, une variable non initialisée...

Pour le fd, il sera le même durant tout le traitement des lignes d'un fichier, et je le sauvegarde dans une variable aussi.

Le fait que je n'utilise pas beaucoup les paramètres viens simplement du fait que je ne suis vraiment pas à l'aise avec Crying or Very sad
si tes bouts de codes utilisent des variables globales (comme paramètres implicites), je crains qu'on ne puisse parler de fonctions puisqu'on ne peut les utiliser librement Crying or Very sad






_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [LMI] - TD4 - Se placer à la nième ligne d'un fichier....

Message  Jiraiya-08 le Ven 02 Mai 2008, 22:07

nvs a écrit:
Jiraiya-08 a écrit:pas une variable non déclarée pardon lol, une variable non initialisée...

Pour le fd, il sera le même durant tout le traitement des lignes d'un fichier, et je le sauvegarde dans une variable aussi.

Le fait que je n'utilise pas beaucoup les paramètres viens simplement du fait que je ne suis vraiment pas à l'aise avec Crying or Very sad
si tes bouts de codes utilisent des variables globales (comme paramètres implicites), je crains qu'on ne puisse parler de fonctions puisqu'on ne peut les utiliser librement Crying or Very sad

Et donc, il vaut mieux les passer sur la pile ?

Alala... Déjà que je n'arrive pas à faire fonctionner la gestion des argc et argv, je crains le pire Crying or Very sad


Edit:


Puis-je néanmoins prendre les valeurs passée en paramètre, et les stocker dans des variables locales ??? Si oui, sous quel section devrais-je les intituler ???

Merci Smile

Jiraiya-08

Nombre de messages : 111
Age : 28
Prénom : Georges
Statut : Ancien - Promo 2010
Localisation : Rapture
Date d'inscription : 13/10/2007

Revenir en haut Aller en bas

Re: [LMI] - TD4 - Se placer à la nième ligne d'un fichier....

Message  pbt le Ven 02 Mai 2008, 23:29

Jiraiya-08 a écrit:Puis-je néanmoins prendre les valeurs passée en paramètre, et les stocker dans des variables locales ??? Si oui, sous quel section devrais-je les intituler ???

Merci Smile

Amha c'est bcp plus lourd --et moins propre-- de recopier les paramères de la fonction (qui se trouvent sur la pile) dans des variables locales (qui sont également sur la pile) ... Il est plus simple d'utiliser tes valeurs de paramètres qui sont aux adresses [ebp+i].

_________________
smartq.namok.be · faq ·  · IRC / irc.freenode.net #esi · blog.namok.be
style #pbt {heigth:189cm; weight:79kg; eye-color:#524000; hair:very short; dead pixels: some; }

pbt
Admin

Nombre de messages : 4862
Age : 45
Prénom : Pierre
Statut : prof
Localisation : La cité des géants
Date d'inscription : 24/11/2005

http://esi.namok.be

Revenir en haut Aller en bas

Re: [LMI] - TD4 - Se placer à la nième ligne d'un fichier....

Message  Jiraiya-08 le Ven 02 Mai 2008, 23:36

OK, merci Smile

Sinon, monsieur, pourriez vous m'envoyez le bout de code pour la lecture de fichier mp3 en java s'il vous plait ??? Merci Smile

Mon e-mail:

gatmaja (at) hotmail.com


Encore Merci :-D

Jiraiya-08

Nombre de messages : 111
Age : 28
Prénom : Georges
Statut : Ancien - Promo 2010
Localisation : Rapture
Date d'inscription : 13/10/2007

Revenir en haut Aller en bas

[LMIC] evaluation

Message  john le Ven 02 Mai 2008, 23:42

salut à tous,
Jiraiya-08 , je voulais te demander une chose comment tu as fait le seek?, parce que le problème ce que pour le td3 j'ai utilsé l'appel system append, j'ai essayé avec le seek mais je n'ai pas réussi? tu pourais m'expliquer stp?Neutral

john

Nombre de messages : 64
Prénom : john
Statut : 2ème Reseaux
Date d'inscription : 25/11/2007

Revenir en haut Aller en bas

Re: [LMI] - TD4 - Se placer à la nième ligne d'un fichier....

Message  Wilbur le Sam 03 Mai 2008, 00:29

je ne suis pas Jiraiya-08, mais je crois pouvoir faire l'affaire...

Le lseek te permet de déplacer la tête de lecture dans un fichier.

Il fonctionne comme suit:

Numéro de l'appel système:

Code:
mov eax,19

Descripteur de fichier:

Code:
mov ebx,[fileDescriptor]

Décalage (offset), c'est-à-dire le nombre d'octets avant ou après le whence:

Code:
mov ecx, [offset]

Et enfin le whence, soit la position de la tête de lecture dans le fichier +- offset octets.
le whence peut prendre plusieurs valeurs différentes:
-0 =->la tête est au début
-1 =->la tête reste là où elle se trouve actuellement
-2 =->la tête est à la fin

L'appel système lseek renvoie dans eax, le nombre d'octets de là où elle se situe après l'appel.

Un petit exemple:
Code:

mov eax,19
mov ebx,[fd]
mov ecx,0    ;décalage 0
mov edx,2    ;à la fin
int 80h

mov dword [offset],eax    ;sauvegarde du nombre d'octets parcourus, soit la fin du fichier

mov eax,19
mov ebx,[fd]
mov ecx,[offset]  ;à la fin
sub ecx,[unNombre]  ;et où tu veux
mov edx,0    ;au début, plus offset
int 80h

C'est à peu près tout, si j'ai commis une erreur, qu'on me le fasse remarquer silent

Wilbur

Nombre de messages : 46
Age : 27
Prénom : Romain
Statut : Etudiant 2ème Réseaux
Date d'inscription : 20/02/2008

Revenir en haut Aller en bas

Re: [LMI] - TD4 - Se placer à la nième ligne d'un fichier....

Message  Jiraiya-08 le Sam 03 Mai 2008, 00:34

Merci Wilbur pour l'explication Smile

Sinon, John, sache que je ne vais pas utiliser le lseek.


En fait, quand tu l'ouvre, tu est au début, et à chaque lecture d'une ligne, tu est positionné à la fin de ta fonction lireLigne au début de la prochaine ligne.

Tu n'en a donc pas besoin Smile

Jiraiya-08

Nombre de messages : 111
Age : 28
Prénom : Georges
Statut : Ancien - Promo 2010
Localisation : Rapture
Date d'inscription : 13/10/2007

Revenir en haut Aller en bas

[LMIC] merci

Message  john le Sam 03 Mai 2008, 00:39

merci beaucoup, tu aides beaucoup dans le forum cest bien ça....Wink

john

Nombre de messages : 64
Prénom : john
Statut : 2ème Reseaux
Date d'inscription : 25/11/2007

Revenir en haut Aller en bas

Re: [LMI] - TD4 - Se placer à la nième ligne d'un fichier....

Message  Contenu sponsorisé Aujourd'hui à 10:56


Contenu sponsorisé


Revenir en haut Aller en bas

Page 1 sur 2 1, 2  Suivant

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum