FICHIERS - PowerPoint PPT Presentation

1 / 44
About This Presentation
Title:

FICHIERS

Description:

Le terme de fichier d signe un ensemble d'informations situ sur une ''m moire ... se fera partir de la nouvelle position (obtenue en ajoutant la valeur ... – PowerPoint PPT presentation

Number of Views:24
Avg rating:3.0/5.0
Slides: 45
Provided by: julianag7
Category:

less

Transcript and Presenter's Notes

Title: FICHIERS


1
FICHIERS
2
Les Fichiers
  • Les "entrées-sorties conversationnelles '
    échangent des informations entre le programme et
    l'utilisateur.
  • Le terme de fichier désigne un ensemble
    d'informations situé sur une ''mémoire de masse''
    telle que le disque ou la disquette.
  • Un fichier (angl. file) est un ensemble
    structuré de données stocké en général sur un
    support externe.
  • Tous les périphériques, qu ' ils soient
    d'archivage (disque, disquette , . . . ) ou de
    communication (clavier, écran, imprimante,...),
    peuvent être considérés comme des fichiers.
  • Le principal inconvénient est le temps d'accès à
    une donnée.


3
Les Fichiers
  • Un fichier structuré contient une suite
    d'enregistrements homogènes, qui regroupent le
    plus souvent plusieurs composantes appartenant
    ensemble (champs).
  • L'insertion et la suppression d'éléments qu'en
    fin d'un fichier devra passer par la création
    d'un nouveau fichier.
  • On distingue traditionnellement deux techniques
    de gestion de fichiers
  • l'accès séquentiel consiste à traiter les
    informations "séquentiellement", c'est-à-dire
    dans l'ordre où elles apparaissent (ou
    apparaîtront) dans le fichier,
  • l'accès direct consiste à se placer immédiatement
    sur l'information souhaitée, sans avoir à
    parcourir celles qui la précèdent.


4
Les Fichiers
  • Fichier séquentiel
  • Les enregistrements sont mémorisés
    consécutivement dans l'ordre de leur entrée et
    peuvent seulement être lus dans cet ordre.
  • Si on a besoin d'un enregistrement précis dans un
    fichier séquentiel, il faut lire tous les
    enregistrements qui le précèdent, en commençant
    par le premier.


5
Les Fichiers
  • Fichier séquentiel
  • Le grand avantage est qu'il peut contenir des
    données de tout type, de taille différente.
  • Il ne peut en général pas être modifié, la seule
    possibilité étant l'ajout derrière les données
    déjà stockées.
  • Fichier direct
  • Il correspond à un tableau en mémoire toutes
    ses composantes ont la même taille, on peut donc
    accéder directement à la Nième.
  • Les insertions et suppressions nécessitent des
    décalages des composantes suivantes.


6
Les Fichiers
  • La mémoire tampon
  • Les accès à un fichier se font par
    l'intermédiaire d'une mémoire tampon (angl.
    buffer) - une zone de la mémoire centrale de la
    machine réservée à un ou plusieurs
    enregistrements du fichier.
  • L'utilisation de la mémoire tampon a l'effet de
    réduire le nombre d'accès à la périphérie d'une
    part et le nombre des mouvements de la tête de
    lecture/écriture d'autre part.


7
Les Fichiers
  • Flots
  • Les fichiers sont vus par le programmeur comme
    des flots, c'est-à-dire des suites d'octets qui
    représentent des données selon une des deux
    modalités suivantes
  • Soit le fichier contient les caractères (presque
    toujours le code ASCII). De tels fichiers sont
    appelés fichiers de texte.
  • Ils peuvent être affichés, édités, imprimés, etc.


8
Les Fichiers
  • Flots
  • Soit le fichier contient des données enregistrées
    sous une forme qui est la copie exacte de leur
    codage dans la mémoire. On l'appelle alors
    fichier binaire.
  • Les opérations de lecture ou d'écriture sur de
    tels fichiers sont très rapides, car elles ne
    requièrent pas un travail d'analyse ou de
    synthèse de l'expression écrite des données.
  • Ils ne sont pas éditables ou imprimables.
  • Ils ne sont pas censés être transportables d'un
    logiciel à un autre, encore moins d'un système à
    un autre.
  • Ils sont utiles pour manipuler des données de
    grande taille ou ayant un type composé.


