Autore Topic: Domande varie  (Letto 2125 volte)

Offline Lux

  • Maestro Gambero
  • ****
  • Post: 416
    • Mostra profilo
Domande varie
« il: 17 Febbraio 2008, 15:50:19 »
Allora ecco un po' di domande a cui non mi so dare risposta(causa ovvia:ignoranza!)
1)vorrei poter visualizzare in una textbox le dimensioni(espresse in gb) di una      
  cartella, ho provato col comando du ma nel textbox mi da degli errori, il test è
  stato eseguito digitando du -ksh(per visualizzare la dimensione della mi home)
  (mi dava una sorta di "permesso negato" quindi ipotizzo che dovrei accedere da
  root, ma non mi va.
2)dovrei disegnare un grafico a torta ma non ho trovato tutorial in giro, mi date
  una mano?
3)ho visto che gambas da la possibilità di creare pacchetti per debian, ubuntu ecc..
  ma non ne ho capito il funzionamento, me lo spoiegate? Lo scopo è quello di cerare
  una applicazione scritta in gambas e poi creare un pacchetto d'installazione(ad
  esempio .deb) e far installare l'applicazione su altri pc.
Per ora ho finito.. Ovviamente grazie mille a tutti voi per l'aiuto che mi state dando..
Ciao.

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Domande varie
« Risposta #1 il: 17 Febbraio 2008, 19:55:00 »
Non mi è ben chiara la cosa...
Come invii il comando "du ecc..." al sistema ?
Per quanto riguarda i permessi negati è strano, a meno che tu non lo faccia su cartelle di cui non hai accesso; la tua home dovrebbe darti sicuramente accesso!
Non è che per caso lavori come root nella tua dir ?

