Non visualizzare i caratteri non-stampabili di una stringa che inizia con caratteri stampabili

Da Gambas-it.org - Wikipedia.

Se una stringa ha inizio con uno o più caratteri stampabili seguiti da uno o più caratteri non-stampabili, il primo dei quali sia lo zero (0x00), per far visualizzare i soli caratteri stampabili (ossia quelli iniziali della stringa), si potranno adottare almeno due modalità. [nota 1]


Ciclo sui dati di un vettore di tipo Byte[ ]

Con questa modalità si effettuerà un ciclo di verifica sul valore di ogni elemento di un vettore di tipo "Byte[ ]", nel quale sia stato caricata la stringa originaria. Non appena viene incontrato il byte di valore zero (&00), si eliminerà dal vettore quel byte fino alla fine, lasciando così solo i primi byte utili contenenti i valori ascii dei caratteri stampabili.

Mostriamo un semplice esempio, il quale presuppone che la stringa da mostrare abbia certamente uno o più caratteri non-stampabili dopo quelli iniziali stampabili:

Public Sub Main()

  Dim s As String
  Dim bb As Byte[]
  Dim b As Byte
 
' Ecco l'intera stringa originaria: i caratteri non-stampabili sono evidenziati in rosso:
  s = "Testo iniziale\x00\x10\x12\x90\x91"
  
  bb = Byte[].FromString(s)
  
' Si procede ad eliminare dalla stringa originaria i caratteri "non-stampabili":
  While bb[b] > 0
    Inc b
  Wend

  bb.Remove(b, bb.Max - b)
   
' Il risultato mostra, dunque, "solo" i primi caratteri - quelli "stampabili" - della stringa originaria:
  Print bb.ToString(0, bb.Count)

End


Uso di un Puntatore alla variabile di tipo Stringa

In questa modalità si utilizzerà un Puntatore alla variabile di tipo stringa contenente l'insieme di quei caratteri.

Mostriamo un semplice esempio:

Public Sub Main()

  Dim s As String
  Dim p As Pointer
 
' Ecco l'intera stringa originaria: i caratteri non-stampabili sono evidenziati in rosso:
  s = "Testo iniziale\x00\x10\x12\x90\x91"

' Viene visualizzata la stringa con i caratteri non-stampabili:
  Print s

' Creiamo un "Puntatore" alla variabile di tipo Stringa:
  p = Alloc(s)
 
' Dereferenziamo il "Puntatore". Il risultato mostra "solo" i primi caratteri - quelli "stampabili" - della stringa originaria:
  Print String@(p)

  Free(p)

End


Note

[1] Vedere anche le seguenti pagine: