Esercizio - Scoprire la spaziatura interna e l'allineamento

Completato

Il metodo string.Format() viene usato per eseguire la formattazione composita, ad esempio nell'esempio:

string first = "Hello";
string second = "World";
string result = string.Format("{0} {1}!", first, second);
Console.WriteLine(result);

Può sembrare un po' strano che una parola chiave che rappresenta un tipo di dati disponga di metodi che è possibile chiamare nello stesso modo in cui si chiamano i metodi sulla classe Console. In realtà ci sono molti metodi simili per il tipo di dati stringe per qualsiasi stringa letterale o variabile di tipo stringa.

Di seguito è riportato un breve elenco di categorie di questi metodi predefiniti per farsi un'idea delle possibilità.

  • Metodi che aggiungono spazi vuoti a scopo di formattazione (PadLeft(), PadRight())
  • Metodi che confrontano due stringhe o facilitano il confronto (Trim(), TrimStart(), TrimEnd(), GetHashcode(), proprietà Length)
  • Metodi che consentono di determinare gli elementi all'interno di una stringa o anche di recuperare solo una parte della stringa (Contains(), StartsWith(), EndsWith(), Substring())
  • Metodi che modificano il contenuto della stringa sostituendo, inserendo o rimuovendo parti (Replace(), Insert(), Remove())
  • Metodi che trasformano una stringa in una matrice di stringhe o caratteri (Split(), ToCharArray())

Formattazione di stringhe mediante l'aggiunta di spazi vuoti all'inizio o alla fine

Il metodo PadLeft() aggiunge spazi vuoti sul lato sinistro della stringa, in modo che il numero totale di caratteri corrisponda all'argomento inviato. In questo caso, si vuole che la lunghezza totale della stringa sia di 12 caratteri.

  1. Eliminare o usare l'operatore di commento riga // per impostare come commento tutto il codice degli esercizi precedenti.

  2. Aggiornare il codice nell'editor di Visual Studio Code come indicato di seguito:

     string input = "Pad this";
     Console.WriteLine(input.PadLeft(12));
    
  3. Nel menu File di Visual Studio Code, selezionare Salva. Salvare il file Program.cs prima di compilare o eseguire il codice.

  4. Nel pannello ESPLORA RISORSE, per aprire un terminale nel percorso della cartella TestProject, fare clic con il pulsante destro del mouse su TestProject, quindi scegliere Apri nel terminale integrato. Verrà aperto un pannello del terminale con un prompt dei comandi che indica che il terminale è aperto al percorso della cartella TestProject.

  5. Nel prompt dei comandi del terminale, digitare dotnet run per eseguire il codice, quindi premere INVIO.

    Nota

    Se viene visualizzato un messaggio riportante: “Non è stato possibile trovare un progetto da eseguire”, assicurarsi che il prompt dei comandi del terminale visualizzi il percorso previsto della cartella TestProject. Ad esempio: C:\Users\someuser\Desktop\csharpprojects\TestProject>

    Quando si esegue il codice, si osservano quattro caratteri preceduti da un prefisso a sinistra della stringa, in modo che la lunghezza sia di 12 caratteri.

     	Pad this
    
  6. Per aggiungere spazi o caratteri sul lato destro della stringa, usare invece il metodo PadRight(). 1. Aggiornare il codice nell'editor di Visual Studio Code come indicato di seguito:

     Console.WriteLine(input.PadRight(12));
    
  7. Salvare il file di codice e quindi usare Visual Studio Code per eseguire il codice. Non si noteranno caratteri aggiunti alla fine della stringa, che sono tuttavia presenti.

Che cos'è un metodo di overload?

In C# un metodo di overload è un'altra versione di un metodo con argomenti diversi o aggiuntivi che modificano leggermente la funzionalità del metodo, come nel caso della versione di overload del metodo PadLeft().

È anche possibile chiamare una seconda versione di overload del metodo e passare il carattere che si vuole usare al posto di uno spazio. In questo caso, si riempirà lo spazio aggiuntivo con il carattere trattino.

  1. Eliminare o usare l'operatore di commento riga // per impostare come commento tutto il codice del passaggio precedente.

  2. Aggiornare il codice nell'editor di Visual Studio Code come indicato di seguito:

     Console.WriteLine(input.PadLeft(12, '-'));
     Console.WriteLine(input.PadRight(12, '-'));
    
  3. Salvare il file di codice e quindi usare Visual Studio Code per eseguire il codice. Verranno visualizzati quattro trattini aggiunti a sinistra della stringa, in modo da ottenere una lunghezza di 12 caratteri.

     ----Pad this
     Pad this----
    

Questa nozione appena appresa verrà ora applicata a un altro scenario reale.

Uso di stringhe con spaziatura interna

Si supponga di lavorare per una società di elaborazione di pagamenti che supporta ancora sistemi mainframe legacy. Spesso tali sistemi richiedono l'input di dati in colonne specifiche. Archiviare ad esempio l'ID di pagamento nelle colonne da 1 a 6, il nome del beneficiario nelle colonne da 7 a 30 e l'importo del pagamento nelle colonne da 31 a 40. È inoltre importante che l'importo del pagamento sia allineato a destra.

