Autore Topic: [risolto]read file  (Letto 4862 volte)

Offline naderit

  • Grande Gambero
  • ***
  • Post: 140
    • Mostra profilo
[risolto]read file
« il: 06 Gennaio 2010, 12:33:47 »
salve a tutti, la mia domanda è semplice come posso leggere un file con metodo casuale?
grazie

Offline Berserker79

  • Grande Gambero
  • ***
  • Post: 201
    • Mostra profilo
Re: read file
« Risposta #1 il: 06 Gennaio 2010, 12:53:03 »
Che tipo di file (txt, video, audio, ecc.)???

Offline naderit

  • Grande Gambero
  • ***
  • Post: 140
    • Mostra profilo
Re: read file
« Risposta #2 il: 06 Gennaio 2010, 15:23:26 »
scusate
un file *.txt con una lunghezza per ogni record e campi ben stabilita
tipo :
aaaaaaaaaa     bbbbbbbbbb
cccccccccc     ffffffffff
wwwwwwwwww     rrrrrrrrrr

con vb6 utilizzo questa procedura:

Option Explicit

Dim index As Integer

Private Type myrecord
    campo1 As String * 15
    campo2 As String * 10      
End Type

Private Sub Command1_Click()

Dim intfile As Integer

Dim leggi As myrecord

If index = 0 Then
  index = 1
End If

intfile = FreeFile

Open App.Path & "\miofile.txt" For Random As #intfile Len = 25
Get #intfile, index, leggi
Close #intfile

Label1.Caption = leggi.campo1
Label2.Caption = leggi.campo2

index = index + 1

End Sub

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: read file
« Risposta #3 il: 06 Gennaio 2010, 16:03:22 »
Ma tu vuoi leggere un file a caso o un campo del file a caso?

Offline naderit

  • Grande Gambero
  • ***
  • Post: 140
    • Mostra profilo
Re: read file
« Risposta #4 il: 06 Gennaio 2010, 16:41:54 »
forse mi sono spiegato male:
casuale intendevo il metodo di lettura del file in vb:
IMPUT #miofile  apre un file con metodo sequenziale
RANDOM #miofile  apre un file con metodo casuale
BINARY #miofile  apre un file con metodo binario

ho già visto il metodo sequenziale con gambas:

PUBLIC SUB Button1_Click()

  DIM intfile AS File
  DIM ntesto AS String
 
intfile = OPEN "/miofile.txt" FOR INPUT

WHILE NOT Eof(intfile)
LINE INPUT #intfile, ntesto
ListBox1.Add(ntesto)
WEND
CLOSE #intfile
END

questa procedura carica un file di testo in una listbox

mi serve solo per capire come funziona gambas per migrare alcune applicazioni
ciao

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: read file
« Risposta #5 il: 06 Gennaio 2010, 23:52:40 »
scusa una domanda stupida da parte di un programmatore non professionista ed illetterato ma a che serve leggere un file in modo casuale?

Offline guglielmofede

  • Gambero
  • **
  • Post: 64
    • Mostra profilo
Re: read file
« Risposta #6 il: 08 Gennaio 2010, 00:41:38 »
SALVE,

vedo che molti il Basic non l'ho anno praticato come altri.

naderit

in questo momento non ho ancora messo mano ai file, anche se ho letto, accenni, a come collegarsi al SQL3 e se è così semplice allora siamo veramente a cavallo.
Si perchè solo chi ha cozzato con le field sa cosa intendo.
Per dovere di cronache, vedo di spiegare cosa intente il N.S. amico naderit.

In Basic la possibbilità di spostarsi da un record all'altro e quindi di accedere in modo diretto al record viene identificato con la parola RANDOM cioè accesso casuale.

L'accesso ai file in Basic è Input , Output , Append , Random , Binary.
Con le estensioni dell'SQL queste non servono perchè è il  database a gestire tutto, indici, campi, record.

Per esempio: le colonne in excel si possono paragonare ai campi, le rihe ai record.

Spero di aver fatto chiarezza....

Offline naderit

  • Grande Gambero
  • ***
  • Post: 140
    • Mostra profilo
Re: read file
« Risposta #7 il: 08 Gennaio 2010, 09:41:27 »
grazie Guglielmofede
effettivamente non sono stato molto chiaro, vi spiego cosa devo fare:
ho un file di testo, tipo exel, come diceva gugleimofede, composto da righe e colonne sempre di una lunghessa per colonna ben stabilita, es. 30 caratteri; ora devo estrarre tutti i dati di ogni cella identificata con n°riga/n°colonna, lavorarli e salvarli in un database, un modo possibile è leggere il file con metodo RANDOM (casuale) in quanto posso per ogni riga, definire le colonne, in vb, come ho spiegato definisco un nuovo tipo di variabile con il metodo Type, ovvero:

Private Type myrecord
colonna1 As String * 15 - definendo il n° di caratteri da estrarre
colonna2 As String * 10
End Type

aprendo poi il file con RANDOM e popolando le variabili con GET

Ora non sono riuscito a trovare il metodo con Gambas
grazie

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: read file
« Risposta #8 il: 08 Gennaio 2010, 11:26:56 »
quindi il tuo file non ha dei caratteri per separare le colonne ma ogni colonna viene definita in base a un tot numero di caratteri?

il metodo per estrarre i dati da questo tipo di file è molto semplice e veloce, se invece le colonne sono anche separate da un carattere è ancora più semplice e ti puoi guardare il codice di meteomachinelinux nel fom di importazione dati da file di testo.

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: read file
« Risposta #9 il: 08 Gennaio 2010, 15:43:43 »
I field, se non ricordo male, c'erano già nel vecchio GW-BASIC, dove si poteva aprire l'n-simo record di un file di tipo Random. Random significava appunto ad accesso casuale, perché non eri costretto a leggerti tutti i dati prima di quelli da te voluti.

In pratica era un "layer" che creava l'interprete fra il file e l'utente.
L'utente non doveva far altro che definire la lunghezza dei campi del record e poi era il sistema. Immaginiamo che creassi questa struttura:
Nome: 30
Cognome: 40
Indirizzo: 80

Ogni record era lungo 150 caratteri.

Se io volevo leggere il 3° record, chiedevo semplicemente di farlo: era poi l'interprete che apriva il file in questione, "saltava" i primi 300 caratteri e poi leggeva dal 301° al 450° e mi forniva i dati già suddivisi per campi.


In Gambas si potrebbe fare semplicemente con un file su cui si memorizzano i dati riga per riga. Ogni riga è costituita da una stringa unica. Si programma il sistema affinché sappia che tale stringa contiene: da un certo punto ad un altro una variabile, da quel punto ad un altro ancora un altro campo ecc...
Basta poi aprire il file, saltare le prime n-1 righe, leggere la riga n e dividere i dati n base allo schema richiesto.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: read file
« Risposta #10 il: 08 Gennaio 2010, 15:46:56 »
Ma scusate non è meglio dividere i "campi" con un carattere di tabulazione e poi splittarlo come \t???

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: read file
« Risposta #11 il: 08 Gennaio 2010, 23:21:29 »
Beh, sì, certo. Come sempre non c'è mai la soluzione perfetta :-)
Dipende da lui come vuole accedere ai dati e cosa contengono quei dati.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline guglielmofede

  • Gambero
  • **
  • Post: 64
    • Mostra profilo
Re: read file
« Risposta #12 il: 08 Gennaio 2010, 23:51:39 »
SALVE,

e se i dati vi sono stati dati cosi ?

Mi pare di avere capito che i file sono quelli che l'excel compone per trasportare i dati ad altre applicazioni, cioè i file con estensione cvs.

Io non so rispondere perchè devo ancora studiare.... dai, su, qualche anima buona ? Non vorrete perdere questo N.S. amico facendolo ritornare dall'altra sponda.
Ormai ha spiccato il primo salto, diamogli un tetto !

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: read file
« Risposta #13 il: 09 Gennaio 2010, 00:47:12 »
Purtroppo nessuno di noi è sensitivo...se non ci vengono dati tutti i dati necessari non possiamo sapere cosa serva veramente all'utente. Noi cerchiamo di dare UNA soluzione e mai LA soluzione..

Diamo le risposte in base alle esigenze e alle nostre conoscenze. Se non sappiamo con quali materiali abbiamo a che fare possiamo stare qui a indovinare a vita...

Offline pastrank

  • Maestro Gambero
  • ****
  • Post: 266
    • Mostra profilo
Re: read file
« Risposta #14 il: 09 Gennaio 2010, 11:35:18 »
E' poco che uso Gamnas, e questo ancora non l'ho mai dovuto usare, ma, guardando la documentazione, direi che deve usare gli Stream... tenere i record di lunghezza fissa puo' essere fatto leggendo sequenzialmente il file e scartando le righe "inutili", ma in caso di file belli grossi e' un lavoro lungo. Se sono poche righe, invece, e' inutile.
Invece, con quel metodo si leggono solo i caratteri necessari, ed e' sicuramente molto piu' veloce. Usavo questo metodo spesso con vb, dove altrimenti tenere gia' due o tre mega di archivio diventava lento. Si puo' associare un indice in memoria ai vari record, per maggiore velocita'.

Un esempio di questo sistema, per esempio, e' nella documentazione, su READ. In pratica si imposta il carattere di partenza, e si leggono tot caratteri successivi. E' chiaro poi che una semplice classe ti permettera', una volta creata, di leggere il record N astraendosi dalle "complessita'" della lettura.

Dico questo perche' in molti casi questo evita l'uso di database, quindi meno dipendenze, quindi e' piu' sicuro: imho, come nel vb, dove di solito un programma con piu' di due ocx quasi mai valeva i dischetti su cui era salvato.