Differenze tra le versioni di "Sscanf ()"

Da Gambas-it.org - Wikipedia.
(Creata pagina con "La funzione della libreria di C ''int sscanf (const char *__restrict __s, const char *__restrict __format, ...)'' legge l'input formattato da una stringa. <BR>Questa funzione...")
 
 
(2 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
 
La funzione della libreria di C
 
La funzione della libreria di C
 
  ''int sscanf (const char *__restrict __s, const char *__restrict __format, ...)''
 
  ''int sscanf (const char *__restrict __s, const char *__restrict __format, ...)''
legge l'input formattato da una stringa.
+
legge l'input formattato da una stringa fino al primo valore dello spazio (0x20) incontrato.
<BR>Questa funzione pertanto è simile alla funzione esterna ''[[Scanf()|scanf( )]]'', ma l'input avviene dal primo parametro ''__s'', ossia da un ''Puntatore'' di tipo ''char''.
+
<BR>Questa funzione pertanto è simile alla funzione esterna "[[Scanf()|scanf()]]", ma l'input avviene dal primo parametro ''__s'', ossia da un ''Puntatore'' di tipo ''char'', che in Gambas è rappresentato da un valore di tipo ''String''.
 +
<BR>Ogni sequenza ''segnaposto'', introdotta dal simbolo percentuale ("%") e presente nel secondo parametro della funzione, specifica una sequenza di caratteri fino al prossimo valore dello spazio (0x20) incontrato.
  
  
 
Volendola utilizzare in Gambas, bisognerà dichiararla con ''Extern'', nonché dichiarare la libreria di C: ''libc.so.6'', nella quale la funzione è contenuta:
 
Volendola utilizzare in Gambas, bisognerà dichiararla con ''Extern'', nonché dichiarare la libreria di C: ''libc.so.6'', nella quale la funzione è contenuta:
 
  Private <FONT color=#B22222>Extern sscanf</font>(__s As Pointer, __format As String<FONT Color=gray>, [qui altri eventuali parametri As Pointer]</font>) As Integer In "<FONT color=#B22222>libc:6</font>"
 
  Private <FONT color=#B22222>Extern sscanf</font>(__s As Pointer, __format As String<FONT Color=gray>, [qui altri eventuali parametri As Pointer]</font>) As Integer In "<FONT color=#B22222>libc:6</font>"
 
 
 
Mostriamo un esempio pratico:
 
Mostriamo un esempio pratico:
 
  Library "libc:6"
 
  Library "libc:6"
Riga 14: Riga 13:
 
  <FONT Color=gray>' ''int sscanf (const char *__restrict __s, const char *__restrict __format, ...)''
 
  <FONT Color=gray>' ''int sscanf (const char *__restrict __s, const char *__restrict __format, ...)''
 
  ' ''Read formatted input from S.''</font>
 
  ' ''Read formatted input from S.''</font>
  Private Extern sscanf(__s As Pointer, __format As String, po2 As Pointer, po3 As Pointer, po4 As Pointer, po5 As Pointer) As Integer
+
  Private Extern sscanf(__s As String, __format As String, po2 As Pointer, po3 As Pointer, po4 As Pointer, po5 As Pointer) As Integer
 
   
 
   
 
   
 
   
  '''Public''' Sub Main()
+
  Public Sub Main()
 
    
 
    
   Dim p1, p2, p3 As Pointer
+
  Dim s As String
 +
   Dim p1, p2 As Pointer
 
   Dim i As Integer
 
   Dim i As Integer
 
   Dim f As Float
 
   Dim f As Float
 
    
 
    
  p1 = Alloc("aaaa bbbb 11111 123,4567")
+
  s = "aaaa bbbb 11111 123,4567"
  p2 = Alloc(SizeOf(gb.Byte), 16)
+
  p1 = Alloc(SizeOf(gb.Byte), 16)
  p3 = Alloc(SizeOf(gb.Byte), 16)
+
  p2 = Alloc(SizeOf(gb.Byte), 16)
 
    
 
    
  <FONT color=#B22222>sscanf</font>(p1, "%s %s %d  %lf", p2, p3, VarPtr(i), VarPtr(f))
+
  <FONT color=#B22222>sscanf</font>(s, "%s %s %d  %lf", p1, p2, VarPtr(i), VarPtr(f))
 
    
 
    
  Print String@(p2), String@(p3), i, f
+
  Print String@(p1), String@(p2), i, f
 +
 
 +
  Free(p2)
 +
  Free(p1)
 
    
 
    
  Free(p3)
+
  End
  Free(p2)
 
  Free(p1)
 
 
 
  '''End'''
 
 
 
  
  
Riga 42: Riga 40:
 
=Riferimenti=
 
=Riferimenti=
 
* https://linux.die.net/man/3/sscanf
 
* https://linux.die.net/man/3/sscanf
 +
* http://www.gnu.org/software/libc/manual/html_node/Formatted-Input-Functions.html

Versione attuale delle 14:32, 16 giu 2024

La funzione della libreria di C

int sscanf (const char *__restrict __s, const char *__restrict __format, ...)

legge l'input formattato da una stringa fino al primo valore dello spazio (0x20) incontrato.
Questa funzione pertanto è simile alla funzione esterna "scanf()", ma l'input avviene dal primo parametro __s, ossia da un Puntatore di tipo char, che in Gambas è rappresentato da un valore di tipo String.
Ogni sequenza segnaposto, introdotta dal simbolo percentuale ("%") e presente nel secondo parametro della funzione, specifica una sequenza di caratteri fino al prossimo valore dello spazio (0x20) incontrato.


Volendola utilizzare in Gambas, bisognerà dichiararla con Extern, nonché dichiarare la libreria di C: libc.so.6, nella quale la funzione è contenuta:

Private Extern sscanf(__s As Pointer, __format As String, [qui altri eventuali parametri As Pointer]) As Integer In "libc:6"

Mostriamo un esempio pratico:

Library "libc:6"

' int sscanf (const char *__restrict __s, const char *__restrict __format, ...)
' Read formatted input from S.
Private Extern sscanf(__s As String, __format As String, po2 As Pointer, po3 As Pointer, po4 As Pointer, po5 As Pointer) As Integer


Public Sub Main()
 
 Dim s As String
 Dim p1, p2 As Pointer
 Dim i As Integer
 Dim f As Float
 
 s = "aaaa bbbb 11111 123,4567"
 p1 = Alloc(SizeOf(gb.Byte), 16)
 p2 = Alloc(SizeOf(gb.Byte), 16)
  
 sscanf(s, "%s %s %d  %lf", p1, p2, VarPtr(i), VarPtr(f))
  
 Print String@(p1), String@(p2), i, f
 
 Free(p2)
 Free(p1)
  
End


Riferimenti