Exemple 3

alain Adelmar
                                                                          aadelmar@numericable.fr beuuh c est quoi ca

Encore un exemple, avec un petit editeur de console
Mais ces exemples sont très vieux, il dates de mes débuts il y a 10 ans.
L'excercice commenté exo_commente.html est beaucoup plus complet et commenté, mot par mot et ligne par ligne, donc plus instructif.


alEd

Votre propre éditeur sur tout les xterm et autre console

Voilà vous voulez votre propre éditeur facile rapide qui s'ouvre instantanement sur la console pour pouvoir saisir ce que vous voyez, et bien il suffit de déclarer
(@mon_editeur = <STDIN>;) en gros c'est tout.
Mais en rajoutant quelques fonctionnalitées on peux faire un petit menu:
nouveau, ouvrir, sauvegarder
on peut aussi sauver le travail par défaut dans un fichier style note_du_date.log , etc ...



 
 

#!/usr/bin/perl -w
# remd: Mon editeur alEd avec un menu. (ce programme tourne bien)
# alain adelmar Juillet 2002

$dt = localtime(time);

# les différantes variables ***************
$x = "x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x\n";
$bienvenu = "$x$dt\tx*x\n$x\nBienvenu sur l'éditeur aled\n   editeur alain A_d_e_l_m_a_r\nTaper Ctr-D pour sortir\n\n$x\n\n";
$prompt = "Entrer votre choix: nouveau(0), ouvrir(1), sauvegarder(2)\nou continuez(Enter)...\n";
# initialisé à
$choix = 3;
$travail = 0;

&choix;

sub choix {
  while($choix ne "")
    { # affiche un prompt en boucle
      print("$prompt");
      $choix = <STDIN>;
      chop($choix);
      if($choix eq "0")
 {
   &nouveau;
 }
      if($choix eq "1")
 {
   &ouvrir;
 }
      elsif($choix eq "2")
 {
   &sauv;
 }
    }
}
print "$x";
print "désirez vous sortir maintenant:\n";
$resp = <STDIN>;
chomp $resp;
if ($resp =~ /^o|y/i) {
  print "$x";
  die "merci, à tchao...\n$x\n";
}
else {
  if ($travail >=1) {
    &choix;
  }
  else {
    &nouveau;
  }
}

sub nouveau {
 
  print $bienvenu;
  $travail++;
 
 
  @contenu = <STDIN>;
  print "n'oublier pas de sauver votre travail qui par defaut sera sauvegarder sur votre repertoire avec pour nom 'edition_date_du_jour.log'\n";
 
  $filetmp = "trav_" . "$dt" . "\.log";
  open FTMP, ">$filetmp" or die "Ouverture impossible $!";
  print FTMP @contenu;
  close FTMP or die "fermeture a l'os gros_caca $!";
}

sub ouvrir {
  print "Quel fichier désirez vous ouvrir:\n";
  $filename = <STDIN>;
  chomp $filename;
  until (-e $filename) {
    print "veuillez enrer un nom de fichier correct, (svp)\n";
    $filename = <STDIN>;
    chomp $filename;
  }
  open FO, "$filename" or die "Ouverture impossible $!";
  @contenu = <FO>;
  close FO or die "fermeture impossible $!";
  # voir si il est possible de directement ecrire print <STDOUT> @contenu
  foreach $ligne(@contenu) {
    print $ligne;
  }
 
  print "\n";
  print $bienvenu;
  @nwcontenu = <STDIN>;
  print "n'oublier pas de sauver votre travail\nqui par defaut sera sauvegarder\nsur votre repertoire avec pour nom:\n'edition_date_du_jour.log'\n";
  $dt = localtime(time);$dico1 = $dico;
  $filetmp = "trav_" . "$dt" . "\.log";
  $ligne_vierge = "\n\n";
  push @contenu, $ligne_vierge;
 
  push @contenu, "@nwcontenu";
  open FTMP, ">$filetmp" or die "Ouverture impossible $!";
  print FTMP @contenu;
  close FTMP or die "fermeture a l'os gros_caca $!";
}
 

sub sauv {
  print "entrez le nom de votre travail\n";
  $filename = <STDIN>;
  chomp $filename;
  # controler si un fichier n'a pas le meme nom
  if (-e $filename) {
    $dt = localtime(time);
    ($file, $ext)= split(/./, $filename);
    $new_filename = "$file" . "_$dt" . "\.$ext";
    print "Votre travail sera sauvegarder sous $new_filename\n";
    open(F, ">$new_filename") or die "Ouverture impossible $!";
    print F @contenu;
    close F || die "fermeture impossible $!";
  }
  else {
    open(F, ">$filename") or die "Ouverture impossible $!";
    print F @contenu;
    close F || die "fermeture impossible $!";
  }
}

# Ce petit programme est une petite mérveille
# alain Adelmar, 14 Aout 2001, aadelmar@wanadoo.fr

exec '/usr/bin/clear';
# remet une page blanche au shell.

END;

retour en haut de page



précèdent | suivant | sommaire
Last modified: Sun Jul 7 18:31:13 CEST 2002