Projet Crypto

0. Préambule et tutoriel

Dans la suite, vous devez télécharger le fichier suivant, permettant de lire des données et écrire des données dans des fichiers texte : Fichier.java. Les deux premiers exercices du TP2 doivent avoir été terminés.

Voici, pour vous aider, la fonction est_un_caractere, qui prend en paramètre une variable de type char, et renvoie en sortie un booléen (vrai ou faux) selon que la variable char représentait une lettre ou autre chose (symbole, espace, ponctuation, ...). Placez cette fonction dans votre fichier Main.java, elle vous sera utile pour la suite.

public static boolean est_une_lettre(char c)
{
    return Character.isLetter(c);
}

Pour terminer, dans chacune des trois parties à traiter, vous trouverez une rubriques "conseils" : cette rubrique vous propose d'organiser votre code afin de vous faciliter la tâche. Vous n'êtes pas obligés de suivre ces conseils, mais c'est fortement recommandé.

 

Tutoriel pour lire et écrire dans un fichier (et manipuler les caractères)

Imaginons que l'on souhaite lire le fichier tutoriel.txt (clique droit puis enregistrer-sous), remplacer toutes les lettres de ce fichier par des astérisques (le symbole *) et écrire le résultat dans le fichier sortie.txt.

Dans la suite, il faudra écrire le code exclusivement dans la fonction main du fichier Main.java.

Pour lire un fichier texte en entrée, on appelle la fonction lire_fichier contenue dans Fichier.java, en lui passant en paramètre le nom du fichier à lire (ici, tutoriel.txt). Cette fonction renvoie un tableau de caractères dans lequel sont stockés TOUS les caractères composant le fichier, les uns après les autres : dans la première case du tableau sera stocké le premier caractère du fichier, puis dans la seconde case sera stocké le second caractère du fichier, etc...

Il faut donc, avant d'appeler la fonction, déclarer (sans le construire, donc PAS de new) un simple tableau de caractère (le new sera effectué à l'intérieur de la fonction lire_fichier) qui récupèrera le tableau construit par la fonction :

char[] caracteres_fichier;

caracteres_fichier = Fichier.lire_fichier("tutoriel.txt");

Si l'on souhaite afficher tous les caractères du fichier à l'écran, on affichera chaque case du tableau caracteres_fichier à l'écran :

int i;
for (i=0; i<caracteres_fichier.length; i=i+1)
{
    System.out.println( caracteres_fichier[i] );
}

Maintenant, on va parcourir le tableau afin de remplacer toutes les lettres par le caractère '*'. Pour ce faire, on parcourt, comme précédemment, le tableau case par case. A chaque case, on regarde si le caractère qui s'y trouve est une lettre ou non (grâce à la fonction donnée en début de page) et si c'est le cas, on remplace le caractère du tableau par un symbole '*'.

char c;
for (i=0; i<caracteres_fichier.length; i=i+1)
{
    c = caracteres_fichier[i]; //On récupère le caractère dans la case i du tableau
   
    if( est_une_lettre(c) ) //c est-il une lettre ?
    {
        //c est bien un lettre, on modifie, dans le tableau, le caractère à la case i par une étoile
        caracteres_fichier[i] = '*';
    }
}

On pourrait faire plus court en évitant d'utiliser la variable c, ce qui nous donnerait :

for (i=0; i<caracteres_fichier.length; i=i+1)
{
    if( est_une_lettre( caracteres_fichier[i] ) )
    {
        caracteres_fichier[i] = '*';
    }
}

Enfin, pour terminer, on écrit notre tableau modifié de caractères dans le fichier de sortie (sortie.txt), en utilisant la fonction ecrire_fichier contenue dans Fichier.java. Cette fonction prend en paramètre le nom du fichier de sortie où l'on souhaite écrire, et le nom du tableau de caractères à écrire dans le fichier :

Fichier.ecrire_fichier( "sortie.txt", caracteres_fichier );

Vous pouvez ensuite regarder le fichier sortie.txt, qui devrait contenir ce qui était prévu au début.

En cliquant ici, je reconnais avoir bien lu les instructions et je suis prêt à passer à la suite !