2013-03-07 4 views
1

J'ouvre un fichier et j'imprime quelques données sur l'écran, mais je veux nettoyer l'écran après avoir sorti les données, j'utilise clear; dans le programme, mais je ne vois pas l'effet de nettoyer. Il n'a pas nettoyé. Y at-il n'importe quelle commande ou fonction peut me laisser faire cela?Comment nettoyer la sortie

Je veux voir le contiennent d'un fichier uniquement, mais pas voir du fichier précédent sur l'écran ...

Voici mes programmes

`ls > File_List`; 
open List , "<./File_List"; 
while(eof(List)!=1) 
{ 
     $Each = readline(*List); 
     chomp $Each; 

     print $Each; 
     print "\n"; 
     `clear`; 
     open F , "<./$Each"; 
     while(eof(F)!=1) 
     { 
       for($i=0;$i<20;$i++) 
       { 
         $L = readline(*F); 
         print $L; 
       } 
       last; 
     } 
     close(F); 
     sleep(3); 
     $Each = ""; 
} 
close List; 

Merci

+0

'use strict; utiliser les avertissements; ' –

Répondre

1

clear ne fonctionne pas parce que la séquence de contrôle qu'il émet pour effacer l'écran est capturé et renvoyé à votre programme au lieu d'être envoyé à l'affichage.

Essayez

print `clear` 

ou

system('clear') 

au lieu

2

Votre programme utilise Perl non idiomatique. Un style plus naturel serait

#!/usr/bin/env perl 

use strict; 
use warnings; 
no warnings 'exec'; 

opendir my $dh, "." or die "$0: opendir: $!"; 

while (defined(my $name = readdir $dh)) { 
    if (-T $name) { 
    system("clear") == 0 or warn "$0: clear exited " . ($? >> 8); 
    print $name, "\n"; 
    system("head", "-20", $name) == 0 or warn "$0: head exited " . ($? >> 8); 

    sleep 3; 
    } 
} 

Au lieu d'écrire une liste de noms à un autre fichier, lire les noms directement avec opendir et readdir. La vérification defined est nécessaire dans le cas où vous avez un fichier nommé 0, que Perl considère comme étant une valeur fausse et terminerait prématurément la boucle.

Vous ne voulez pas imprimer tout. L'entrée du répertoire peut être un répertoire ou une image exécutable ou une archive tar. Le test de fichier -T tente de deviner si le fichier est un fichier texte.

Appelez la commande externe clear à l'aide de system de Perl.

Enfin, utilisez la commande externe head pour imprimer les 20 premières lignes de chaque fichier texte.

+0

Merci, ça marche ... – user2131116

+0

De rien. Je suis content que ça aide. –

+0

Il semble dommage d'abandonner 'ls' en faveur de' opendir'/'readdir', puis de sortir juste pour utiliser' head'. – Borodin

0

La solution que vous avez fournie ne fonctionne pas car la commande clear est exécutée dans une sous-coque. Je suggère l'utilisation d'un module CPAN (et multi plate-forme supportée): Term::Screen::Uni

Exemple:

use Term::Screen::Uni; 
my $screen = Term::Screen::Uni->new; 
$screen->clrscr; 
+0

Cela n'a rien à voir avec l'existence d'un sous-shell. Le problème est que la sortie de '\' clear \ '' ne va pas à l'affichage. – Borodin

0

Utilisez system(), cela fonctionne.

system("ls > File_List"); 
system("clear;");