Oppure

Loading
31/12/11 0:40
WillyVB
Postato originariamente da nessuno:

Allora non hai letto quello che ti ho scritto sulla Get ...

La Get accetta il numero di file, il numero di record e la variabile

Get #2, 12, Rec

vuol dire leggi il record 12 dal file 2 e mettilo in Rec (che è la variabile strutturata)


Ok devo usare una variabile strutturata quindi mettiamo caso che io strutturo una variabile cosi:

Type Prova
Titolo as string
Anno as integer
End Type

Dopodiché dichiaro una variabile per la struttura scritta sopra

Dim Archivio as Prova

Ora mettiamo che voglio leggere i dati di un file in modo sequenziale per trascriverli in Random dovrei prima di tutto conoscere la lunghezza della variabile strutturata che calcolo tramite len, quindi

Dim N as Integer
DimRec=Len(Archivio)


Open "Directory:NomeFile" for Input as #1
Open "Directory:NomeFile.temp" for Random as #2 Len= Archivio
N=0
Do While Not EOF(1)
N=N+1
Input #1, Titolo, Anno
Put #2, N, Archivio
Loop
Close#2
Close#1

Una volta fatto ciò dovrei leggere i dati in modo random per poterli paragonare per riordinarli e riscriverli in modo sequenziale, quindi arrivato a questo punto dovrò riaprire il file in random ed usare:

Get #2, N, Archivio


Però cosi riscontro un "errore" nella scrittura, ovvero se vado ad aprire il file temporaneo "nomefille.temp" non trovo i dati scritti... bensì trovo lo spazio vuoto... come se ad ogni carattere avesse messo uno "spazio"... cosa sbaglio?!
aaa
31/12/11 10:14
Capiamoci su una cosa ... tu devi lavorare con file sequenziali (input, output) o con i file random?

Perché utilizzi un file sequenziale in lettura e uno random in scrittura?

I file random si utilizzano "in alternativa" a quelli sequenziali e servono per gestire i dati in lettura e in scrittura.
31/12/11 12:34
WillyVB
Postato originariamente da nessuno:

Capiamoci su una cosa ... tu devi lavorare con file sequenziali (input, output) o con i file random?

Perché utilizzi un file sequenziale in lettura e uno random in scrittura?

I file random si utilizzano "in alternativa" a quelli sequenziali e servono per gestire i dati in lettura e in scrittura.


Ti spiego, io creo delle "schede" che contengono varie informazioni (codice, titolo, anno ect) in modo sequenziale, questi dati li visualizzo in un'elenco tramite listbox, però il tutto viene visualizzato per come i records sono stati scritti, quindi non hanno un preciso ordine, quindi voglio riordinare tutti i records per un dato ordine, stile per anno oppure per codice, quindi scrivo in sequenziale, leggo in sequenziale, scrivo un file temporaneo con gli stessi dati del file sequenziale in random, per poi leggere i record del file random, riordinarli e riscrivere il file originale sequenziale, sembra un casino ma alla fine ci sono sempre e solo 2 file uno sequenziale ed uno random, successivamente quello random viene eliminato e rimane solo il file sequenziale ordinato, che viene visualizzato tramite listbox.

Questo è tutto il procedimento logico che dovrebbe fare il programma, ora... io sono riuscito a leggere in sequenziale, e scrivere in random... ma ho un problema quando scrivo in random... mi scrive solo le variabili string e non quelle integer. vi posto il codice:

Modulo:
Public Tit, TitO, Naz, Gen1, Gen2, Regia, SitU, SocN, Prod, Distr, Cast, Trama, Copertina As String
Public Cod, Anno, AnnoU As Integer

Type Film
Cod As Integer
Tit As String
TitO As String
Naz As String
Anno As Integer
Gen1 As String
Gen2 As String
Regia As String
SitU As String
SocN As String
Prod As String
Distr As String
AnnoU As Integer
Cast As String
Trama As String
Copertina As String
End Type


Private Sub
Private Sub Option1_Click()
If comboCat = "" Then
    MsgBox "Selezionare la categoria da visualizzare"
    Else
        Open App.Path & "\Archivi\" & comboCat For Input As #1
        Open App.Path & "\Archivi\" & comboCat & "-Random.temp" For Random As #2 Len = Len(ArchivioFilm1)
            N = 0
                Do Until EOF(1)
                    N = N + 1
                    Input #1, ArchivioFilm1.Cod, ArchivioFilm1.Tit, ArchivioFilm1.TitO, ArchivioFilm1.Naz, ArchivioFilm1.Anno, ArchivioFilm1.Gen1, ArchivioFilm1.Gen2, ArchivioFilm1.Regia, ArchivioFilm1.SitU, ArchivioFilm1.SocN, Prod, ArchivioFilm1.Distr, ArchivioFilm1.AnnoU, ArchivioFilm1.Cast, ArchivioFilm1.Trama, ArchivioFilm1.Copertina
                    Put #2, N, ArchivioFilm1
                Loop
        Close #1
        Close #2
End If
End Sub


Records presenti nel file sequenziale
"050","prova","prova","","2000","Horror","","","","","","",2000,"","",""
"002","prova1","prova1","","2000","Horror","","","","","","",2000,"","",""
"01","prova11","prova11","","2000","Horror","","","","","","",2000,"","",""


Records presenti nel file random dopo la sua creazione e scrittura
 prova prova     Horror            Ð                   prova1 prova1     Horror            Ð                 prova11 prova11     Horror            Ð      
aaa
31/12/11 12:37
WillyVB
Postato originariamente da nessuno:

Capiamoci su una cosa ... tu devi lavorare con file sequenziali (input, output) o con i file random?

Perché utilizzi un file sequenziale in lettura e uno random in scrittura?

I file random si utilizzano "in alternativa" a quelli sequenziali e servono per gestire i dati in lettura e in scrittura.


Ti spiego, io creo delle "schede" che contengono varie informazioni (codice, titolo, anno ect) in modo sequenziale, questi dati li visualizzo in un'elenco tramite listbox, però il tutto viene visualizzato per come i records sono stati scritti, quindi non hanno un preciso ordine, quindi voglio riordinare tutti i records per un dato ordine, stile per anno oppure per codice, quindi scrivo in sequenziale, leggo in sequenziale, scrivo un file temporaneo con gli stessi dati del file sequenziale in random, per poi leggere i record del file random, riordinarli e riscrivere il file originale sequenziale, sembra un casino ma alla fine ci sono sempre e solo 2 file uno sequenziale ed uno random, successivamente quello random viene eliminato e rimane solo il file sequenziale ordinato, che viene visualizzato tramite listbox.

Questo è tutto il procedimento logico che dovrebbe fare il programma, ora... io sono riuscito a leggere in sequenziale, e scrivere in random... ma ho un problema quando scrivo in random... mi scrive solo le variabili string e non quelle integer. vi posto il codice:

Modulo:
Public Tit, TitO, Naz, Gen1, Gen2, Regia, SitU, SocN, Prod, Distr, Cast, Trama, Copertina As String
Public Cod, Anno, AnnoU As Integer

Type Film
Cod As Integer
Tit As String
TitO As String
Naz As String
Anno As Integer
Gen1 As String
Gen2 As String
Regia As String
SitU As String
SocN As String
Prod As String
Distr As String
AnnoU As Integer
Cast As String
Trama As String
Copertina As String
End Type


Dichiarazioni sul form:
Dim Cat As String

Dim ArchivioFilm1 As Film


Private Sub
Private Sub Option1_Click()
If comboCat = "" Then
    MsgBox "Selezionare la categoria da visualizzare"
    Else
        Open App.Path & "\Archivi\" & comboCat For Input As #1
        Open App.Path & "\Archivi\" & comboCat & "-Random.temp" For Random As #2 Len = Len(ArchivioFilm1)
            N = 0
                Do Until EOF(1)
                    N = N + 1
                    Input #1, ArchivioFilm1.Cod, ArchivioFilm1.Tit, ArchivioFilm1.TitO, ArchivioFilm1.Naz, ArchivioFilm1.Anno, ArchivioFilm1.Gen1, ArchivioFilm1.Gen2, ArchivioFilm1.Regia, ArchivioFilm1.SitU, ArchivioFilm1.SocN, Prod, ArchivioFilm1.Distr, ArchivioFilm1.AnnoU, ArchivioFilm1.Cast, ArchivioFilm1.Trama, ArchivioFilm1.Copertina
                    Put #2, N, ArchivioFilm1
                Loop
        Close #1
        Close #2
End If
End Sub


Records presenti nel file sequenziale
"050","prova","prova","","2000","Horror","","","","","","",2000,"","",""
"002","prova1","prova1","","2000","Horror","","","","","","",2000,"","",""
"01","prova11","prova11","","2000","Horror","","","","","","",2000,"","",""


Records presenti nel file random dopo la sua creazione e scrittura
 prova prova     Horror            Ð                   prova1 prova1     Horror            Ð                 prova11 prova11     Horror            Ð      
aaa
31/12/11 12:56
Ecco .. quello che non capisco è questo miscuglio di file sequenziali e random.

Puoi usare SOLAMENTE i sequenziali come stai facendo, anche per ordinarne il contenuto. Non c'è affatto necessità del random.

Oppure, puoi gestire tutti i tuoi dati, inserimento, modifica, visualizzazione, cancellazione e ordinamento usando SOLAMENTE i file random.

Perché complicarsi la vita? Perché utilizzare il random?
04/01/12 14:58
WillyVB
Postato originariamente da nessuno:

Ecco .. quello che non capisco è questo miscuglio di file sequenziali e random.

Puoi usare SOLAMENTE i sequenziali come stai facendo, anche per ordinarne il contenuto. Non c'è affatto necessità del random.

Oppure, puoi gestire tutti i tuoi dati, inserimento, modifica, visualizzazione, cancellazione e ordinamento usando SOLAMENTE i file random.

Perché complicarsi la vita? Perché utilizzare il random?


Ho modificato il codice ora scrivo e leggo in random, ma ho un problema di spazi vuoti, ovvero, nella variabile strutturata ho specificato la grandezza delle variabili, nel momento della scrittura però non tutto lo spazio viene "scritto" però ovviamente la scrittura prende l'intero blocco riempiendo lo spazio restante con degli "spazi", ciò mi procura dei disagi sia nella visualizzazione (esempio pratico se metto che la var1 debba essere visualizzata nella text1 con allineamento centrato, ciò non avviene per via degli spazi) oppure nella ricerca (se io devo cercare un titolo all'interno del file per via degli spazi non lo trovo perché non è uguale a quello che ricerco, esempio io cerco "Prova" mentre nel file c'è "Prova ";).... come posso risolvere questo problema?!
aaa
04/01/12 15:04
Risolvi tenendo presente che ci sono gli spazi ...

Sembra una risposta scontata ma è così ...

Quando visualizzi i dati, elimini gli spazi con la funzione Trim e quando li cerchi fai il confronto con quello che ti serve tramite la funzione Left
04/01/12 15:27
WillyVB
Postato originariamente da nessuno:

Risolvi tenendo presente che ci sono gli spazi ...

Sembra una risposta scontata ma è così ...

Quando visualizzi i dati, elimini gli spazi con la funzione Trim e quando li cerchi fai il confronto con quello che ti serve tramite la funzione Left


Humm ok ho usato la funzione trim e va che è una meraviglia, ma come applico la funzione left al mio caso?

Mettiamo caso che io devo ricercare la parola "prova" e io ho due record "prova12345 " e "prova " come faccio a far riconoscere dove finisce la stringa alla funzione left?
aaa