Workstation online OnWorks Linux e Windows

Logo

Hosting online gratuito per workstation

<Precedenti | Contenuti | Succ.>

Convalida dell'input

Con la nostra nuova capacità di avere l'input da tastiera arriva un'ulteriore sfida di programmazione, la convalida dell'input. Molto spesso la differenza tra un programma ben scritto e uno scritto male risiede nella capacità del programma di affrontare l'imprevisto. Spesso, l'imprevisto appare sotto forma di input errato. Abbiamo fatto un po' di questo con i nostri programmi di valutazione nel capitolo precedente, dove abbiamo controllato i valori degli interi e schermato


valori vuoti e caratteri non numerici. È importante eseguire questo tipo di controlli di programmazione ogni volta che un programma riceve un input, per evitare dati non validi. Ciò è particolarmente importante per i programmi condivisi da più utenti. L'omissione di queste garanzie nell'interesse dell'economia potrebbe essere scusata se un programma deve essere utilizzato una volta e solo dall'autore per svolgere un compito speciale. Anche in questo caso, se il programma esegue attività pericolose come l'eliminazione di file, sarebbe saggio includere la convalida dei dati, per ogni evenienza.

Qui abbiamo un programma di esempio che convalida vari tipi di input:



#! / Bin / bash

# read-validate: convalida input invalid_input () {

echo "Inserimento '$REPLY' non valido" >&2 exit 1

}


read -p "Inserisci un singolo elemento > "


# input è vuoto (non valido)

[[ -z $REPLY ]] && input_non valido


# input è composto da più elementi (non valido)

(( $(echo $REPLY | wc -w) > 1 )) && input_non valido


# è stato inserito un nome file valido?

if [[ $REPLY =~ ^[-[:alnum:]\._]+$ ]]; then echo "'$REPLY' è un nome file valido."

if [[ -e $REPLY ]]; poi

echo "E il file '$REPLY' esiste."

altro

echo "Tuttavia, il file '$REPLY' non esiste."

fi


# viene inserito un numero in virgola mobile?

if [[ $REPLY =~ ^-?[[:digit:]]*\.[[:digit:]]+$ ]]; then echo "'$REPLY' è un numero in virgola mobile."

altro

echo "'$REPLY' non è un numero in virgola mobile."

fi


# l'input è un numero intero?

if [[ $REPLY =~ ^-?[[:digit:]]+$ ]]; then echo "'$REPLY' è un numero intero."

altro

echo "'$REPLY' non è un numero intero."

#! / Bin / bash

# read-validate: convalida input invalid_input () {

echo "Inserimento '$REPLY' non valido" >&2 exit 1

}


read -p "Inserisci un singolo elemento > "


# input è vuoto (non valido)

[[ -z $REPLY ]] && input_non valido


# input è composto da più elementi (non valido)

(( $(echo $REPLY | wc -w) > 1 )) && input_non valido


# è stato inserito un nome file valido?

if [[ $REPLY =~ ^[-[:alnum:]\._]+$ ]]; then echo "'$REPLY' è un nome file valido."

if [[ -e $REPLY ]]; poi

echo "E il file '$REPLY' esiste."

altro

echo "Tuttavia, il file '$REPLY' non esiste."

fi


# viene inserito un numero in virgola mobile?

if [[ $REPLY =~ ^-?[[:digit:]]*\.[[:digit:]]+$ ]]; then echo "'$REPLY' è un numero in virgola mobile."

altro

echo "'$REPLY' non è un numero in virgola mobile."

fi


# l'input è un numero intero?

if [[ $REPLY =~ ^-?[[:digit:]]+$ ]]; then echo "'$REPLY' è un numero intero."

altro

echo "'$REPLY' non è un numero intero."

Convalida dell'input


per altro

echo "La stringa '$REPLY' non è un nome file valido."

fi

per altro

echo "La stringa '$REPLY' non è un nome file valido."

fi


Questo script richiede all'utente di immettere un elemento. L'item viene successivamente analizzato per determinarne il contenuto. Come possiamo vedere, lo script fa uso di molti dei concetti che abbiamo trattato finora, incluse le funzioni di shell, [[]], (( )), l'operatore di controllo

&& e if, oltre a una buona dose di espressioni regolari.


Il miglior sistema operativo cloud computing su OnWorks: