Gambas-it

Archivi (sola lettura) => Programmazione (Gambas 2) => Topic aperto da: - 04 Maggio 2008, 20:19:41

Titolo: Interpretare i risultati della shell
Inserito da: - 04 Maggio 2008, 20:19:41
Ciao

Facendo per esempio

SHELL "df -h" FOR READ AS "df"

e

df_read
.......
LINE INPUT #LAST linea

mi trovo con un risultato simile :

/dev/hdb2              37G   36G  1.2G  97% /mnt/hdb2

ADESSO :

io ho nesessità di andare a separare la riga in vari pezzi (il device, lo spazio impegnato ecc ecc) e mi metterei a farlo tramite instr(), rinst(), replace(), left() ecc ecc

Questo è il metodo da me utilizzato finora , ma già per separare in 4-5 pezzi è molto difficoltoso , figuriamoci a crescere ....

Altri metodi consigliabili ???
Titolo: Re: Interpretare i risultati della shell
Inserito da: fsurfing - 04 Maggio 2008, 20:44:50
prova così:

Codice: [Seleziona]



DIM ares AS String
DIM sres AS String
DIM a_sres AS String[]
DIM nome AS NEW String[]
  DIM dimensione AS NEW String[]
  DIM usato AS NEW String[]
  DIM disponibile AS NEW String[]
  DIM uso AS NEW String[]
  DIM montato AS NEW String[]
  DIM i AS Integer
  DIM stemp AS String[]
 
        EXEC ["df", "-h"] TO sres

a_sres = Split(sres, "\n", "\t", TRUE) ' in questo modo pongo ogni riga come elemento di un array
a_sres.Remove(0) ' elimino la prima riga con i titoli


FOR i = 0 TO a_sres.Count - 1
   
    stemp = Split(a_sres[i], " ", "\n", TRUE)
    nome.add(stemp[0], i)
    dimensione.Add(stemp[1], i)
    usato.Add(stemp[2], i)
    disponibile.Add(stemp[3], i)
    uso.Add(stemp[4], i)
    montato.Add(stemp[5], i)
  NEXT
   


in questo modo avrai un array per ogni colonna del risultato di df che potrai usare semplicemente per ogni utilizzo
Titolo: Re: Interpretare i risultati della shell
Inserito da: fsurfing - 04 Maggio 2008, 21:45:14
ti posto un programmino che visualizza il file system utilizzando il metodo che ti ho indicato prima. ciao ciao
Titolo: Re: Interpretare i risultati della shell
Inserito da: - 06 Maggio 2008, 22:42:31
:-o

Effetti speciali sconvolgenti !!!

Non pensavo che con così poche righe di codice si potessero fare cose così fiche come il progettino che hai allegato. Me gusta mucho !

Immaginavo che i risultati potessero esser gestiti in maniera migliore di come facevo io ( era un mal di testa ogli volta ... ) , e lo facevo spesso =P

Sei il mio mentore fsurfing :-) , veramente mi hai semplificato la vita un sacco di volte oramai !

Ciao Grazie !
Titolo: Re: Interpretare i risultati della shell
Inserito da: fsurfing - 06 Maggio 2008, 23:07:15
sempre a tua disposizione!!!!! :2birre:

a volte è incredibile cosa si riesce a fare con poche cose!

grazie per i complimenti :ehm:
Titolo: Re: Interpretare i risultati della shell
Inserito da: - 18 Maggio 2008, 20:40:37
Non volevo aprire un altra discussione, visto che l'argomento e simile :

Vorrei eseguire in shell un comando e verificare con una progressbar quanto manca alla fine e il punto raggiunto .... avete idea di come si possa procedere ? Non sò proprio da dove partire ... se magari esiste un comando unix che magari mi aiuta ... Esisterebbe TIME .. per fare una stima iniziale e usarla poi ma ritengo verrebbe fuori una ciofeca ( se per caso sto usando il pc per qualcos'altro, se copio file da una chiavetta piuttosto che dall'HDD) ...
Titolo: Re: Interpretare i risultati della shell
Inserito da: giulio - 19 Maggio 2008, 09:58:53
Ciao. Se il comando che esegui nella shell ha qualche output (tipo oggenc o lame quando converti un file audio) è possibile intercettare alcuni messaggi e di conseguenza modificare
la progressbar. Se il comando non dà output mi pare un po' difficile prevederne il tempo di esecuzione. Insomma dipende dal comando che devi eseguire. Prova a postarlo qui e vediamo se salta fuori un'idea. Ciao.
Titolo: Re: Interpretare i risultati della shell
Inserito da: - 19 Maggio 2008, 19:25:12
Già infatti come immaginavo ...
Nel caso mi desse già un output riuscivo, con un pò di impegno, ad intercettarlo ....
Ho bisogno di farlo con cp, mv .... siccome i filemanager quelli fichi lo fanno pensavo ci fosse un barbatrucco.....
Titolo: Re: Interpretare i risultati della shell
Inserito da: fsurfing - 19 Maggio 2008, 19:37:19
con cp e mv il tempo dipende dal tipo di processore , hd  ecc ecc

potresti prima di effettuare la copia o il movimento del file interessato effettuare una copia o uno spostamento di un file tuo diciamo "campione di dimensione definita, misuri quindi il tempo impiegato e di conseguenza fai una stima in base alla dimensione del file che devi effettivamente spostare. oppure se si tratta di una cartella basi la progressione in base al numero di file.

non sarà il massimo...
Titolo: Re: Interpretare i risultati della shell
Inserito da: giulio - 19 Maggio 2008, 19:47:14
Secondo me il barbatrucco è che i file manager tipo konqueror ogni tot secondi controllano la dimensione del file nella cartella di destinazione e quindi sanno qual è la percentuale già copiata.
Quindi ti basterà verificare ogni tanto con un timer la dimensione del file "finale" e fare le dovute operazioni con la dimensione del  file di origine.
Comunque il discorso vale per file molto grossi.
ciao.
Titolo: Re: Interpretare i risultati della shell
Inserito da: - 19 Maggio 2008, 21:04:25
Già già non ci avevo pensato ..... sei diabolico giulio ... ci proverò sicuramente !!!
Titolo: Re: Interpretare i risultati della shell
Inserito da: - 06 Luglio 2008, 19:55:25
Problemuccino piccolo piccolo (spero) .....

In un textbox eseguo un comando SHELL, e fin qui nessun problema.

Ho bisogno però di fare un "cd directory" per posizionarmi nella directory corretta prima di eseguire il comando ..... come caspita si può fare ? :uhm:

PS : il barbatrucco era proprio quello !!! funziona
Titolo: Re: Interpretare i risultati della shell
Inserito da: giulio - 07 Luglio 2008, 12:47:19
Per esempio per eseguire il comando "ls"
dentro la directory "/usr/bin":


SHELL "cd /usr/bin/; ls" WAIT


Ciao

P.S. ehi gnulinuxiani, lo so che è uguale a "ls /usr/bin" ;-)
ma è per spiegare come cambiare directory ed eseguire un comando
in un'unica chiamata SHELL. ;-)
Titolo: Re: Interpretare i risultati della shell
Inserito da: - 07 Luglio 2008, 20:05:14
:cappello:

Non ci sarei mai arrivato .....
Titolo: Re: Interpretare i risultati della shell
Inserito da: - 21 Luglio 2008, 17:09:23
Cancellato....
Titolo: Re: Interpretare i risultati della shell
Inserito da: 9bit - 05 Agosto 2012, 20:28:31
prova così:

Codice: [Seleziona]


DIM ares AS String
DIM sres AS String
DIM a_sres AS String[]
DIM nome AS NEW String[]
  DIM dimensione AS NEW String[]
  DIM usato AS NEW String[]
  DIM disponibile AS NEW String[]
  DIM uso AS NEW String[]
  DIM montato AS NEW String[]
  DIM i AS Integer
  DIM stemp AS String[]
  
        EXEC ["df", "-h"] TO sres

a_sres = Split(sres, "\n", "\t", TRUE) ' in questo modo pongo ogni riga come elemento di un array
a_sres.Remove(0) ' elimino la prima riga con i titoli


FOR i = 0 TO a_sres.Count - 1
    
    stemp = Split(a_sres[i], " ", "\n", TRUE)
    nome.add(stemp[0], i)
    dimensione.Add(stemp[1], i)
    usato.Add(stemp[2], i)
    disponibile.Add(stemp[3], i)
    uso.Add(stemp[4], i)
    montato.Add(stemp[5], i)
  NEXT
    

in questo modo avrai un array per ogni colonna del risultato di df che potrai usare semplicemente per ogni utilizzo
Riapro questo topic che lo trovo interessante.  ;)
Con il codice postato da fsurfing ho fatto delle prove per avere un qualsiasi risultato dalla shell
in una textbox con questo codice:
Codice: [Seleziona]
textbox1.Text = (nome[i] & "  " & "dimensione: " & dimensione[i] & "  " & "usato: " & usato[i] & "  " & uso[i] & "  " & "disponibile: " & disponibile[i] & "  " & "montato su: " & montato[i])
il problema e che mi visualizza solo l'ultima stringa, come faccio a visualizzarle tutte?  :hard:
grazie
Titolo: Re: Interpretare i risultati della shell
Inserito da: fsurfing - 05 Agosto 2012, 21:51:34
be in un atext box non puoi certo pretendere di visualizzare più di una riga....

dovrai usare qualcosa di più adatto , tipo una tableview, dipende da che devi farne dei risultati
Titolo: Re: Interpretare i risultati della shell
Inserito da: 9bit - 05 Agosto 2012, 23:31:35
è vero!!!  :-[
ho risolto inserendo tutto in una tableview
Grazie
Titolo: Re: Interpretare i risultati della shell
Inserito da: vuott - 06 Agosto 2012, 00:02:10
Oltre all'ottimo suggerimento di fsurfing, che ti consente un risultato  molto elegante, puoi comunque conservare anche quell'istruzione precedentemente da te ipotizzata, però integrandola con un'altra che ti conservi le righe precedenti, e magari sostituendo TextBox con TextEdit ed aggiungendo alla fine "\n" per andare a capo ad ogni fine riga:
Codice: gambas [Seleziona]

  TextEdit1.Text = TextEdit1.text & nome[i] & "  " & "dimensione: " & dimensione[i] & "  " & "usato: " & usato[i] & "  " & uso[i] & "  " & "disponibile: " & disponibile[i] & "  " & "montato su: " & montato[i] & "\n"

   :-[
Titolo: Re: Interpretare i risultati della shell
Inserito da: 9bit - 07 Agosto 2012, 19:08:07
Oltre all'ottimo suggerimento di fsurfing, che ti consente un risultato  molto elegante, puoi comunque conservare anche quell'istruzione precedentemente da te ipotizzata, però integrandola con un'altra che ti conservi le righe precedenti, e magari sostituendo TextBox con TextEdit ed aggiungendo alla fine "\n" per andare a capo ad ogni fine riga:
Codice: gambas [Seleziona]

  TextEdit1.Text = TextEdit1.text & nome[i] & "  " & "dimensione: " & dimensione[i] & "  " & "usato: " & usato[i] & "  " & uso[i] & "  " & "disponibile: " & disponibile[i] & "  " & "montato su: " & montato[i] & "\n"

   :-[
Interessante, poi lo provo  :ok: