Autore Topic: Comando OPEN - Aprire un file (Read e Write) in modalità RANDOM  (Letto 9644 volte)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re: Comando OPEN - Aprire un file (Read e Write) in modalità RANDOM
« Risposta #75 il: 28 Febbraio 2015, 14:35:55 »
In ogni caso, lette tutte le varie considerazioni, preferisco ancora le strutture, che secondo me semplificano la vita. Poi ognuno può pensarla come vuole.
Semplificano la vita in che senso? Ti devi spiegare. Io come avevo già avuto modo di dire qui mi limito a considerare le strutture in Gambas all'interno del contesto discusso, mi rendo conto che in altri scenari siano indispensabili, ma ripeto io in Gambas, all'interno delle sue normali procedure mi sembra solo che complichino la vita altro che semplificarla, nella migliore delle ipotesi devi scrivere più codice.

Vuott riportava:
Struttura : area_riservata_di_memoria_di_tipi_di_dati_non_omogenei = Array : area_riservata_di_memoria_di_tipi_di_dati_omogenei

A parte che non considera l'array variant  comunque con le array omogenee io ad esempio posso ordinare i dati con Sort e farci altre cose ma con una struttura cosa ci faccio? Zero o meglio devo scrivere più codice che magari si rallenta pure un pochino chissà.

Citazione
Piuttosto, mi piacerebbe leggere il parere di chi ha aperto il topic, che ha lanciato il sasso e poi non si è più fatto sentire...  :-\

Concordo, sarei curioso anch'io.
 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.722
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Comando OPEN - Aprire un file (Read e Write) in modalità RANDOM
« Risposta #76 il: 28 Febbraio 2015, 14:54:38 »
A parte che non considera l'array variant...

Questo lo credi tu.
Non tutto però si può utilizzare ovunque e sempre: negli àmbiti che solitamente frequento io, se utilizzo il Variant, le funzioni me lo sbattono in faccia.

Io ho solo cercato di dare una risposta alla tua domanda generale sulle Strutture.



...comunque con le array omogenee io ad esempio posso ordinare i dati con Sort e farci altre cose ma con una struttura cosa ci faccio?
...non puoi paragonare una Struttura ad un Array, poiché la prima a differenza della seconda (lo ripeto per l'ennesima volta) NON è una variabile strutturata di tipi omogenei,

Come ha detto Top Fuel, ognuno usa le risorse che conosce, che meglio conosce o che ritiene più utili ed opportune al momento.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re: Comando OPEN - Aprire un file (Read e Write) in modalità RANDOM
« Risposta #77 il: 28 Febbraio 2015, 15:02:02 »
Io come avevo già avuto modo di dire qui mi limito a considerare le strutture in Gambas all'interno del contesto discusso, mi rendo conto che in altri scenari siano indispensabili...

 :-\
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.722
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Comando OPEN - Aprire un file (Read e Write) in modalità RANDOM
« Risposta #78 il: 28 Febbraio 2015, 16:02:45 »
...appunto.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline filipsnew

  • Gamberetto
  • *
  • Post: 28
    • Mostra profilo
Re: Comando OPEN - Aprire un file (Read e Write) in modalità RANDOM
« Risposta #79 il: 02 Aprile 2015, 00:24:14 »
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.
Sub <homofaberfortunaesuae> End

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.722
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Comando OPEN - Aprire un file (Read e Write) in modalità RANDOM
« Risposta #80 il: 02 Aprile 2015, 00:53:01 »

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.

Mi pare, caro filipsnew, che ci intendiamo molto bene.    ;)
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re: Comando OPEN - Aprire un file (Read e Write) in modalità RANDOM
« Risposta #81 il: 02 Aprile 2015, 10:29:15 »

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.

Cioè tu intenderesti qualcosa del genere (vedi allegato)?
 :ciao:

P.S. Nel commentato la dove scritto 100,001 è in realtà 1,000,001
« Ultima modifica: 02 Aprile 2015, 13:14:43 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.722
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Comando OPEN - Aprire un file (Read e Write) in modalità RANDOM
« Risposta #82 il: 04 Ottobre 2015, 15:01:27 »
Riprendo questa discussione ed in particolare la parte relativa alle Strutture.
E' interessante come Minisini abbia ultimamente in una sua risposta nella Mailing List ufficiale espresso questo giudizio sull'uso delle Strutture in Gambas:

" Note that internally the structure Elements is transformed into a
temporary object pointed to the real data so that you can use the syntax
'Element.XXX'.

In other words, unless you talk to a C shared-library through the Extern
keyword, you should not use structures.

--
Benoît Minisini
"

;D

Inoltre aggiunge:

" In Gambas, a structure is a class. As soon as you use it exactly like a
class, there is no difference.


Codice: [Seleziona]
Struct MyStruct
...
End Struct

Private aStruct As MyStruct
Private aClass As MyClass

--> aClass and aStruct behave the same.

But there is something more when you use the Struct keyword in the
declaration:


Codice: [Seleziona]
' MyClass.class
Private aStruct As Struct MyStruct

Then the contents of the structure is embedded in the object where it is
declared. Consequently, to use it like another object (i.e.
MyObject.aStruct.XXX), Gambas has to create a temporary object, and so
it is slower than using a real object.

There is the same distinction with array of structures:


Codice: [Seleziona]
' MyClass.class
Private arrayOfStruct[XXX] As Struct MyStruct

arrayOfstruct[1] is slower than if the declaration has been:

Codice: [Seleziona]
Private arrayOfStruct As New MyStruct[XXX]

(note that in the late case, you have to create instances of MyStruct to
populate the array).

I hope it's a bit clearer now.

