Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291

    VB6 - Accesso ai file sequenziali.

    Per Salvare ed aprire un file uso le istruzioni Write #FileNum, e Input #FileNum, .
    Per i controlli che formano delle matrici non ho problemi a Salvare ed Aprire, ma le difficoltà sorgono quando oltre alle predette matrici vi sono da salvare ed aprire dei dati inseriti in singoli Txt, come segue:
    codice:
    '....  .... .... .... .... Salva:
    Open FileName For Output As #FileNum
                For s = FrmTariffa.TxtVS1.LBound To FrmTariffa.TxtVS1.UBound Step 1
                    If FrmTariffa.TxtVS1(s).Visible = True Then
                        Write #FileNum, FrmTariffa.TxtVS1(s).Text
                    End If
                Next s
                For s = FrmTariffa.TxtVC1.LBound To FrmTariffa.TxtVC1.UBound Step 1
                    If FrmTariffa.TxtVC1(s).Visible = True Then
                        Write #FileNum, FrmTariffa.TxtVC1(s).Text
                    End If
                Next s
                Write #FileNum, FrmTariffa.TxtControv.Text; FrmTariffa.txtMin.Text; _
                FrmTariffa.txtMax.Text; FrmTariffa.txtMedio.Text; _
                FrmTariffa.txtConcil.Text; FrmTariffa.txtFatt.Text; FrmTariffa.txtMax2.Text 
            Close #FileNum
    
    '....  .... .... .... .... Apre:
    Open FileName For Input As FileNum
            ' Trova la fine del file:
            Do While Not (EOF(FileNum) = True)
                For y = FrmTariffa.TxtVS1.LBound To FrmTariffa.TxtVS1.UBound Step 1
                    ReDim vrNumer(y)
                    Input #FileNum, vrNumer(y)
                        If vrNumer(y) <> "" Then
                            FrmTariffa.TxtVS1(y).Visible = True
                        End If
                        FrmTariffa.TxtVS1(y).Text = vrNumer(y)
                Next y
                For y = FrmTariffa.TxtVC1.LBound To FrmTariffa.TxtVC1.UBound Step 1
                    ReDim vrNumer(y)
                    Input #FileNum, vrNumer(y)
                        If vrNumer(y) <> "" Then
                            FrmTariffa.TxtVC1(y).Visible = True
                        End If
                            FrmTariffa.TxtVC1(y).Text = vrNumer(y)
                Next y
                   If (EOF(FileNum)) = False Then
                        Close #FileNum      'Chiude il file
                        MsgBox "Errore nell'apertura del file! Ripetere l'operazione.", vbExclamation + vbOKOnly, "Determinazione del ..."
                        boolVerifica1 = True
                        Exit Sub            'Esce dalla routine
                    End If
            Loop                            'Esce da DO
        Close #FileNum
    Il predetto codice mi consente di Salvare i dati, ma non sò come fare per aprire quelli contenuti nei singoli Txt (quelli in Blue).
    Ho provato in diversi modi, ma ...
    Potreste darni una mano?
    Grazie!
    LM

  2. #2
    Se ho capito bene il tuo problema sarebbe quello di "renderti conto" quando carichi i dati a che textbox corrispondono..
    Se davvero fosse così potresti salvare i dati delle textbox separandoli con un carattere che sei sicuro di non usare nei dati (o una serie..es. @%%@): in questa maniera (tenendo fisso l'ordine delle textbox) potresti usare le funzioni di modifica di una stringa (per esempio split) ed allora avresti le stringhe ben separate in variabili diverse.

    Se quello che vuoi è questo, ti posso aiutare anche nel codice..altrimenti non ho capito la domanda..

    ciao

  3. #3
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    Ciao MdE2005, grazie per l'interessamento.
    Mi rendo conto, ora, che con tutto quel codice ho reso le cose di difficile comprensione.
    Il punto è semplicemente come Salvare ed aprire un file sequenziale.
    Quindi semplifico il codice sopra esposto:
    codice:
    Open FileName For Output As #FileNum
     For s = FrmTariffa.TxtVS1.LBound To FrmTariffa.TxtVS1.UBound Step 1
         If FrmTariffa.TxtVS1(s).Visible = True Then
            Write #FileNum, FrmTariffa.TxtVS1(s).Text
         End If
     Next s
     Write #FileNum, FrmTariffa.TxtControv.Text, FrmTariffa.txtMin.Text
    Close #FileNum
    Come vedi così salvo il file, i cui dati provengono da diverse matrici di controlli (ne ho evidenziata solo una)e da diverse Txt NON inserite in matrici, per così dire "sciolte" ciascuna con il proprio nome.
    Ora il problema sorge quando devo Aprire il File. Il codice che ho postato per Aprire il file NON funziona correttamente ed in più non riesco a caricare le Txt che non sono inserite in matrici di controlli (ovvero FrmTariffa.TxtControv.Text, FrmTariffa.txtMin.Text ...).
    Pertanto l'aiuto che ho chiesto è riferito al codice per Aprire il file, tenuto conto di quello usato per Salvare (naturalmente se è corretto).
    Spero che tu possa aiutarmi, altrimenti grazie comunque.
    LM

  4. #4
    Ma in che senso non te le carica? Teoricamente, caricando riga per riga ti dovrebbe caricare tutti i contenuti delle texrbox non appartenenti alla matrice accanto..

  5. #5
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    Mi sono accorto aprendo il file con Excel (l'estensione che uso è .csv) che utilizzando questo codice: Write #FileNum, FrmTariffa.TxtControv.Text, FrmTariffa.txtMin.Text, ...
    la scrittura dei dati avviene non per righe ma per colonne.
    Quindi ho modificato in :
    Write #FileNum, FrmTariffa.TxtControv.Text
    Write #FileNum, FrmTariffa.txtMin.Text
    ...
    Così il file risulta scritto tutto su una sola colonna (i dati, perchè si tratta di numeri, sono incollonnati tutti in una colonna).
    Ciò nonostante dopo la lettura delle matrici di controlli, il codice va in errore ed esce dalla routine.
    In effetti non so come utilizzare in modo corretto la matrice dinamica ReDim vrNumer(y)nel caso di Txt fuori da matrici di controlli.
    LM

  6. #6
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    Riprendo il post precedente.
    Prendendo spunto da quanto indicato da MdE2005, sono riuscito a caricare un'Array (array_riga) con il valori contenuti nel File salvato con l'istruzione :
    Open FileName For Output As #FileNum
    For y = Form1.TxtVS1.LBound To Form1.TxtVS1.UBound Step 1
    Write #FileNum, Form1.TxtVS1(y).Text,
    Next y
    Write #FileNum, Form1.txtMin.Text, Form1.txtMedio.Text, Form1.txtConcil.Text,
    Close #FileNum

    Come vedete ho usato come delimitatore dei dati ","
    Ora leggo nell'array_riga:
    array_riga(0) : ""1000"" : String
    array_riga(1) : ""2000"" : String
    ...
    array_riga(11) : ""300"" : String

    I cui valori corrispondono a quelli inseriti in 12 Txt, di cui 9 in una matrice di controlli e 3 al di fuori della matrice.
    NON riesco ad assegnare i valori della matrice ai rispettivi controlli ... Help Me. Il codice che stò provando è il seguente:
    codice:
        Open FileName For Input As FileNum
                ' Ripete fino alla fine del file:
            Do While Not (EOF(FileNum) = True)
                ' Assegna la riga a una variabile:
                Line Input #FileNum, TextLine
                array_riga = Split(TextLine, ",", -1, vbTextCompare)
               
                For y = 0 To UBound(array_riga)
                    'For Each y1 In array_riga(y)
                       'For j2 = Form1.TxtVS1.LBound To Form1.TxtVS1.UBound
                            Form1.TxtVS1(0) = array_riga(y)
                        'Next j2
                    Next y
          Loop
    VVoVe:
    LM

  7. #7
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    Bha, è andata anche questa. Di seguito posto il codice per Aprire un file sequenziale, con matrice di controlli ed altre Txt.
    Gradirei comunque qualche suggerimento per eventualmente migliorare il codice:
    codice:
    Dim boolVerifica1 As Boolean
    Dim boolErrAnnCO1 As Boolean
    Private Sub Apri_Click()
            Dim TextLine
            Dim y As Integer
            Dim y1 As Variant
            Dim Y2
            Dim FileNum As Integer
            Dim FileName As String
            Dim FileTitle As String
            Dim array_riga() As String
            
        'Variabile di MsgBox:
            Dim intDom2 As Integer
                
            If boolVerifica1 = False And (Form1.TxtVS1(8).Text) <> "" Then
                intDom2 = MsgBox("Prova Apri/Salva file sequenziale - Volete salvare il file?" & Chr(13) _
                & "Clic su OK per effettuare l'operazione" & Chr(13) _
                & "su Annulla per aprire un nuovo file, senza salvare quello in uso.", vbExclamation + vbOKCancel, "Prova Apri/Salva")
                ' Pulsante OK:
                If intDom2 = 1 Then
                    ' Invia alla routine salva FrmTariffa:
                    Call Form1.Salva_Click
                End If
            End If
            
            With Form1.CommonDialog1
                ' Imposta CancelError su True:
                .CancelError = True
            On Error GoTo ErrHandler
                .Filter = "File di programma (*.csv)|*.csv|Documenti di Testo (*.Txt)|"
                .FilterIndex = 1
                .DefaultExt = "csv"
                .Flags = cdlOFNNoChangeDir Or cdlOFNFileMustExist Or cdlOFNNoReadOnlyReturn
                .InitDir = App.Path & "\DATI\Compenso\"
                .DialogTitle = "Selezionare il file da aprire"
                .FileName = Form1.CommonDialog1.FileName
                .ShowOpen
    
    ErrHandler:
            ' E' stato scelto Annulla:
                If Err.Number = 32755 Then
                    boolErrAnnCO1 = True
                    Exit Sub
                    Else: boolErrAnnCO1 = False
                End If
                
                
                ' Visualizza nome e percorso del file in uso nel Titolo della Frm:
                Form1.Caption = " Prova Apri\Salva - " & Form1.CommonDialog1.FileName
                FileNum = FreeFile()
                FileName = Form1.CommonDialog1.FileName
                FileTitle = Form1.CommonDialog1.FileTitle
        
                ' Esce se l'utente ha fatto clic su annulla:
                If Len(FileName) = 0 Then
                    Exit Sub
                End If
            End With
    
        Open FileName For Input As FileNum
                ' Ripete fino alla fine del file:
            Do While Not (EOF(FileNum) = True)
                ' Assegna la riga a una variabile:
                Line Input #FileNum, TextLine
                array_riga = Split(TextLine, ",", -1, vbTextCompare)
               
                For y1 = 0 To 8
                    Form1.TxtVS1(y1).Text = array_riga(y1)
                Next y1
                For Y2 = 9 To 11
                    Form1.txtMin.Text = array_riga(9)
                    Form1.txtMedio.Text = array_riga(10)
                    Form1.txtConcil.Text = array_riga(11)
                Next Y2
            Loop
            
                If (EOF(FileNum)) = False Then
                    Close #FileNum      'Chiude il file
                    MsgBox "Errore nell'apertura del file! Ripetere l'operazione.", vbExclamation + vbOKOnly, "Prova Apri/Salva"
                    boolVerifica1 = True
                    Exit Sub            'Esce dalla routine
                End If
        Close #FileNum
    End Sub
    LM

  8. #8
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    Posto di seguito una correzione, indicata da Sypher, per evitare che i dati siano restituiti con il doppio apice ( " " )
    Riga da sostituire:
    array_riga = Split(Replace(TextLine, Chr(34), ""), ",", -1, vbTextCompare).
    LM

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.