9
Les Fichiers
  • Fonctions générales sur les flots
  • Les flots sont représentés dans les programmes
    par des variables de type FILE (la structure
    FILE est définie dans le fichier ltstdio.hgt).
  • Ouverture dun fichier - la fonction ouvre le
    fichier dont le nom est indiqué par la chaîne nom
    et rend un pointeur sur le flot correspondant, ou
    NULL si l'opération a échoué.


FILE fichier
Déclaration dune fichier par la variable fichier
FILE fopen(const char nom, const char mode)
10
Les Fichiers
  • Fonctions générales sur les flots
  • Ouverture dun fichier - les valeurs permises
    pour mode


11
Les Fichiers
  • Fonctions générales sur les flots
  • Fermeture dun fichier la fonction ferme le
    flot indiqué, produisant l'écriture physique des
    tampons. Elle rend zéro en cas de succès, une
    autre valeur en cas d'erreur.
  • Fin de fichier (feof) - la fonction renvoie une
    valeur non nulle si et seulement si l'indicateur
    de fin de fichier du flot indiqué est vrai. feof
    n'est jamais vrai après l'ouverture (en lecture)
    du fichier, même lorsque ce dernier est vide. Il
    faut au moins une tentative de lecture pour le
    rendre vrai.


int fclose(FILE fichier)
int feof(FILE fichier)
12
Les Fichiers
  • Fonctions générales sur les flots


le schèma de lecture séquentielle d'un fichier
FILE pf . . . pf fopen(nom,
"rb") vérification du succès de l'ouverture de
fichier . . . lecture de données sur
fichier while ( ! feof(pf)) traitement des
données lues lecture de données sur fichier .
. .
13
Les Fichiers
  • Fonctions générales sur les flots
  • Lecture et écriture textuelles
  • Lecture et écriture de caractères et de chaînes
  • Les fonctions de lecture - écriture effectuent la
    lecture ou l'écriture d'un caractère.


Renvoie le caractère suivant sur le flot indiquè
ou EOF si la fin du fichier est atteinte ou en
cas derreur.
int fgetc(FILE flot)
int fputc(int caractere, FILE flot)
Ecrit le caractere indiqué sur le flot. Renvoie
le caractère écrit ou EOF en cas derreur.
14
Les Fichiers
  • Fonctions générales sur les flots
  • Lecture et écriture textuelles
  • Exemple Faire un programme qui lit et affiche
    le fichier "C\AUTOEXEC.BAT" en le parcourant
    caractère par caractère.


include ltstdio.hgt include ltstdlib.hgt main()
FILE fp fp fopen("C\\AUTOEXEC.BAT", "r")
if (!fp) printf("Impossible
d'ouvrir le fichier\n") exit(-1)
while (!feof(fp)) putchar(fgetc(fp))
fclose(fp) return 0
15
Les Fichiers
  • Fonctions générales sur les flots
  • Lecture et écriture textuelles
  • Lecture et écriture de caractères et de chaînes
  • La fonction de la lecture d'une ligne. On
    s'arrête lorsqu'elle a lu n-1 caractères ou
    lorsqu'elle a rencontré un caractère \n.
  • La fonction d'écriture d'une ligne renvoie EOF en
    cas d'erreur, une valeur gt 0 dans les autres
    cas.


lit des caractères sur le flot indiqué et les
place dans l'espace pointé par s.
char fgets(char s, int n, FILE flot)
écrit la chaîne s sur le flot indiqué.
int fputs(const char s, FILE flot)
16
Les Fichiers
  • Fonctions générales sur les flots
  • Lecture et écriture textuelles
  • Exemple Faire un programme de 1) création dun
    fichier en entrant ligne par ligne son contenu
    par clavier 2) daffichage le fichier lu par
    lignes.