Regards,

--
Benoît Minisini
"
« Ultima modifica: 04 Ottobre 2015, 16:24:48 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re:Comando OPEN - Aprire un file (Read e Write) in modalità RANDOM
« Risposta #83 il: 04 Ottobre 2015, 15:04:38 »
e se lo dice lui...
L'uomo ha inventato la bomba atomica, ma nessun topo al mondo costruirebbe una trappola per topi.
Albert Einstein

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.722
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Comando OPEN - Aprire un file (Read e Write) in modalità RANDOM
« Risposta #84 il: 04 Ottobre 2015, 15:11:13 »
e se lo dice lui...
Mah...... la sua posizione mi pare simile a quella di T. Boege, Amministratore fra l'altro del forum tedesco dei programmatori Gambas, secondo il quale l'uso della funzione Extern va bene solo in casi limitati, dovendosi preferire la realizzazione di un apposito Componente scritto in C o C++.
Mah.... !
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re:Comando OPEN - Aprire un file (Read e Write) in modalità RANDOM
« Risposta #85 il: 04 Ottobre 2015, 15:20:41 »
probabilmente la ragione sta nel garantire indipendenza da funzionalità non native del linguaggio.   :-\
L'uomo ha inventato la bomba atomica, ma nessun topo al mondo costruirebbe una trappola per topi.
Albert Einstein

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.722
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Comando OPEN - Aprire un file (Read e Write) in modalità RANDOM
« Risposta #86 il: 04 Ottobre 2015, 16:04:22 »
...garantire indipendenza da funzionalità non native del linguaggio.
Gli proporrei in tal caso di appellarsi all'ONU o comunque alla Convenzione dell'Aja...    :rotfl:

...io sono - laddove ne ricorrano le effettive necessità - per un uso mooolto integrato dei linguaggi.  :)
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Comando OPEN - Aprire un file (Read e Write) in modalità RANDOM
« Risposta #87 il: 04 Ottobre 2015, 16:20:32 »
Scusate ragazzi,  ;D
avevo letto quanto qui riportato ma non ci ho capito molto... non ci ho capito neanche poco a dire la verità un aiutino anche a me su quanto sostiene il GranCapoLupMan?
 :ciao:

PS: Magari alla luce di quanto avevo qui postato? Please
« Ultima modifica: 04 Ottobre 2015, 16:23:52 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Comando OPEN - Aprire un file (Read e Write) in modalità RANDOM
« Risposta #88 il: 04 Ottobre 2015, 16:41:17 »
Riprendo questa discussione ed in particolare la parte relativa alle Strutture.
E' interessante come Minisini abbia ultimamente in una sua risposta nella Mailing List ufficiale espresso questo giudizio sull'uso delle Strutture in Gambas:

...
I hope it's a bit clearer now.

Regards,
Benoît Minisini


 :'(  :'(  :'(
« Ultima modifica: 04 Ottobre 2015, 16:44:08 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.722
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Comando OPEN - Aprire un file (Read e Write) in modalità RANDOM
« Risposta #89 il: 04 Ottobre 2015, 16:53:45 »
Mah.... guarda.... la sostanza sta tutta qua:

" In other words, unless you talk to a C shared-library through the Extern
keyword, you should not use structures.
"

In effetti, come ha ben intuito sotema, Minisini (ma anche altri, come ho riportato) ritiene sia più opportuno utilizzare le risorse più propriamente native del linguaggio Gambas.
Lui non può, però, negare la concessione di un uso delle Strutture (più proprie del C ) nei casi di gestione di librerie esterne. Infatti - come in modo un po' forte ti risposi in questa discussione - passare a funzioni esterne scritte in C una risorsa come un array di tipo Variant, significa non conoscere i sorgenti (....scritti in C  :D fra l'altro !) del linguaggio Gambas.

La Struttura del linguaggio C, in fondo, è un elemento semplice, un'area di memoria riservata, nella quale si allineano uno dopo l'altro vari membri in base al loro tipo di dato. Il problema gigantesco (questo sì che è un "problema" di Gambas) è che Gambas non riesce - o meglio, non sempre, non in tutti i casi riesce - a gestire precisamente le Strutture passate o da passare ad una funzione esterna scritta in C.   Questa è una delle ragioni principali per la quale Tobias Boege ritiene opportuno creare in tali casi un apposito Componente di Gambas scritto in C.... io però appartengo ad un'altra scuola di pensiero, secondo la quale devi essere tu programmatore in questi casi difficili a conciliare in qualche modo tutto e a calcolare gli esatti allineamenti e compensazioni.
Su questo argomento ho abbozzato questi due mattoni micidiali: 
http://www.gambas-it.org/wiki/index.php?title=Gestire_con_sicurezza_le_Strutture_esterne
http://www.gambas-it.org/wiki/index.php?title=Gestire_con_un_Puntatore_le_Strutture_esterne

In Gambas il suo Variant è definito da un paio di Strutture:
Codice: [Seleziona]
/* Gambas VARIANT datatype definition */

typedef
  struct {
    GB_TYPE type;
union {
char _boolean;
unsigned char _byte;
short _short;
int _integer;
int64_t _long;
float _single;
double _float;
GB_DATE_VALUE _date;
char *_string;
intptr_t _pointer;
void *_object;
int64_t data;
}
value;
}
PACKED
  GB_VARIANT_VALUE;

typedef
  struct {
    GB_TYPE type;
GB_VARIANT_VALUE value;
#if __WORDSIZE == 64
int64_t _pad;
#endif
    }
  GB_VARIANT;
   
comprensibili solo da gambas.
« Ultima modifica: 05 Ottobre 2015, 12:29:05 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »