Differenze tra le versioni di "Estrarre il valore di una costante definita in un file d'intestazione in C"

Da Gambas-it.org - Wikipedia.
(Creata pagina con 'Per estrarre il valore di una costante eventualmente presente in un file d'intestazione (''.h''), evitando così di dichiarane una identica anche nel codice Gambas, si potrà ...')
 
Riga 1: Riga 1:
Per estrarre il valore di una costante eventualmente presente in un file d'intestazione (''.h''), evitando così di dichiarane una identica anche nel codice Gambas, si potrà utilizzare la seguente funzione:
+
Per estrarre il valore di una Costante eventualmente presente in un file d'intestazione (''header file''), e definita con la parola ''#define'' o ''Const'', oppure il valore esplicitamente assegnato ad un elemento di una''Enumerazione'', evitando così di dichiarane una identica anche nel codice Gambas, si potranno utilizzare un paio di codici esemplificativi.
<FONT color=gray>' ''I due parametri di tipo stringa della funzione rappresentano rispettivamente:
+
 
' - "fileh" = il percorso del file d'intestazione scritto in C;
+
 
' - "costante" = il preprocessore "#define" seguito dal nome identificativo della costante di cui si intende estrarre il valore definito.''</font>
+
===1° esempio===
 +
In questo esempio i due parametri di tipo stringa della funzione rappresentano rispettivamente:
 +
- "fileh" = il percorso del file d'intestazione scritto in C;
 +
<BR>- "costante" = il preprocessore "#define" seguito dal nome identificativo della costante di cui si intende estrarre il valore definito.
 
  '''Private''' Function RicavaCostante(fileh As String, costante As String) As String
 
  '''Private''' Function RicavaCostante(fileh As String, costante As String) As String
 
    
 
    
Riga 26: Riga 29:
 
     Return s
 
     Return s
 
    
 
    
 +
'''End'''
 +
 +
 +
===2° esempio===
 +
In quest'altro esempio si intende cercare il valore della costante ''M_PI'' dichiarata ed istanziata nel file d'intestazione "''math.h''":
 +
'''Public''' Sub Main()
 +
 
 +
  Dim percorso_file, obiettivo, ris As String
 +
 
 +
  percorso_file = "/usr/include/math.h"
 +
  If Not Exist(percorso_file) Then Error.Raise("Percorso o file Errato !")
 +
   
 +
  obiettivo = "# define M_PI"
 +
   
 +
  ris = Estrai_valore(percorso_file, obiettivo)
 +
   
 +
  Print ris
 +
 
 +
'''End'''
 +
 +
 +
'''Private''' Function Estrai_valore(percorso As String, ob As String) As String
 +
 
 +
  Dim s As String
 +
 
 +
  s = File.Load(percorso)
 +
  If InStr(s, ob) = 0 Then Error.Raise("Definizione '" & ob & "' inesistente in: " & percorso)
 +
 
 +
  s = Scan(s, "*" & ob & "*\n*")[1]
 +
   
 +
  If InStr(s, "/") > 0 Then
 +
    s = Scan(s, "*/*")[0]
 +
  Endif
 +
  s = Trim(s)
 +
  If Right(s, 1) = "," Then s = Left(s, Len(s) - 1)
 +
   
 +
  Return s
 +
     
 
  '''End'''
 
  '''End'''

Versione delle 10:07, 11 ago 2016

Per estrarre il valore di una Costante eventualmente presente in un file d'intestazione (header file), e definita con la parola #define o Const, oppure il valore esplicitamente assegnato ad un elemento di unaEnumerazione, evitando così di dichiarane una identica anche nel codice Gambas, si potranno utilizzare un paio di codici esemplificativi.


1° esempio

In questo esempio i due parametri di tipo stringa della funzione rappresentano rispettivamente: - "fileh" = il percorso del file d'intestazione scritto in C;
- "costante" = il preprocessore "#define" seguito dal nome identificativo della costante di cui si intende estrarre il valore definito.

Private Function RicavaCostante(fileh As String, costante As String) As String
 
 Dim fl As File
 Dim s As String

   fl = Open fileh
   
   While True
     s = fl.ReadLine()
     If s Begins costante Then
       s = Replace$(s, costante, Null)
' Elimina un eventuale commento alla destra del valore della costante:
       If s Like "*/*" Then s = Trim(Left(s, InStr(s, "/") - 1))
' Adatta un eventuale valore esadecimale per una sua corretta gestione nel codice Gambas:
       If s Begins "0x" Then s = Trim(Replace(s, "0x", "00"))
       Break
     Endif
   Wend
   
   fl.Close()
   
   Return s
 
End


2° esempio

In quest'altro esempio si intende cercare il valore della costante M_PI dichiarata ed istanziata nel file d'intestazione "math.h":

Public Sub Main()
 
 Dim percorso_file, obiettivo, ris As String
  
  percorso_file = "/usr/include/math.h"
  If Not Exist(percorso_file) Then Error.Raise("Percorso o file Errato !")
   
  obiettivo = "# define M_PI"
   
  ris = Estrai_valore(percorso_file, obiettivo)
   
  Print ris
  
End


Private Function Estrai_valore(percorso As String, ob As String) As String
 
 Dim s As String
  
  s = File.Load(percorso)
  If InStr(s, ob) = 0 Then Error.Raise("Definizione '" & ob & "' inesistente in: " & percorso)
  
  s = Scan(s, "*" & ob & "*\n*")[1]
   
  If InStr(s, "/") > 0 Then
    s = Scan(s, "*/*")[0]
  Endif
  s = Trim(s)
  If Right(s, 1) = "," Then s = Left(s, Len(s) - 1)
   
  Return s
     
End