Il tuo compito è implementare un programma simile allo nlstrumento da riga di comando delle utility GNU core.
Scappatoie standard sono vietate.
Non è possibile utilizzare alcuna funzione, programma o utilità incorporati o esterni per numerare le righe di un file o stringa, come se nlstesso o il= comando in GNU sed.
specificazione
Ingresso
Il programma accetta nomi di file come argomenti. Il tuo codice non deve essere multipiattaforma; deve essere utilizzato il formato del nome file del sistema operativo che esegue il codice, ad esempio se si è in Windows, il separatore di directory può essere \o/ .
Devi essere in grado di prendere 64 file di input, anche -se è specificato. Se ne vengono forniti oltre 64, gestire solo i primi 64.
Nell'elenco dei nomi di file, -rappresenta l'input standard.
Se vengono forniti i nomi dei file, leggi i file nell'ordine in cui sono stati dati e concatena il loro contenuto, inserendo una nuova riga tra ciascuno e alla fine. Se non riesci a leggere da uno o più nomi di file (perché il file non esiste o non disponi delle autorizzazioni di lettura), ignorali. Se tutti i nomi file specificati non sono validi, non generare nulla.
Se non viene fornito alcun nome di file, leggere dall'input standard. Leggere solo dallo standard input se non viene fornito alcun nome file o se -viene fornito.
Produzione
Il programma produrrà, allo standard output, l'input con le righe numerate in questo modo (si può presumere che l'input abbia \n, \r\no \rterminazioni di riga; scegli quale è più conveniente per te, ma specifica quale):
<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 caratteri di spazio sono assegnati per il numero di riga e viene inserito alla fine di questi caratteri; il resto diventa spazio (ad es. 1avrà 5 spazi iniziali, 22avrà 4 spazi iniziali, ...). Se l'input è sufficientemente lungo, alla fine si esaurirà lo spazio per il numero di riga 999999. Non è necessario emettere nulla dopo la riga 999999.
Se l'input è vuoto, non viene prodotto nulla.
Stato di uscita
I numeri più bassi hanno la priorità: se si riscontrano errori 1 e 2, uscire con lo stato 1.
Esci con lo stato 0 se l'ingresso è stato ricevuto correttamente e le righe sono state numerate e emesse correttamente.
Esci con lo stato 1 se uno o più file specificati nella riga di comando non sono stati trovati o non è stato possibile leggere.
Esci con lo stato 2 se sono stati dati troppi file (più di 64).
Esci con lo stato 3 se l'ingresso era troppo lungo (più di 999999 righe). \
punteggio
Questo è code-golf - il programma più corto vince!
Potrei aggiungere bonus in seguito per l'implementazione di alcune opzioni che nlha. Non ci sono bonus al momento.
prompt()emulare args di programma e stdin?