include ltstdio.hgt 1/3 include
ltstdlib.hgt include ltconio.hgt include
ltctype.hgt void main() FILE p char
f_nom10,ligne63 printf("Entrer f_nom")
gets(f_nom) pfopen(f_nom,"w")
if(pNULL) printf("Le fichier n'est pas
ouvert\n") exit(1)
Ouverture du fichier avec un nom donné.
17
Les Fichiers
  • Fonctions générales sur les flots
  • Lecture et écriture textuelles
  • Exemple


Création du fichier.
do 2/3
printf("\nEntrer une ligne\n") fgets(ligne,62,
stdin) fputs(ligne,p) printf("Entrer
caractere e(E) pour la fin")
while(toupper(getch())!'E') fclose(p)
18
Les Fichiers
  • Fonctions générales sur les flots
  • Lecture et écriture textuelles
  • Exemple


pfopen(f_nom,"r") 3/3 if(pNULL)
printf("Le fichier n'est pas ouvert\n")
exit(1) printf("\n") fgets(ligne,62,p)
while(!feof(p)) puts(ligne)
fgets(ligne,62,p) fclose(p)
Lire et afficher le fichier.
Entrer f_nom a Entrer une ligne Traitement dun
fichier Entrer caractere e(E) pour la fin Entrer
une ligne ligne par ligne. Entrer caractere e(E)
pour la fin Traitement dun fichier ligne par
ligne.
19
Les Fichiers
  • Fonctions générales sur les flots
  • Lecture et écriture textuelles
  • Lecture et écriture avec format


Comme scanf mais sur le flot indiqué (à la
place de stdin)
int fscanf(FILE flot, const char format,
...v1,vk )
Comme printf mais sur le flot indiqué (à la
place de stdout)
int fprintf(FILE flot, const char format, ...
exp1,expk )
20
Les Fichiers
  • Fonctions générales sur les flots
  • Lecture et écriture textuelles
  • Lecture et écriture avec format
  • ltFPgt est un pointeur du type FILE qui est relié
    au nom du fichier à lire.
  • ltAdr1gt, ltAdr2gt, ... , ltAdrNgt représentent les
    adresses des variables qui vont recevoir les
    valeurs des différentes rubriques d'un
    enregistrement lu dans le fichier.
  • ltForm1gt, ltForm2gt, ... , ltFormNgt représentent les
    spécificateurs de format pour la lecture des
    différentes rubriques.


fscanf(ltFPgt,"ltForm1gt\nltForm2gt\n...\nltFormNgt\n",
ltAdr1gt, ltAdr2gt, ... ,
ltAdrNgt)
21
Les Fichiers
  • Fonctions générales sur les flots
  • Lecture et écriture textuelles
  • Lecture et écriture avec format
  • ltFPgt est un pointeur du type FILE qui est relié
    au nom du fichier cible.
  • ltExpr1gt, ltExpr2gt, ... , ltExprNgt représentent les
    rubriques qui forment un enregistrement et dont
    les valeurs respectives sont écrites dans le
    fichier.
  • ltForm1gt, ltForm2gt, ... , ltFormNgt représentent les
    spécificateurs de format pour l'écriture des
    différentes rubriques.


fprintf(ltFPgt,"ltForm1gt\nltForm2gt\n...\nltFormNgt\n",
ltExpr1gt, ltExpr2gt, ... , ltExprNgt)
22
Les Fichiers
  • Fonctions générales sur les flots
  • Lecture et écriture textuelles
  • Exemple Faire un programme de 1) création dun
    fichier en entrant linformation
    denregistrements - détails (nom et prix) 2)
    daffichage le fichier lu par enregistrements.


