Gambas-it

Gambas3 => Programmazione => Topic aperto da: Gianluigi - 22 Dicembre 2016, 15:37:31

Titolo: Funzione Scan
Inserito da: Gianluigi - 22 Dicembre 2016, 15:37:31
A proposito della funzione Scan se andate sulla guida in linea attualmente trovate questo esempio:
Codice: [Seleziona]
Dim sRisultato As String
Dim sLinea As String
Dim sElt As String

Exec "df" To sResult

For Each sLinea In Split(sRisultato, "\n")
  For Each sElt In Scan(sLinea, "* * * * *")
    Print sElt; "|";
  Next
  Print
Next

che contiene due errori.
Chi li trova per primo vince un chilo di fieno per capre appenniniche.

 :ciao: :ciao:
Titolo: Re:Funzione Scan
Inserito da: vuott - 22 Dicembre 2016, 16:29:02
contiene due errori.
E' vero.
Il secondo è davvero grave.   :-X

Lascio ai nuovi membri del forum la soluzione.
Titolo: Re:Funzione Scan
Inserito da: Gianluigi - 22 Dicembre 2016, 16:40:15
Invero se andiamo a guardare meglio gli errori sono tre  ;)

 :bad:
Titolo: Re:Funzione Scan
Inserito da: kicco - 22 Dicembre 2016, 18:35:05
 :ciao:
Codice: [Seleziona]
Exec ["df"] To sRisultato
Questo è uno?
Poi quel PRINT per andare a capo... :-\
Titolo: Re:Funzione Scan
Inserito da: kicco - 22 Dicembre 2016, 18:58:58
...ma nell'esempio su gambaswiki.org non ci sono errori! :-\
Da dove hai preso l'esempio?
Titolo: Re:Funzione Scan
Inserito da: kicco - 22 Dicembre 2016, 19:12:31
Ho capito hai preso l'esempio in italiano che è "cannato", switch(ia) in inglese e .... :P
 :ciao:
Titolo: Re:Funzione Scan
Inserito da: Gianluigi - 22 Dicembre 2016, 19:17:45
 :P È inutile che fai il furbo per deviare l'attenzione, noi siamo italiani e se diamo un F2 sulla parola chiave otteniamo quell'esempio riportato a inizio Topic.
Tu hai scoperto l'errore più grave ma ce ne sono altri due, se non li scovi niente biada e a letto senza cena  :rotfl:

E comunque un errore c'è pure nell'esempio inglese  :P
 :D :ciao:

Titolo: Re:Funzione Scan
Inserito da: Gianluigi - 22 Dicembre 2016, 19:30:10
Noto una cosa: Ti sei accorto del grave errore su Exec perché lo hai raffrontato con quello in inglese, ma non puoi farlo andare e vedere cosa ti dice Gambas?
Due li indica per il terzo occorre essere Guru Guru e Occhi di Lince  ;D
Titolo: Re:Funzione Scan
Inserito da: kicco - 22 Dicembre 2016, 19:59:02
Citazione
Ti sei accorto del grave errore su Exec perché lo hai raffrontato con quello in inglese
No! Come puoi notare prima ho trovato l'errore, e l'ho fatto solo controllando la sintassi di EXEC.
Poi mi sono accorto dell'errore nella versione italiana approfondendo la questione (e qua ci sarebbe già un punto in più per la buona volontà!).
più un punto per l'errore grave (il mio primo punto  :P :P :P :P) e non me lo porta via nessuno...
Citazione
Tu hai scoperto l'errore più grave ma ce ne sono altri due, se non li scovi niente biada e a letto senza cena
Intanto apro una bella bottiglia per brindare!!! ;D ;D ;D :2birre: :2birre:
Citazione
noi siamo italiani
io sono italiano professionista...

..ma il codice gira correttamente, gli altri sono solo errori formali?
Titolo: Re:Funzione Scan
Inserito da: kicco - 22 Dicembre 2016, 20:04:28
Codice: [Seleziona]
 For Each sElt In Scan(sLine, "* * * * * *")
mancava un asterisco... :D
E anche qui un punticino?? :P
...
Titolo: Re:Funzione Scan
Inserito da: Gianluigi - 22 Dicembre 2016, 20:12:39
Codice: [Seleziona]
 For Each sElt In Scan(sLine, "* * * * * *")
mancava un asterisco... :D
E anche qui un punticino?? :P
...

 :ok: :ok: :ok:

Per un po la biada non mancherà  ;D

