Votre tâche consiste à implémenter un programme similaire à l' nl
outil de ligne de commande des utilitaires principaux GNU.
Les failles standard sont interdites.
Vous ne pouvez utiliser aucune fonction, programme ou utilitaire intégré ou externe pour numéroter les lignes d'un fichier ou d'une chaîne, comme nl
lui-même ou la =
commande dans GNU sed.
spécification
Contribution
Le programme accepte les noms de fichiers comme arguments. Votre code n'a pas besoin d'être multiplateforme; le format de nom de fichier du système d'exploitation exécutant le code doit être utilisé, c'est-à-dire que si vous êtes sous Windows, le séparateur de répertoire peut être \
ou /
.
Vous devez pouvoir prendre 64 fichiers d'entrée, y compris -
s'il est spécifié. Si plus de 64 sont donnés, ne gérez que les 64 premiers.
Dans la liste des noms de fichiers, -
représente l'entrée standard.
Si des noms de fichiers sont donnés, lisez les fichiers dans l'ordre où ils sont donnés et concaténez leur contenu, en insérant une nouvelle ligne entre chacun et à la fin. Si vous ne pouvez pas lire un ou plusieurs des noms de fichiers (parce que le fichier n'existe pas ou que vous ne disposez pas des autorisations de lecture pour celui-ci), ignorez-les. Si tous les noms de fichiers spécifiés ne sont pas valides, ne rien produire.
Si aucun nom de fichier n'est donné, lisez à partir de l'entrée standard. Lire uniquement à partir de l'entrée standard si aucun nom de fichier n'est donné ou si -
est donné.
Production
Le programme sortira, en sortie standard, l'entrée avec des lignes numérotées ainsi (vous pouvez supposer que l'entrée a \n
, \r\n
ou des \r
fins de ligne; choisissez celle qui vous convient, mais spécifiez laquelle):
<5 spaces>1<tab><content of line 1 of input>
<5 spaces>2<tab><content of line 2 of input>
...
<4 spaces>10<tab><content of line 10 of input>
...
<3 spaces>100<tab><content of line 100 of input>
...
...
6 caractères d'espace sont alloués pour le numéro de ligne, et il est inséré à la fin de ces caractères; les autres deviennent des espaces (par exemple, 1
auront 5 espaces de tête, 22
auront 4 espaces de tête, ...). Si l'entrée est suffisamment longue, vous finirez par manquer d'espace pour le numéro de ligne, à la ligne 999999
. Vous ne devez rien sortir après la ligne 999999.
Si l'entrée est vide, rien ne sort.
Statut de sortie
Les nombres inférieurs sont prioritaires: si des erreurs 1 et 2 se sont produites, quittez avec le statut 1.
Quittez avec l'état 0 si l'entrée a été reçue avec succès et si les lignes ont été numérotées et sorties avec succès.
Quittez avec le statut 1 si un ou plusieurs des fichiers spécifiés sur la ligne de commande sont introuvables ou ne peuvent pas être lus.
Quittez avec le statut 2 si trop de fichiers (plus de 64) ont été donnés.
Quittez avec l'état 3 si l'entrée était trop longue (plus de 999999 lignes). \
Notation
C'est le code-golf - le programme le plus court gagne!
Je peux ajouter des bonus plus tard pour la mise en œuvre de certaines options nl
. Il n'y a pas de bonus pour le moment.
prompt()
pour émuler le programme args et stdin?