Per i grafici di quel tipo mi dispiace, non ci ho ancora messo mano; se avrò qualcosa da farti vedere sicuramente lo posto. :-(

Riguardo i pacchetti, in che senso non lo hai capito come funziona ?
Compili e crei l'eseguibile, poi se vuoi crei il pacchetto.
Per la creazione si appoggia a funzionalità dipendenti dalla distribuzione che usi, e che devono essere state installate (per Fedora o RedHat si usa il formato RPM); poi, a seconda sempre del tipo di pacchettizzazione, ti mette il file (o i files) in un'apposita cartella (es. per Fedora la dir è $HOME/RPM/.

Offline andy60

  • Senatore Gambero
  • ******
  • Post: 1.255
    • Mostra profilo
    • https://www.linkedin.com/in/andbertini
Re: Domande varie
« Risposta #2 il: 17 Febbraio 2008, 23:42:17 »
Per i grafici servirebbe una bella classe ma finora nessuna l'ha postata / realizzata. A titolo di esempio ho scritto del codice per creare un'istogramma a tre barre verticali che ti allego il codice.

L'evento click del bottone che traccia il grafico:

Codice: [Seleziona]
PUBLIC SUB Button1_Click()
  value = NEW Float[]
  total = 3
  value.Resize(total + 1)
  value[1] = Val(textbox1.Text)
  value[2] = Val(textbox2.Text)
  value[3] = Val(textbox3.Text)
  TracciaGrafico
END


e la routine TracciaGrafico:

Codice: [Seleziona]
PUBLIC SUB TracciaGrafico()  
  DIM i AS Integer
  DIM skala_1 AS Integer
  DIM skala_2 AS Integer
  DIM distance_x AS Float
  DIM distance_y AS Float
  DIM width_draw AS Integer
  DIM tot AS Integer
  DIM colors AS Integer[]
  DIM bottom AS Integer
  DIM sumdata AS Integer
  colors = NEW Integer[]
  colors.Resize(total + 1)
  FOR i = 1 TO total
    sumdata = sumdata + value[i]
  NEXT
  IF sumdata = 0 THEN sumdata = 1
  FOR i = 1 TO total
    value[i] = (value[i] / sumdata) * 10
  NEXT
  drwchart.Clear
  draw.Begin(drwchart)
  skala_1 = drwchart.ClientH / 11
  distance_y = drwchart.ClientH - skala_1
  bottom = distance_y + 8
  FOR i = 0 TO 100 STEP 10
    draw.ForeColor = Color.Black
    draw.Text(i, 2, distance_y)
    draw.Line(25, distance_y + 8, drwchart.clientw, distance_y + 8)
    distance_y = distance_y - skala_1
  NEXT
  draw.Line(30, 0, 30, drwchart.ClientH)
  skala_2 = (drwchart.ClientW - 30) \ 3
  distance_x = skala_2 + 30
  width_draw = skala_2 / 2
  FOR i = 1 TO Total
       draw.LineWidth = 1
       draw.ForeColor = Color.Black
       'draw.Text(i, distance_x - (width_draw / 2) - 4, drwchart.ClientH - 20)
       IF i = 1 THEN draw.Text("P", distance_x - (width_draw / 2) - 4, 2)
       IF i = 2 THEN draw.Text("G", distance_x - (width_draw / 2) - 4, 2)
       IF i = 3 THEN draw.Text("C", distance_x - (width_draw / 2) - 4, 2)
       draw.Line(distance_x - (width_draw / 2), 0, distance_x - (width_draw / 2), drwchart.ClientH - skala_1 + 8)
       draw.LineWidth = width_draw
       draw.ForeColor = color.RGB(i * 100, i * 10, i * 50)
       colors[i] = draw.ForeColor
       tot = skala_1 * value[i] + skala_1 - 8
       draw.Line(distance_x - (width_draw / 2), bottom, distance_x - (width_draw / 2), drwchart.ClientH - tot)
       distance_x = distance_x + skala_2
  NEXT
  DRAW.End  
END

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Domande varie
« Risposta #3 il: 18 Febbraio 2008, 17:15:14 »
Bè, a questo punto prova a trasformare il codice in classe e parametrizza il tutto. In questo modo hai già messo le basi per una parte...

Offline Lux

  • Maestro Gambero
  • ****
  • Post: 416
    • Mostra profilo
Re: Domande varie
« Risposta #4 il: 18 Febbraio 2008, 18:28:08 »
Per quanto riguarda la dimensione delle cratelle io ho inserito questo codice :
TextBox1.text = Shell "du -ksh"
cosi pensavo di poter visualizzare in un textbox la dimensione della mia home ma mi da l'errore di cui sopra..
Per il grafico, ci do un'occhiata ma le mie conoscenze sono ancora limitate..
in visual basic riuscivo a farlo con meno codice, comunque ci do uno sguardo e grazie mille!

Offline giulio

  • Maestro Gambero
  • ****
  • Post: 280
    • Mostra profilo
Re: Domande varie
« Risposta #5 il: 18 Febbraio 2008, 19:22:41 »
Per ottenere l'output di "du" devi fare così:

Dim sShellOutput AS String

SHELL "du -ksh " & user.home TO sShellOutput  
PRINT sShellOutput


occhio che du impiega un po' prima di restituire il risultato.
Nel comando che ho scritto calcola lo spazio occupato nella Home
dell'utente che lancia l'applicazione.

Offline Lux

  • Maestro Gambero
  • ****
  • Post: 416
    • Mostra profilo
Re: Domande varie
« Risposta #6 il: 19 Febbraio 2008, 17:38:10 »
Citazione
Per ottenere l'output di "du" devi fare così:

Dim sShellOutput AS String

SHELL "du -ksh " & user.home TO sShellOutput
PRINT sShellOutput


occhio che du impiega un po' prima di restituire il risultato.
Nel comando che ho scritto calcola lo spazio occupato nella Home
dell'utente che lancia l'applicazione.

Ok ha funzionato, grazie mille però avrei ancora una domanda, ora oltre alla dimensione della home mi da anche il suo indirizzo(mi scrive: 9.8G /home/luigi)
tutto mi viene rappresentato all'interno di una textbox, ora volendo visualizzare solo il valore numerico come posso fare?
Grazie mille...

Offline giulio

  • Maestro Gambero
  • ****
  • Post: 280
    • Mostra profilo
Re: Domande varie
« Risposta #7 il: 19 Febbraio 2008, 19:07:29 »
Citazione

Lux ha scritto:
Citazione
Per ottenere l'output di "du" devi fare così:

Dim sShellOutput AS String

SHELL "du -ksh " & user.home TO sShellOutput
PRINT sShellOutput


occhio che du impiega un po' prima di restituire il risultato.
Nel comando che ho scritto calcola lo spazio occupato nella Home
dell'utente che lancia l'applicazione.

Ok ha funzionato, grazie mille però avrei ancora una domanda, ora oltre alla dimensione della home mi da anche il suo indirizzo(mi scrive: 9.8G /home/luigi)
tutto mi viene rappresentato all'interno di una textbox, ora volendo visualizzare solo il valore numerico come posso fare?
Grazie mille...


SHELL "du -ksh " & user.home & " | cut -f1" TO sShellOutput

ciao.

Offline Lux

  • Maestro Gambero
  • ****
  • Post: 416
    • Mostra profilo
Re: Domande varie
« Risposta #8 il: 21 Febbraio 2008, 17:44:32 »
Codice: [Seleziona]
SHELL "du -ksh " & user.home & " | cut -f1" TO sShellOutput

Non va mi da questo problemuccio...
Cioè: 9,9G accompagnato da un simbolo strano....
se volessi solo 9,9?

Offline giulio

  • Maestro Gambero
  • ****
  • Post: 280
    • Mostra profilo
Re: Domande varie
« Risposta #9 il: 21 Febbraio 2008, 19:23:51 »
Citazione

Lux ha scritto:
Codice: [Seleziona]
SHELL "du -ksh " & user.home & " | cut -f1" TO sShellOutput

Non va mi da questo problemuccio...
Cioè: 9,9G accompagnato da un simbolo strano....
se volessi solo 9,9?


Boh a me non dà nessuno strano segno. Comunque due soluzioni:

per vedere solo la cifra:

SHELL "du -ksh " & user.home & " | cut -f1 | tr -d [a-zA-Z]" TO sShellOutput

per lo strano segno prova:

PRINT Trim$(sShellOutput)

Trim$ toglie gli spazi bianchi ai lati della stringa. forse il segno
è una newline.  


se puoi prova in un terminale:

du -ksh $HOME | cut -f1

e vedi se anche lì c'è lo strano segno. Ancora meglio se fai un copia/incolla
dal textbox e posti qui il simbolo. ciao.

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Domande varie
« Risposta #10 il: 21 Febbraio 2008, 19:30:24 »
Oltre all'usare i comandi unix, puoi anche usare direttamente gambas, leggendo la stringa così come è, poi la scompatti con SPLIT(str, " "), ovverro creando un array di stringhe che split divide basandosi sullo spazio di separazione. Se non ti funziona, probabilmente perchè invece dello spazio c'è una tabulazione, quindi in alternativa puoi sostituire il comando con SPLIT(str, "\t").

Offline Lux

  • Maestro Gambero
  • ****
  • Post: 416
    • Mostra profilo
Re: Domande varie
« Risposta #11 il: 22 Febbraio 2008, 08:20:06 »
Ok è andata era uno spazio. Grazie.
Mi spiegheresti il codice per favore?
Citazione
Boh a me non dà nessuno strano segno. Comunque due soluzioni:

per vedere solo la cifra:

SHELL "du -ksh " & user.home & " | cut -f1 | tr -d [a-zA-Z]" TO sShellOutput

Offline giulio

  • Maestro Gambero
  • ****
  • Post: 280
    • Mostra profilo
Re: Domande varie
« Risposta #12 il: 22 Febbraio 2008, 08:59:53 »
Citazione

Lux ha scritto:
Ok è andata era uno spazio. Grazie.
Mi spiegheresti il codice per favore?

Citazione
Boh a me non dà nessuno strano segno. Comunque due soluzioni:

per vedere solo la cifra:

SHELL "du -ksh " & user.home & " | cut -f1 | tr -d [a-zA-Z]" TO sShellOutput


quello che fa "du" lo sai. Dopodiché l'output di "du" viene dato in pasto con una pipe "|"
al comando "cut -f1", che stampa solo il primo campo (-f1 = field 1) dell'output di "du".
A questo punto abbiamo 9,9G, ma a noi interessa solo il 9,9. Quindi con un'altra pipe
diamo in pasto 9,9G al comando "tr -d [a-zA-Z]" che cancella tutte le lettere minuscole e maiuscole, così resta solo 9,9. ciao.