Viene richiesto di creare un'applicazione che converte i dati del sistema di gestione di database relazionali nel formato di file legacy. Per assicurarsi che l'integrazione funzioni correttamente, il primo passaggio consiste nel verificare il formato del file fornendo ai responsabili della manutenzione del sistema legacy un esempio di output. In seguito, ci si baserà su tale lavoro per inviare centinaia o migliaia di pagamenti da elaborare tramite un file di testo ASCII.

Aggiungere l'ID di pagamento all'output

Per iniziare, stampare l'ID di pagamento nelle prime sei colonne. Verranno scelti alcuni dati di pagamento casuali che devono essere adeguati agli scopi.

  1. Eliminare o usare l'operatore di commento riga // per impostare come commento tutto il codice del passaggio precedente.

  2. Aggiornare il codice nell'editor di Visual Studio Code come indicato di seguito:

     string paymentId = "769C";
    
     var formattedLine = paymentId.PadRight(6);
    
     Console.WriteLine(formattedLine);
    

    Riutilizzare la variabile formattedLine per creare la stringa di output.

  3. Salvare il file di codice e quindi usare Visual Studio Code per eseguire il codice. Verrà visualizzato l'output seguente:

     769C	
    

A destra sono presenti due spazi vuoti, che non sono visibili. La loro esistenza verrà verificata nel passaggio successivo.

Aggiungere il nome del beneficiario all'output

Successivamente, si aggiungerà il nome di un beneficiario fittizio, aggiungendo la spaziatura interna appropriata.

  1. Aggiornare il codice nell'editor di Visual Studio Code come indicato di seguito:

     string paymentId = "769C";
     string payeeName = "Mr. Stephen Ortega";
    
     var formattedLine = paymentId.PadRight(6);
     formattedLine += payeeName.PadRight(24);
    
     Console.WriteLine(formattedLine);
    

    L'operatore += esegue una concatenazione di stringhe, accettando il valore precedente della variabile formattedLine e aggiungendovi il nuovo valore. Si tratta di un esempio di codice abbreviato equivalente al seguente:

     formattedLine = formattedLine + payeeName.PadRight(24);
    
  2. Salvare il file di codice e quindi usare Visual Studio Code per eseguire il codice. Verrà visualizzato l'output seguente:

     769C  Mr. Stephen Ortega
    

Anche in questo caso sono presenti alcuni spazi vuoti dopo il nome del beneficiario. È inoltre possibile vedere i due spazi vuoti dopo l'ID di pagamento del passaggio 1.

Aggiungere l'importo del pagamento all'output

Aggiungere quindi un importo di pagamento fittizio e assicurarsi di usare PadLeft() per allineare l'output a destra.

  1. Aggiornare il codice nell'editor di Visual Studio Code come indicato di seguito:

     string paymentId = "769C";
     string payeeName = "Mr. Stephen Ortega";
     string paymentAmount = "$5,000.00";
    
     var formattedLine = paymentId.PadRight(6);
     formattedLine += payeeName.PadRight(24);
     formattedLine += paymentAmount.PadLeft(10);
    
     Console.WriteLine(formattedLine);
    
  2. Salvare il file di codice e quindi usare Visual Studio Code per eseguire il codice. Verrà visualizzato l'output seguente:

     769C  Mr. Stephen Ortega       $5,000.00
    

L'output è piuttosto simile a quello richiesto dai responsabili della manutenzione del sistema legacy.

Aggiungere una riga di numeri sopra l'output per verificare più facilmente il risultato

Poiché è difficile contare le colonne esatte in cui viene visualizzato ogni elemento dati, si aggiungerà una riga direttamente sopra l'output che consente di contare le colonne più agevolmente.

Console.WriteLine("1234567890123456789012345678901234567890");
  1. Aggiornare il codice nell'editor di Visual Studio Code come indicato di seguito:

     string paymentId = "769C";
     string payeeName = "Mr. Stephen Ortega";
     string paymentAmount = "$5,000.00";
    
     var formattedLine = paymentId.PadRight(6);
     formattedLine += payeeName.PadRight(24);
     formattedLine += paymentAmount.PadLeft(10);
    
     Console.WriteLine("1234567890123456789012345678901234567890");
     Console.WriteLine(formattedLine);
    
  2. Salvare il file di codice e quindi usare Visual Studio Code per eseguire il codice. Viene visualizzato l'output seguente che è possibile inviare ai responsabili della manutenzione del sistema legacy per verificare che la nuova integrazione funzioni correttamente:

     1234567890123456789012345678901234567890
     769C  Mr. Stephen Ortega       $5,000.00
    

Operazione riuscita.

Riepilogo

In questa unità sono emersi alcuni importanti concetti.

  • Il tipo di dati string, le stringhe letterali e le variabili di tipo stringa implementano molti metodi helper per formattare e modificare le stringhe, nonché eseguire altre operazioni su di esse.
  • I metodi PadLeft() e PadRight() aggiungono uno spazio vuoto (o, facoltativamente, un altro carattere) alla lunghezza totale di una stringa.
  • Usare PadLeft() per allineare una stringa a destra.
  • Alcuni metodi sono di overload, ovvero hanno più versioni con argomenti diversi che influiscono sulle funzionalità.
  • L'operatore += concatena una nuova stringa a destra con la stringa esistente a sinistra.

Verificare le conoscenze

1.

Dato string myWords = "Learning C#", qual è la descrizione di output migliore per Console.WriteLine(myWords.PadLeft(12));?