Hai vinto, l'altro era un refuso, era rimasta la variabile in inglese sResult nella frase Exec.
Se l'esempio lo si scrive così, si capisce meglio:
Codice: [Seleziona]
Public Sub Main()

  Dim sRisultato As String
  Dim sLinea As String
  Dim sElt As String
  Dim b As Byte
 
  Exec ["df"] To sRisultato
 
  For Each sLinea In Split(sRisultato, "\n")
    Print "-----------------------------------------------------------------------------------------------------"
    For Each sElt In Scan(sLinea, "* * * * * *")
      b = (16 - Len(sElt))
      Print sElt; Space(b); "|";     
    Next
    Print   
  Next

End

 :D  :ciao: :ciao:
Titolo: Re:Funzione Scan
Inserito da: kicco - 22 Dicembre 2016, 20:19:36
Citazione
così, si capisce meglio:
direi proprio di sì :)
Titolo: Re:Funzione Scan
Inserito da: Gianluigi - 22 Dicembre 2016, 20:34:33
Citazione
così, si capisce meglio:
direi proprio di sì :)

Però Fyle | System che scivola di un posto sballa tutto comunque altrimenti potevano andare anche 5 asterischi.
Insomma Scan funziona un po così così

 :ciao:
Titolo: Re:Funzione Scan
Inserito da: vuott - 22 Dicembre 2016, 20:40:38
Poi quel PRINT per andare a capo...
Perché sarebbe un errore ?
Titolo: Re:Funzione Scan
Inserito da: kicco - 22 Dicembre 2016, 20:45:22
Citazione
Perché sarebbe un errore ?
non un errore, è usato per andare a capo, stavo cercando qualcosa di più "elegante", Print in effetti funziona! :)
Titolo: Re:Funzione Scan
Inserito da: vuott - 22 Dicembre 2016, 20:47:40
Insomma Scan funziona un po così così
In che senso ?   ???
Titolo: Re:Funzione Scan
Inserito da: Gianluigi - 22 Dicembre 2016, 20:52:31
Insomma Scan funziona un po così così
In che senso ?   ???

I titoli di colonna non rispettano le colonne dei dati sottostanti, lo vedi molto chiaramente nel mio codice ultimo.
 :ciao:
Titolo: Re:Funzione Scan
Inserito da: Gianluigi - 22 Dicembre 2016, 21:20:56
Si può rimediare così:
Codice: [Seleziona]
Public Sub Main()

  Dim sRisultato As String
  Dim sLinea As String
  Dim sElt As String
  Dim b As Byte
  Dim ss As String[]
  Dim i As Integer
 
  Exec ["df"] To sRisultato
  ss = Split(sRisultato, "\n")
  Print "File system     |"; "1k-blocchi      |"; "Usati           |"; "Disponibili     |"; "Uso%            |"; "Montato su      |"
  For i = 1 To ss.Max
    sLinea = ss[i]
    Print "-----------------------------------------------------------------------------------------------------"
    For Each sElt In Scan(sLinea, "* * * * * *")
      b = (16 - Len(sElt))
      Print sElt; Space(b); "|";     
    Next
    Print
  Next
 
End

 :ciao:
Titolo: Re:Funzione Scan
Inserito da: vuott - 22 Dicembre 2016, 23:04:50
Sì, ma non capisco cosa c'entri Scan( ).    ???
Titolo: Re:Funzione Scan
Inserito da: Gianluigi - 23 Dicembre 2016, 00:52:31
Sì, ma non capisco cosa c'entri Scan( ).    ???

Hai ragione così come ho scritto sembra una critica alla funzione, invece la mia è una critica all'esempio che, errori a parte, non mi sembra calzante.
Titolo: Re:Funzione Scan
Inserito da: kicco - 23 Dicembre 2016, 10:06:40
... allora quanti punti  mi date? :P
Titolo: Re:Funzione Scan
Inserito da: Gianluigi - 23 Dicembre 2016, 16:27:06
... allora quanti punti  mi date? :P

 ;D Non saprei, dipende da quanto è profondo e largo il taglio  ;D

 :P :P :P
Titolo: Re:Funzione Scan
Inserito da: vuott - 23 Dicembre 2016, 16:48:21
Non saprei, dipende da quanto è profondo e largo il taglio  ;D
Oh... 'sti Genovesi so' tremendi !    :rotfl:
Titolo: Re:Funzione Scan
Inserito da: kicco - 23 Dicembre 2016, 20:32:06
Citazione
;D Non saprei, dipende da quanto è profondo e largo il taglio  ;D
... e molla 'sti punti!!!
Citazione
Oh... 'sti Genovesi so' tremendi !    :rotfl:
appunto!!
 :P