Comment effacer des caractères imprimés dans une application console (Linux)?
Je suis entrain de créer une petite application console qui a besoin d'une barre de progression. Quelque chose comme...
Conversion: 175/348 Seconds |========== | 50%
Ma question est, comment voulez-vous effacer des caractères déjà imprimé sur la console? Quand j'arrive à la 51e pourcentage, je dois effacer cette ligne à partir de la console et insérer une nouvelle ligne. Dans ma solution actuelle, c'est ce qui se passe...
Conversion: 175/348 Seconds |========== | 50%
Conversion: 179/348 Seconds |========== | 52%
Conversion: 183/348 Seconds |========== | 54%
Conversion: 187/348 Seconds |=========== | 56%
Code que j'utilise est...
print "Conversion: $converted_seconds/$total_time Seconds $progress_bar $converted_percentage%\n";
Je le fais sous Linux à l'aide de PHP(seulement, je vais utiliser l'app, s'il vous plaît excuser le choix de la langue). Donc, la solution devrait fonctionner sur la plate-forme Linux - mais si vous avez une solution multi-plateforme, ce serait préférable.
source d'informationauteur Binny V A
Vous devez vous connecter pour publier un commentaire.
Je ne pense pas que vous avez besoin de s'excuser pour le choix de la langue. PHP est un langage parfait pour les applications de console.
Essayez ceci:
Le "\r", les plus à droite de la ligne avec le nouveau texte. Pour faire une nouvelle ligne, vous pouvez simplement utiliser "\n", mais je suppose que vous le saviez déjà.
Espérons que cette aide! Je sais que cela fonctionne sous Linux, mais je ne sais pas si il fonctionne sous Windows ou d'autres systèmes d'exploitation.
Pour effacer un déjà imprimé de personnage, vous avez trois options:
echo chr(8) . " ";
fait écho à l'arrière de caractère, et de déplacer le curseur en arrière d'une place, et l'espace qui le remplace ensuite le personnage. Vous pouvez utiliserchr(8)
plusieurs fois dans une rangée pour reculer de plusieurs personnages.echo "\r";
sera de retour le curseur au début de la ligne courante. Vous pouvez maintenant remplacer la ligne avec le nouveau texte.La troisième option consiste à définir la ligne et de colonne de la position du curseur à l'aide d'échappement ANSI codes, puis imprimer les caractères de remplacement. Il pourrait ne pas fonctionner avec tous les terminaux:
\r fait le tour.
Référence pour l'avenir, \b ne fonctionne pas en PHP sous Linux. J'étais curieux donc j'ai fait quelques expériences dans d'autres langues(je l'ai fait en Linux je ne sais pas si le résultat sera le même dans Windows/Mac)..
\b Travaille en...
puts -nonewline "Hello\b"
\b Ne fonctionne pas dans
print "Hello\b";
imprimeHello\b
print "Hello\b"
imprimeHello<new line>
. Même résultat avecprint "Hello\b",
Je ne suis pas sûr si c'est la même chose sous Linux, mais dans la console Windows apps vous pouvez imprimer \r et le curseur sera de retour à la première position la plus à gauche de la ligne, vous permettant de remplacer tous les caractères à droite.
Vous pouvez utiliser \b pour reculer d'un caractère unique, mais puisque vous allez être mise à jour de votre barre de progression \r serait plus simple à utiliser que l'impression \b x nombre de fois.
Cela semble être assez vieux sujet, mais je vais laisser tomber mon 5.
Trouvé ceci sur internet il y a quelques temps, malheureusement, ne me souviens pas où. Sorte que tous les crédits va à l'auteur original.
pour effacer un déjà imprimé de personnage, j'ai l'impression d'un retour arrière après:
print "a"
print "\b"
imprime rien (en fait, il apparaîtra à l'impression, puis un retour arrière, mais vous ne remarquerez probablement pas)