Newsgroup: it.comp.lang.visual-basic
Titolo: [VB6][Lunghetto]Problema scorrimento file

Buongiorno a tutti,
il mio problema è lo scorrimento di un file di testo. Lo apro all'
inizio e in due Command (3 e 4) lo faccio andare avanti e indietro.
Nome file: Database.txt
es. contenuto:
IoProgrammo
Andrea
13
13/13/2001
13/13/2002
Bel giornale
--------
VBJournal
Luca
15
02/02/1988
02/03/2005
Ottimo giornale
---------
e via dicendo
Quindi in sostanza faccio leggere 6 righe alla volta, mi fermo,
visualizzo in una text box, poi proseguo (command3) o retrocedo
(command4).
PROBLEMA:vado avanti OK, torno inditero OK rivado avanti mi sfalsa
tutte le posizioni. Potete aiutarmi? Ho postato codice tasti AVANTI e
INDIETRO. Caspita mi manca questo poi ho terminato il mio lavoretto.
VI RINGRAZIO e scusate il caos. Buona giornata.
Text Box sotto forma di matrice:
Titolo Brevetto
Titolare
Numero
Data Richiesta
Data Rilascio
Note
Ognina di queste si riempie dei dati interessati.
PEZZO DI CODICE
Form_load
   primo=true
end sub
VA AVANTI
Private Sub Command3_Click()
 
If EOF(1) Then
    MsgBox ("Record terminati.")
Else
 
    Form1.Text1(0).Text = ""
    Form1.Text1(1).Text = ""
    Form1.Text1(2).Text = ""
    Form1.Text1(3).Text = ""
    Form1.Text1(4).Text = ""
    Form1.Text1(5).Text = ""
 
 
       contos% = 0
       Do
         contos% = contos% + 1
         contetor = contetor + 1
           Line Input #1, indos$(contos%)
           Form1.Text1(0).Text = indos$(1)
           Form1.Text1(1).Text = indos$(2)
           Form1.Text1(2).Text = indos$(3)
           Form1.Text1(3).Text = indos$(4)
           Form1.Text1(4).Text = indos$(5)
           Form1.Text1(5).Text = indos$(6)
           If contos% = 6 Then
              Exit Sub
           End If
       Loop Until EOF(1)
End If
VA INDIETRO
Private Sub Command4_Click()
    Form1.Text1(0).Text = ""
    Form1.Text1(1).Text = ""
    Form1.Text1(2).Text = ""
    Form1.Text1(3).Text = ""
    Form1.Text1(4).Text = ""
    Form1.Text1(5).Text = ""
 
    Close
    Open "c:\database.txt" For Input As #1
      If primo = False Then
       posizione = contetor + 5
      End If
 
      If primo = True Then
       posizione = contetor
       primo = False
      End If
      contos% = 0
      contetor = 0
      Do
       contos% = contos% + 1
       contetor = contetor + 1
        Line Input #1, indos$(contos%)
         If contetor = posizione - 11 Then
          contos% = contos% + 1
          acontos% = contos% + 1
          bcontos% = contos% + 2
          ccontos% = contos% + 3
          dcontos% = contos% + 4
          econtos% = contos% + 5
          contos% = contos% - 1
          Form1.Text1(0).Text = indos$(contos%)
 
          Do
           contos% = contos% + 1
            Line Input #1, indos$(contos%)
             Form1.Text1(1).Text = indos$(contos%)
             Form1.Text1(2).Text = indos$(acontos%)
             Form1.Text1(3).Text = indos$(bcontos%)
             Form1.Text1(4).Text = indos$(ccontos%)
             Form1.Text1(5).Text = indos$(dcontos%)
              Exit Sub
           Loop Until EOF(1)
          End If
         Loop Until EOF(1)
End If
End Sub
Ciao ciao.
Andrea.

scorrimento di un file di testo. Una prima soluzione sarebbe quella di
caricare tutto il file in un array, ma ci sono dei limiti di memoria. La tua
soluzione, aprire e chiudere il file ogni volta non mi piace molto. Allora
ho pensato questa soluzione: apro il file (modifica il nome di file nella
Load) e memorizzo in un array gli offset di partenza di ogni riga (nel tuo
caso lo faccio ogni 6 righe). In questo esempio memorizzo al massimo 5000
gruppi di 6 righe ognuno. In pratica ottengo un array di puntatori, e ogni
puntatore indica la posizione nel file dove inizia il prossimo gruppo di 6
righe. A questo punto basta un semplice seek sul file per posizionarsi al
punto voluto e leggere le 6 righe. Semplice?
P.S.: se vuoi rispondermi privatamente, togli il NOSPAM_ alla mia email
Option Explicit
Dim Seeks(1 To 5000) As Long
Dim ff As Integer
Dim NumLines As Integer
Dim SeekEl As Integer
Dim FileLoaded As Boolean
Const MaxLines = 6
Private Sub ShowTxtFile(nf As String)
 
   If ff <> 0 Then Close ff
   ff = FreeFile
   Open nf For Input As ff
   Dim t As String
   Dim CurSeek As Long
   Dim LinesRead As Integer
   CurSeek = 1
   NumLines = 0
 
   Do Until EOF(ff)
      Line Input #ff, t
      LinesRead = LinesRead + 1 'conto quante righe ho letto
      If NumLines < 5000 Then 'al massimo 5000 gruppi di 6 linee
         If (LinesRead Mod 6 = 1) Then 'salvo il pointer ogni sesta riga
            NumLines = NumLines + 1
            Seeks(NumLines) = CurSeek ' Salvo la posizione attuale
         End If
         CurSeek = CurSeek + Len(t) + 2 ' Next pos. (2 per CR+LF)
      End If
   Loop
 
   If NumLines = 0 Then
      Close ff
      Exit Sub
   End If
   FileLoaded = True
   SeekEl = 1 ' Current line
   ShowActual
End Sub
Private Sub ShowActual()
   'Visualizzo 6 righe partendo dalla riga indicata da Seekel
   Dim t As String, i As Integer
   Seek #ff, Seeks(SeekEl)
   For i = 1 To MaxLines
       If Not EOF(ff) Then Line Input #ff, t Else t = ""
       Riga(i - 1) = t
   Next i
 
End Sub
Private Sub cmdAvanti_Click()
   If Not FileLoaded Then Exit Sub
   If SeekEl < NumLines Then
      SeekEl = SeekEl + 1
      ShowActual
   End If
End Sub
Private Sub CmdIndietro_Click()
   If Not FileLoaded Then Exit Sub
   If SeekEl > 1 Then
      SeekEl = SeekEl - 1
      ShowActual
   End If
End Sub
Private Sub Form_Load()
   ShowTxtFile "\windows\general.txt"
End Sub
Private Sub Form_Unload(Cancel As Integer)
   If ff > 0 Then Close ff
End Sub
--------------------------------
Inviato via 
http://usenet.libero.it