/// <summary> /// Lis un fichier et retourne le texte decode et un dictionnaire /// </summary> /// <param name="nomFichier">Nom du fichier a lire</param> /// <returns></returns> public static Decodage Decode(string nomFichier) { // Initialisation TextReader tr = new StreamReader(nomFichier); Decodage resultat = new Decodage(); string tmp = ""; resultat.dico = new Dictionary <string, char>(); string code; char nChar; // Parcours l'entête while (tr.Peek() > -1) { // Vide la variable code code = string.Empty; // écrit le caractère dans nChar nChar = (char)tr.Read(); // Si on lis le fanion on skip le fanion et on passe au texte if (tr.Peek() == '0') { for (int i = 0; i < 7; i++) { tr.Read(); } break; } // On skip l'espace entre les caractère tr.Read(); // Tant qu'on a pas fini de lire le code while (tr.Peek() != ' ') { // Rajoute le code a la variable code code += (char)tr.Read(); } // Insere la lettre et le code dans le dictionnaire resultat.dico.Add(code, nChar); tr.Read(); } // Parcours le texte encodé while (tr.Peek() > -1) { // Rajoute le chiffre 1/0 dans tmp tmp += (char)tr.Read(); // Si ça correspond a un encodage d'une lettre if (resultat.dico.ContainsKey(tmp)) { // Rajoute cette lettre au texte final resultat.text += resultat.dico[tmp]; // Renitialise tmp tmp = ""; } } tr.Close(); return(resultat); }
/// <summary> /// Function principale qui permet de decoder un fichier /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void BtnDecoder_Click(object sender, EventArgs e) { // Initialisation string affichage = string.Empty; string fichier = tbxSource.Text; string fichierDest = tbxDestination.Text; string textDecode = ""; tbxAffichage.Text = "Decodage en cours veuillez patientez..."; // Appele la fonction de decodage Decodage decode = Decode(fichier); // Ressort les valeurs dans des variables textDecode = decode.text; Dictionary <string, char> dico = decode.dico; // Création du texte à afficher dans la textbox a partir du dictionnaire for (int i = 0; i < dico.Count; i++) { affichage += "Lettre : " + dico.ElementAt(i).Value; affichage += " Code : " + dico.ElementAt(i).Key; affichage += Environment.NewLine; } affichage += "\nVotre texte a été enregistré dans : " + fichierDest; // Si un fichier du meme nom existe le supprime if (File.Exists(fichierDest)) { File.Delete(fichierDest); } // Ecrit le resultat dans le fichier demandé File.WriteAllText(fichierDest, textDecode); // Affichage lblEntropie.Text = "Entropie : Calcul Impossible"; lblRedondance.Text = "Redondance (R=D-H) : Calcul Impossible"; lblBitsAvant.Text = (textDecode.Length * 8).ToString() + " bits"; lblBitsApres.Text = "Calcul Impossible"; tbxAffichage.Text = affichage; }