Visualizza post

Questa sezione ti permette di visualizzare tutti i post inviati da questo utente. N.B: puoi vedere solo i post relativi alle aree dove hai l'accesso.


Post - filipsnew

Pagine: 1 [2]
16
in Gambas la valutazione di corto circuito per OR e AND, con il vincolo (limite che in .NET non sussiste) che non possono essere mescolati (= solo sequenze di OR oppure solo sequenze di AND) e la sequenza deve stare su un'unica riga.
...

Scusa ma anche qui non mi è chiaro cosa intendi dire.
Ma in Gambas puoi mischiare AND e OR non puoi mischiare And If e Or If ma quasi mi pare un bene anzi guarda questo codice il primo è ingannevole uno potrebbe pensare che passi a Or e invece come è giusto che sia esce avendo un And If alla sua destra.
Codice: gambas [Seleziona]
Dim c, i As Integer
   c = 10
   i = 10
  If c = 11 And If i = 1 \ 0 Or c = 10 And i = 10 Then
    Print "Niente"
  Endif

  If c = 11 And i = 100 Or c = 10 And i = 10 Then
    Print "Seconda valutazione (dopo OR)"
  Endif

 :ciao:

Dunque, considerando la prima espressione booleana da testare c'è da dire che 1) l'operatore terminale è OR per cui l'interprete dovrà eseguire le due sottoespressioni (verosimilmente partendo da sinistra) ossia gli operandi dell'OR 2) essendo un OR tradizionale, la valutazione *deve* essere effettuata su ambedue e 3) la logica di cortocircuito dell'And If agirà soltanto sulla prima delle due (fermandosi alla valutazione di c = 11 in FALSE) 4) quando verrà poi valutata la seconda  (TRUE) si rientrerà all'OR terminale per la valutazione finale: FALSE OR TRUE = TRUE. (Praticamente in VB.NET io uso solo AndAlso e OrElse.)

17
Per rimanere nell'esempio fatto inizialmente sarebbe più corretto così:

Codice: gambas [Seleziona]
Dim c, i As Integer
   c = 10
  
  If c = 11 And If i = 1 \ 0 Then
    
  Endif

 :ciao:

P.S. A me questo pare proprio un And Destro ne più ne meno di quello di VB.Net.
Infatti anche AndAlso valuterà la seconda voce se la prima è corretta  :-\

Infatti è esattamente lo stesso che AndAlso con valutazione di cortocircuito. Però la dichiarazione multipla di variabili che hai fatto non so se sia corretta come in .NET.. infatti quando io ho provato qualche giorno fa mi segnava sempre errore e p.es. 10 integer li dovrei impilare con dichiarazioni dedicate. Un'altra "pecca" che ho rilevato, rispetto a VB.NET, è l'impossibiltà di dichiarare in posizione arbitraria nel corpo di routine. Cmq, fortunatamente questo interprete VB mi sta aiutando enormemente a trasferire alcune cosette su Linux :) .. è molto intuitivo anche se l'intellisense è abbastanza inferiore a quello di casa Microsoft.. comunque sia, complimenti a Minisini!

18
@vuott, ah ecco! avevo capito male credendo che volessi con la libreria ottenere un equivalente AndAlso in Gambas per valutare in generale espressioni booleane e non vedevo come.. era allora solo un esempio particolare di divisione tra interi col cortocircuito &&

19
ciao e grazie. Non capisco.. avevo cancellato immediatamente questo post, perché subito dopo avevo trovato alcune risposte sull'argomento. Ma forse è meglio che si sia mantenuto, perché la risposta è che esiste in Gambas la valutazione di corto circuito per OR e AND, con il vincolo (limite che in .NET non sussiste) che non possono essere mescolati (= solo sequenze di OR oppure solo sequenze di AND) e la sequenza deve stare su un'unica riga.

P.es.:

Codice: [Seleziona]
 
  Dim c As integer

  i = 2324
          
  If i = 2324 Or If c = 1 / 0 Then
    
     Stop
    
  Else
    
     Stop
        
  Endif

non solleva alcuna eccezione. Questo è più elegante e leggibile (almeno per me) di quanto risulti annidare comandi If (cosa che inzialmente avevo ovviamente fatto, e che comunque per l'OR non avrebbe senso).

@vuott: non ho capito quello che hai fatto.. hai creato una libreria in C poi l'hai eseguita tramite creasol, ma a cosa serve? usi il cortocircuito di C per valutare una divisione o sollevare eccezione di divisione per zero.. ???

20
esiste di suo questa operazione?

21
Per motivi di sicurezza, la registrazione automatica alla Wiki, che permette non solo di pubblicare nuove pagine ma anche di modificare quelle già presenti, è stata disattivata.

Chi volesse richiedere l'attivazione di un account è pregato di farne richiesta qui.


Salve, vorrei ottenere l'abilitazione alla Wiki. Grazie.

22
Ma così devi caricare in memoria TUTTO il file per modificare un solo record. ... non mi pare il massimo dell'efficienza, sopratutto se il file è bello grosso.

Tu mi hai chiesto una risorsa ed una procedura efficace, che producesse gli effetti da te sopra indicati; e la mia soluzione rispetta questo criterio.

Inoltre, il caricamento in memoria di grosse quantità byte non mi pare che oggi giorno sia un problema mortale.
Nei miei esempi, presenti nella WIKI, di esecuzione dei file audio con funzioni esterne in alcuni casi si arriva a caricare in memoria anche diverse decine di milioni di byte !



Con la modalità random del VB caricavi in memoria solo il record da modificare e scrivevi nel file solo il record modificato, senza toccare il resto del file.
......vorrei proprio vedere il codice C che c'è dietro quella risorsa.    ;D

@vuott, ringraziamenti sinceri per gli esempi postati.. mi hanno anche consentito di aggiornarmi su alcuni piccole differenze sintattiche rispetto a VB. Condivido il discorso sull'efficienza: oggi è davvero impensabile farsi dei problemi per caricamenti anche di decine di MB (in un programma fatto in .NET p.es. sapeste che oggetti mi capita di caricare, eppure l'esecuzione risulta fluida..). Per il discorso che il random di VB non intacchi la memoria avrei anch'io qualche riserva: se la procedura agisce sull'informazione di un certo flusso di dati, per es. per un inserimento intermedio, pare possibile che esista un algoritmo che riesca a farsi spazio tra due contendenti, facendo riapparire quello "alla destra" come per magia più in là quel tanto che basta, senza intaccare un po' di memoria? ???

Incidentalmente poi, ci si potrebbe al contrario chiedere quanto efficiente (dal punto di vista della risorsa temporale) sia l'andare ad operare sistematicamente su file che, non si dimentichi, risiedono su supporti fissi. Meglio crearsi un oggetto veloce su cui operare (inserire, cancellare ecc.) e poi, quando serve, salvare dove i dati devono essere conservati.

23
Ad ogni modo, in via generale sull'argomento dei percorsi, segnalo anche queste tre discussioni:

http://www.gambas-it.org/smf/index.php?topic=2745.0
http://www.gambas-it.org/smf/index.php?topic=457.msg26627#msg26627
http://www.gambas-it.org/smf/index.php?topic=3310.0

ok, grazie, direi che adesso è tutto chiaro (particolarmente illuminante il secondo link).

24

Però mi piacerebbe capire come mai inserendo il file test nella cartella della soluzione Gambas (nell tree del progetto, test figura nella cartella Dati), si verifica quel problema di Access Forbidden in Main.

Il perché te lo ha spiegato milio se non dai il Path completo, in questo caso Application.Path, come fa a trovare il file?

 :ciao:

P.S. Qualcosa tipo: User.Home &/ Application.Name  ;D

Perfetto! ecco perché anche provando il suggerimento di milio non mi funzionava: non era in effetti sotto home (ma milio mica poteva prevederlo a meno di essere chiaroveggente ;))

Edit

Scusa se rompo ancora un po' le scatole :) ma mi è venuto in mente perché avevo usato quel percorso: era in base a questo tip del giorno di Gambas (v. allegato)

Come si vede, sembra che si debba usare il percorso relativo per accedere a un file nel progetto, e del resto, se guardate il codice del mio primo post, vedete che l'apertura in input funziona (e il path è identico..); inoltre, il msg di errore indica Access Forbidden, non File Does Not Exist. Dovreste allora cortesemente spiegarmi come mai dà questo problema con un file che mi sembra essere all'interno del progetto (nella 'cartella' dati del tree di progetto). Aggiungo che ho provato con "~/test.txt" e il debug non dà interruzione, solo che incomprensibilmente il file nel progetto non risulta modificato dalla successiva operazione di scrittura.  Qualche idea...?  ???

Edit 2

Sì.. funziona solo con il Path assoluto.. continuo cmq a non capire: devo evincere che test.txt in Dati del tree non sia un file di progetto? Con file di progetto si intende forse dire i file generati in fase di creazione progetto?

25
Una domanda: perché per la gestione del file hai preferito utilizzare la variabile di tipo Stream anziché quella di tipo File ?

era solo per fare alcune prove; comunque il problema lo dava anche usando il tipo File.

26
cari kikko e milio, grazie per i suggerimenti. Ho seguito il link di kikko e ho trovato una documentazione che sembra davvero ottima. Strano però, perché su 100 ricerche Google non mi era saltato fuori niente rispetto a quella pagina..
Ho risolto :)
ho guardato l'esempio http://www.gambas-it.org/wiki/index.php?title=Scrivere_all%27interno_di_un_file_di_testo, ho pensato un po' al fatto che il path fosse relativo a tmp, così ho provato a mettere il file lì, e tutto è filato liscio. Grazie!

Però mi piacerebbe capire come mai inserendo il file test nella cartella della soluzione Gambas (nell tree del progetto, test figura nella cartella Dati), si verifica quel problema di Access Forbidden in Main.

27
Ciao, infatti la riga problematica precede hfile. Mi sto scervellando ma proprio non riesco a venirne a capo..
vorrei anche precisare che lo stesso scherzo mi capita anche con Mono in Ubuntu

28
Buonasera a tutti, sono un nuovo utente. Mi sono iscritto perché da poco ho scaricato Gambas su Xubuntu per adattare un programma scritto in VB in ambiente Windows. L'interfaccia (di Gambas) è gradevole, inoltre la documentazione e il supporto sembrano buoni, per questo l'ho preferito a Monodeveloper (che peraltro vincola al modello GTk per la creazione delle GUI, davvero un po' contorto..). Comunque sia, sto intervenendo nel forum perché (tanto per cambiare) ho un problema. In ambiente Linux (sto facendo un po' di test per adattarmi a Gambas, le piccole differenze di questo dialetto ecc..) succede in fase di compilazione che venga segnalato un errore al comando di accesso in scrittura a un file di testo di prova. Ho provato a cambiare i permessi al file da Lettura a Lettura/Scrittura ma niente.. Qualcuno ha avuto un'esperienza analoga e può gentilmente darmi un buon consiglio?

Ecco l'output dell'interprete

Pagine: 1 [2]