include ltstdio.hgt 1/2 include
ltstdlib.hgt includeltctype.hgt include
ltconio.hgt void main() FILE p char
f_nom10, nom20 float prix
printf("Entrer f_nom") gets(f_nom)
pfopen(f_nom,"w") if(pNULL) printf("Le
fichier n'est pas ouvert\n") exit(1)
Ouverture du fichier avec un nom donné.
23
Les Fichiers
  • Fonctions générales sur les flots
  • Lecture et écriture textuelles
  • Exemple


Création du fichier.
do printf("\nnom") gets(nom)
2/2 printf("prix")
scanf("f",prix)fflush(stdin)
fprintf(p,"s\nf",nom,prix)
printf("Enregistremen suivant?O/N")
while(toupper(getch())'O') fclose(p)
pfopen(f_nom,"r") if(pNULL) printf(" Le
fichier n'est pas ouvert\n ") exit(1)
while(fscanf(p,"sf",nom,prix)!EOF) printf("\n
s .2f",nom,prix) fclose(p)
Lire et afficher le fichier.
Entrer f_nomb nomdetail1 prix2.50 Enregistremen
suivant?O/N nomdetail2 prix50 Enregistremen
suivant?O/N detail1 2.50 detail2 50.00
24
Les Fichiers
  • Fonctions générales sur les flots
  • Lecture et écriture en mode binaire
  • Lecture - la fonction essaye de lire sur le flot
    indiqué nombre objets, chacun ayant la taille
    indiquée, et les copie les uns à la suite des
    autres dans l'espace pointé par destination. Elle
    renvoie le nombre d'objets effectivement lus (et
    non pas le nombre d'octets lus), qui peut être
    inférieur au nombre demandé, à cause de la
    rencontre de la fin du fichier, d'une erreur,
    etc.
  • Remarque size_t, défini dans stddef.h,
    correspond au type du résultat de l'évaluation de
    sizeof.


size_t fread(void destination, size_t taille,
size_t nombre, FILE flot)
25
Les Fichiers
  • Fonctions générales sur les flots
  • Lecture et écriture en mode binaire
  • Ecriture - la fonction écrit les nombre objets,
    chacun ayant la taille indiquée, qui se trouvent
    les uns à la suite des autres à l'adresse
    indiquée par source. Elle renvoie le nombre
    d'objets écrits, qui peut être inférieur au
    nombre demandé (en cas d'erreur).
  • fwrite permet de transférer plusieurs blocs
    consécutifs de même taille à partir d'une adresse
    donnée.


size_t fwrite(const void source, size_t taille,
size_t nombre, FILE flot)
26
Les Fichiers
  • Fonctions générales sur les flots
  • Lecture et écriture en mode binaire
  • Exemple - Faire un programme à 1) enregistrer
    séquentiellement dans un fichier une suite de
    nombres entiers qu'on lui fournit au clavier 2)
    lister le contenu du fichier crée.


include ltstdio.hgt include ltstdlib.hgt
1/2 int main(void) char nomfich21
int n FILE sortie, entree printf
("nom du fichier a creer ") scanf
("20s", nomfich) sortie fopen (nomfich,
"wb") if(sortie NULL) printf("Le
fichier n'est pas ouvert\n") exit(1)
Ouverture du fichier avec un nom donné.
27
Les Fichiers
  • Fonctions générales sur les flots
  • Lecture et écriture en mode binaire
  • Exemple


Création du fichier.
do 2/2 printf ("donnez
un entier ") scanf ("d", n) if
(n) fwrite(n, sizeof(int), 1, sortie) while
(n) fclose (sortie) entree fopen
(nomfich, "rb") if(entree NULL)
printf("Le fichier n'est pas ouvert\n") exit(1)
while ( fread (n, sizeof(int), 1, entree),
! feof(entree) ) printf ("\nd", n)
fclose (entree) return 0
nom du fichier a creer a donnez un entier
22 donnez un entier 33 donnez un entier
44 donnez un entier 0 22 33 44
Lire et afficher le fichier.
28
Les Fichiers
  • Fonctions générales sur les flots
  • Lecture et écriture en mode binaire
  • Exemple - le programme suivant écrit un tableau
    d'entiers (contenant les 20 premiers entiers)
    avec fwrite dans le fichier sortie, puis lit ce
    fichier avec fread et imprime les éléments du
    tableau.


include ltstdio.hgt 1/3 include
ltstdlib.hgt define NB 20 define F_SORTIE
"sortie" int main(void) FILE f_in, f_out
int tab1, tab2 int i tab1
(int)malloc(NB sizeof(int)) tab2
(int)malloc(NB sizeof(int))
Réservation de la mémoire dynamiques.
29
Les Fichiers
  • Fonctions générales sur les flots
  • Lecture et écriture en mode binaire
  • Exemple


for (i 0 i lt NB i) 2/3
tab1i i / ecriture du tableau dans
F_SORTIE / if ((f_out fopen(F_SORTIE, "wb"))
NULL) fprintf(stderr, "\nImpossible
d'ecrire dans le fichier s\n",F_SORTIE)
return(EXIT_FAILURE) fwrite(tab1, NB
sizeof(int), 1, f_out) fclose(f_out) /
lecture dans F_SORTIE / if ((f_in
fopen(F_SORTIE, "rb")) NULL)
fprintf(stderr, "\nImpossible de lire dans le
fichier s\n",F_SORTIE)
return(EXIT_FAILURE)
Écrire dans le fichier 1 objet (le tableau).
30
Les Fichiers
  • Fonctions générales sur les flots
  • Lecture et écriture en mode binaire
  • Exemple


fread(tab2, NB sizeof(int), 1, f_in)
3/3 fclose(f_in) for (i 0 i lt NB
i) printf("d\t",tab2i) printf("\n")
return(EXIT_SUCCESS)
Lire du fichier 1 objet (le tableau).
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
31
Les Fichiers
  • Fonctions générales sur les flots
  • Positionnement dans un fichier (ACCÈS DIRECT)
  • On peut se positionner ? n'importe quel endroit
    précis du fichier à l 'aide de la fonction fseek.
  • La fonction positionne le pointeur du fichier
    associé au flot indiqué.
  • La première lecture ou écriture ultérieure se
    fera à partir de la nouvelle position (obtenue en
    ajoutant la valeur de déplacement à une valeur de
    base (origine) qui peut être la position
    courante, la fin ou le début du fichier.
  • La fonction renvoie zéro en cas de succès, une
    valeur non nulle en cas d'erreur.


int fseek(FILE flot, long deplacement, int
origine)
32
Les Fichiers
  • Fonctions générales sur les flots
  • Positionnement dans un fichier (ACCÈS DIRECT)
  • La valeur dargument origine doit être une des
    constantes (définies dans ltstdio.hgt)
  • La fonction à retourner la position courante dans
    le fichier (en nombre d'octets depuis l'origine)
    ftell.


SEEK SET base le début du fichier ou 0 SEEK
CUR base la position courante ou 1 SEEK END
base la fin du fichier ou 2
long ftell(FILE flot)
33
Les Fichiers
  • Fonctions générales sur les flots
  • Positionnement dans un fichier (ACCÈS DIRECT)
  • La fonction permettant de se positionner au début
    du fichier. rewind


équivalente ?fseek(flot, 0, SEEK_SET)
int rewind(FILE flot)
34
Les Fichiers
  • L'accès relatif aux éléments des fichiers
  • (accès direct aux composantes (enregistrements)
  • d'un fichier)
  • Le fichier puisse être vu comme une suite
    d'articles de même taille.
  • Cela s'obtient généralement en déclarant une
    structure qui représente un article, selon le
    modèle


typedef struct . . . champs dont se composent
tous les articles . . . ARTICLE . . . FILE
fichier . . . fichier fopen(nom , "rb")
35
Les Fichiers
  • L'accès relatif aux éléments des fichiers
  • (accès direct aux composantes (enregistrements)
  • d'un fichier)
  • Si les articles sont numérotés à partir de zéro


lecture de l'enregistrement de rang n
ARTICLE article . . . fseek(fichier, n
sizeof(ARTICLE), SEEK_SET) fread( article,
sizeof(ARTICLE), 1, fichier) . . . exploitation
des valeurs des champs de article . .
. affectation des champs de article . .
. fseek(fichier, n sizeof(ARTICLE),
SEEK_SET) fwrite( article, sizeof(ARTICLE), 1,
fichier) . . .
écriture de la composante de rang n
36
Les Fichiers
  • L'accès relatif aux éléments des fichiers
  • Exemple faire un programme de constituer un
    fichier d'entiers en laissant l'utilisateur les
    fournir dans l'ordre de son choix.


include ltstdio.hgt 1/2 int
main(void) char nomfich21 FILE
sortie long num int n printf
("nom fichier ") scanf ("20s",nomfich)
sortie fopen (nomfich, "wb")
while (printf("\nrang de l'entier "),
scanf("ld",num), num) printf ("valeur
de l'entier ") scanf ("d", n) fseek
(sortie, sizeof(int)(num-1), SEEK_SET) fwrite
(n, sizeof(int), 1, sortie)
écriture des composantes (n) dans le fichier
selon leurs rang num
37
Les Fichiers
  • L'accès relatif aux éléments des fichiers
  • Exemple


rewind(sortie) 2/2
while(fread(n,sizeof(int),1,sortie),!feof(sortie)
) printf("d\n",n) fclose(sortie)
return 0
Lire le fichier et afficher
nom fichier a rang de l'entier 1 valeur de
l'entier 11 rang de l'entier 3 valeur de
l'entier 22 rang de l'entier 5 valeur de
l'entier 33 rang de l'entier 0 11 0 22 0 33
38
Les Fichiers
  • L'accès relatif aux éléments des fichiers
  • Exemple Faire un programme C de création d'un
    fichier binaire d'éléments de type structuré.
    Chaque structure est composée des champs
    suivants a) nom - chaîne de caractères b)
    groupe - nombre entier c) note - nombre reél.
    Afficher linformation des étudiants. Faire un
    changement du champ groupe si on decide de le
    faire. Utiliser les fonctions differentes pour
    chaque action.


include ltstdio.hgt 1/6 include
ltconio.hgt include ltctype.hgt include
ltstdlib.hgt struct student char nom60
int groupe float note
La définition du modèle
39
Les Fichiers
  • L'accès relatif aux éléments des fichiers
  • Exemple


Les prototypes
FILE writefile(char name_file)
2/6 int readfile(FILE fp,char name_file) FILE
updatefile(FILE fp,char name_file) void
main() FILE fp int r char
name_file30 printf("Entrer le nom du
fichier ") gets(name_file)
fpwritefile(name_file) if(fp ! NULL)
printf("\nLe fichier est cree\n ") else
printf("Le fichier n'est pas cree") exit(1)
rreadfile(fp,name_file) if(r)
printf(\nLe fichier est affiche\n ")
fpupdatefile(fp,name_file)
readfile(fp,name_file)
40
Les Fichiers
  • L'accès relatif aux éléments des fichiers
  • Exemple


FILE writefile(char name_file) 3/6
FILE fp struct student s if((fpfopen(name_
file,"wb")) NULL) printf("\nLe fichier s
n'est pas ouvert\n",name_file) exit(1)
do printf("\nnomgt") gets(s.nom)
printf("groupegt") scanf("d",s.groupe)
printf("notegt") scanf("f",s.note)
while((getchar()) ! '\n') fwrite(s,sizeo
f(s),1,fp) printf("Element suivant? Y/N
gt") while(toupper(getch())'Y')
fclose(fp) return(fp)
La création du fichier
41
Les Fichiers
  • L'accès relatif aux éléments des fichiers
  • Exemple


int readfile(FILE fp,char name_file)
4/6 struct student temp int
flag0 if((fpfopen(name_file,"rb"))
NULL) printf("\nLe fichier s n'est pas
ouvert\n",name_file) printf("\nPresser une
touche") getch() exit(1)
while(fread(temp,sizeof(temp),1,fp)1)
flag1 printf(\ns d
.2f\n",temp.nom,temp.groupe,temp.note)
fclose(fp) if(!flag) printf("\nFichier vide.
Creer le fichier !") return flag
Lire et afficher le fichier
42
Les Fichiers
  • L'accès relatif aux éléments des fichiers
  • Exemple


Changer le champ groupe. Ouverture du fichier à
être changer.
FILE updatefile(FILE fp,char name_file)
5/6 struct student s long int
pos if((fpfopen(name_file,"rb")) NULL)
printf("\nLe fichier s n'est pas
ouvert\n",name_file) exit(1)
43
Les Fichiers
  • L'accès relatif aux éléments des fichiers
  • Exemple


while(fread(s,sizeof(s),1,fp)1)
6/6 printf("\nL'element lu\n") printf("
s d .2f\n",s.nom,s.groupe,s.note) printf
("On va changer le groupe? Y/N ")
if(toupper(getch()) 'Y')
printf("\nEntrer le groupe ")
scanf("d",s.groupe) while((getchar())
! '\n') posftell(fp)-sizeof(s)
fseek(fp,pos,0) fwrite(s,sizeof(s),1,fp)
posftell(fp) fseek(fp,pos,0)
fclose(fp) return(fp)
Changer le champ groupe.
44
Les Fichiers
  • L'accès relatif aux éléments des fichiers
  • Exemple


Entrer le nom du fichier a nomgtIvanov groupegt12
note gt4 Element suivant? Y/N gt nomgtPetrov grou
pegt13 note gt5 Element suivant? Y/N gt Le
fichier est cree Ivanov 12 4 Petrov 13 5 Le
fichier est affiche
L'element lu Ivanov 12 4 On va changer le
groupe? Y/N L'element lu Petrov 13 5 On va
changer le groupe? Y/N Entrer le groupe
12 Ivanov 12 4 Petrov 12 5
Le changement du fichier. Laffichage du fichier.
La création du fichier. Laffichage du fichier.
Write a Comment
User Comments (0)
About PowerShow.com