Differenze tra le versioni di "Raccogliere solo alcune righe all'interno di un file di testo"

Da Gambas-it.org - Wikipedia.
 
(2 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
 
Mostreremo di seguito un possibile algoritmo per raccogliere da un file di testo solo alcune righe, individuando la prima riga da raccogliere non da un numero d'indice (ad esempio: la 20<SUP>a</sup> riga), bensì dal proprio testo.
 
Mostreremo di seguito un possibile algoritmo per raccogliere da un file di testo solo alcune righe, individuando la prima riga da raccogliere non da un numero d'indice (ad esempio: la 20<SUP>a</sup> riga), bensì dal proprio testo.
  
 +
===Uso dell'operatore "Like"===
 +
In questo caso utilizzeremo l'operatore "[https://gambaswiki.org/wiki/lang/like?l=it Like]" per filtrare le righe da raccogliere.
 +
 +
Come esempio prederemo dal file header ''/usr/include/alsa/mixer.h'' soltanto le righe che contengono almeno i caratteri "''_class'' ". Per ottenere questo risultato si userà anche l'operatore asterisco: "'''*'''_class'''*'''".
 +
'''Public''' Sub Main()
 +
 +
  Dim fl As File
 +
  Dim s As String
 +
 +
  fl = Open "/usr/include/alsa/mixer.h" For Read
 +
 +
  Repeat
 +
<FONT Color=gray>' ''Legge ogni riga del file di testo:''</font>
 +
    s = fl.ReadLine()
 +
<FONT Color=gray>' ''Raccoglie solo le righe che contengono almeno i caratteri "_class":''</font>
 +
    If s <FONT Color=#B22222>Like</font> "*_class*" Then Print s
 +
<FONT Color=gray>' ''Quando si raggiunge la fine del file di testo, si esce dal ciclo:''</font>
 +
  Until fl.EndOfFile
 +
 +
  fl.Close
 +
 +
'''End'''
  
 
===Uso dell'operatore "Begins"===
 
===Uso dell'operatore "Begins"===
 
In questo caso utilizzeremo l'operatore "[https://gambaswiki.org/wiki/lang/begins?l=it Begins]" per filtrare le righe da raccogliere.
 
In questo caso utilizzeremo l'operatore "[https://gambaswiki.org/wiki/lang/begins?l=it Begins]" per filtrare le righe da raccogliere.
  
Come esempio prederemo dal file header ''/alsa/seq_event.h'' soltanto le righe appartenenti della dichiarazione della ''Struttura'' "snd_seq_event_t", escludendo quelle che in gnerale iniziano con il carattere "#", fatta eccezione per quelle che inziano con la ''direttiva'' di C "#include".
+
Come esempio prederemo dal file header ''/usr/include/alsa/mixer.h'' soltanto le righe che iniziano con i caratteri "''typedef'' ":
 
 
Il procedimento fondamentale è l'individuazione della <SPAN Style="text-decoration:underline">prima</span> e dell'<SPAN Style="text-decoration:underline">ultima</span> riga del gruppo di righe da raccogliere. All'interno di queste due righe, iniziale e finale, si raccoglieranno o escluderanno le righe ivi esistenti:
 
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
   
 
   
 
   Dim fl As File
 
   Dim fl As File
   Dim s, t As String
+
   Dim s As String
  Dim v As Boolean
 
 
   
 
   
   fl = Open "/usr/include/alsa/seq_event.h" For Read
+
   fl = Open "/usr/include/alsa/mixer.h" For Read
 
   
 
   
  <FONT Color=gray>' ''Leggiamo il file dall'inizio fino all'ultima riga della dichiarazione della "Struttura" in questione:''</font>
+
  Repeat
  Repeat
+
  <FONT Color=gray>' ''Legge ogni riga del file di testo:''</font>
 
     s = fl.ReadLine()
 
     s = fl.ReadLine()
  <FONT Color=gray>' ''Raccoglie comunque le righe che iniziano con la direttiva "#include" di C:''</font>
+
  <FONT Color=gray>' ''Raccoglie solo le righe che cominciano con "typedef":''</font>
     If s <FONT Color=#B22222>Begins</font> "#include" Then t &= s & "\n\n"
+
     If s <FONT Color=#B22222>Begins</font> "typedef" Then Print s
    If s = "typedef struct snd_seq_event {" Then v = True
+
  <FONT Color=gray>' ''Quando si raggiunge la fine del file di testo, si esce dal ciclo:''</font>
    If s <FONT Color=#B22222>Begins</font> "#" Then Continue
+
   Until fl.EndOfFile
    If v Then t &= Chr(10) & s
 
  <FONT Color=gray>' ''Il ciclo dura sino a quando "v" non diventa vera e contemporaneamente "s" non diventa uguale a "} snd_seq_event_t;":''</font>
 
   Until (v = True) And (s = "} snd_seq_event_t;")
 
 
   
 
   
   Print t
+
   fl.Close
 +
 +
'''End'''
 +
 
 +
===Uso dell'operatore "Ends"===
 +
In questo caso utilizzeremo l'operatore "[https://gambaswiki.org/wiki/lang/ends?l=it Ends]" per filtrare le righe da raccogliere.
 +
 
 +
Come esempio prederemo dal file header ''/usr/include/alsa/mixer.h'' soltanto le righe che terminano con i caratteri "''value);'' ":
 +
  '''Public''' Sub Main()
 +
 +
  Dim fl As File
 +
  Dim s As String
 +
 +
  fl = Open "/usr/include/alsa/mixer.h" For Read
 +
 +
  Repeat
 +
<FONT Color=gray>' ''Legge ogni riga del file di testo:''</font>
 +
    s = fl.ReadLine()
 +
<FONT Color=gray>' ''Raccoglie solo le righe che terminano con "value);":''</font>
 +
    If s <FONT Color=#B22222>Ends</font> "value);" Then Print s
 +
<FONT Color=gray>' ''Quando si raggiunge la fine del file di testo, si esce dal ciclo:''</font>
 +
  Until fl.EndOfFile
 
   
 
   
 
   fl.Close
 
   fl.Close
 
   
 
   
 
  '''End'''
 
  '''End'''

Versione attuale delle 15:36, 11 set 2022

Mostreremo di seguito un possibile algoritmo per raccogliere da un file di testo solo alcune righe, individuando la prima riga da raccogliere non da un numero d'indice (ad esempio: la 20a riga), bensì dal proprio testo.

Uso dell'operatore "Like"

In questo caso utilizzeremo l'operatore "Like" per filtrare le righe da raccogliere.

Come esempio prederemo dal file header /usr/include/alsa/mixer.h soltanto le righe che contengono almeno i caratteri "_class ". Per ottenere questo risultato si userà anche l'operatore asterisco: "*_class*".

Public Sub Main()

 Dim fl As File
 Dim s As String

 fl = Open "/usr/include/alsa/mixer.h" For Read

 Repeat 
' Legge ogni riga del file di testo:
   s = fl.ReadLine()
' Raccoglie solo le righe che contengono almeno i caratteri "_class":
   If s Like "*_class*" Then Print s
' Quando si raggiunge la fine del file di testo, si esce dal ciclo:
 Until fl.EndOfFile

 fl.Close

End

Uso dell'operatore "Begins"

In questo caso utilizzeremo l'operatore "Begins" per filtrare le righe da raccogliere.

Come esempio prederemo dal file header /usr/include/alsa/mixer.h soltanto le righe che iniziano con i caratteri "typedef ":

Public Sub Main()

 Dim fl As File
 Dim s As String

 fl = Open "/usr/include/alsa/mixer.h" For Read

 Repeat 
' Legge ogni riga del file di testo:
   s = fl.ReadLine()
' Raccoglie solo le righe che cominciano con "typedef":
   If s Begins "typedef" Then Print s
' Quando si raggiunge la fine del file di testo, si esce dal ciclo:
 Until fl.EndOfFile

 fl.Close

End

Uso dell'operatore "Ends"

In questo caso utilizzeremo l'operatore "Ends" per filtrare le righe da raccogliere.

Come esempio prederemo dal file header /usr/include/alsa/mixer.h soltanto le righe che terminano con i caratteri "value); ":

 Public Sub Main()

 Dim fl As File
 Dim s As String

 fl = Open "/usr/include/alsa/mixer.h" For Read

 Repeat 
' Legge ogni riga del file di testo:
   s = fl.ReadLine()
' Raccoglie solo le righe che terminano con "value);":
   If s Ends "value);" Then Print s
' Quando si raggiunge la fine del file di testo, si esce dal ciclo:
 Until fl.EndOfFile

 fl.Close

End