Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Visual Basic 6.0 - Caricamento in una texbox di N righe da un file sequenziale

    Innanzitutto salve a tutti.
    Sono nuovo del forum e neofita di Visual basic.
    Essendo il primo programmino che faccio, non riesco a superare il seguente scoglio:
    Tramite un Output e le commondialogs salvo i campi compilati di un form (molto simile a quelli del web), in un file sequenziale .txt.
    Riesco a ricaricare senza problemi ogni riga compilata nel suo specifico campo col seguente codice:
    Private Sub Apri_Click()
    Dim Data As String
    Dim Agente As String
    Dim Impressioni As Variant
    Dim Salone As String
    Dim Telefono As String
    Dim Indirizzo As String
    Dim Mail As String
    Dim Durata As String
    Dim Prodotti1 As String
    Dim Prodotti2 As String
    Dim Prodotti3 As String
    Dim AssOp As String
    Dim AssVeb As String
    Dim Ser As String
    Dim Aff As String
    Dim Ritual As String
    Dim Intensive As String
    Dim Take As String
    Dim Be As String
    CommonDialog1.CancelError = True
    On Error GoTo GestioneErrori
    CommonDialog1.Filter = "Text files|*.txt"
    CommonDialog1.ShowOpen
    NomeDelTesto = CommonDialog1.FileName
    Open NomeDelTesto For Input As #1

    Input #1, Data
    Input #1, Agente
    Input #1, Salone
    Input #1, Telefono
    Input #1, Indirizzo
    Input #1, Mail
    Input #1, Durata
    Input #1, Prodotti1
    Input #1, Prodotti2
    Input #1, Prodotti3
    Input #1, AssOp
    Input #1, AssVeb
    Input #1, Ser
    Input #1, Aff
    Input #1, Ritual
    Input #1, Intensive
    Input #1, Take
    Input #1, Be

    Input #1, Impressioni

    Close #1

    Text1(0).Text = Data
    Text1(1).Text = Agente
    Text1(2).Text = Salone
    Text1(3).Text = Telefono
    Text1(4).Text = Indirizzo
    Text1(5).Text = Mail
    Text1(6).Text = Durata
    Text1(7).Text = Prodotti1
    Text1(8).Text = Prodotti2
    Text1(9).Text = Prodotti2
    Text1(10).Text = AssOp
    Text1(11).Text = AssVeb
    Text1(12).Text = Ser
    Text1(13).Text = Aff
    Text1(14).Text = Ritual
    Text1(15).Text = Intensive
    Text1(16).Text = Take
    Text1(17).Text = Be
    Text1(18).Text = Impressioni

    GestioneErrori:
    Exit Sub
    Close #1
    End Sub

    In grassetto ho evidenziato la mia difficoltà, ossia la possibilità di caricare nella textbox associata alla variabile Impressioni non solo una riga del file txt, ma anche più di una.
    Se ho ben capito l'errore dipende da Input, che carica solo una riga, ma anche processando con Do while...Loop e cose simili non sono riuscito in nulla. (Evidenzio che non mi da alcun errore, semplicemente non carica nulla

    Vi ringrazio per la disponibilità, e chiedo scusa se la spiegazione potrebbe sembrare poco chiara.

  2. #2
    Utente di HTML.it L'avatar di Boolean
    Registrato dal
    Oct 2005
    Messaggi
    758
    Il problema, secondo me, è la maniera in cui il contenuto della variabile Impressioni viene scritta sul file, al momento del suo inserimento.
    In pratica se il testo in essa immagazzinato contiene dei ritorni a capo, è ovvio che in fase di lettura questo possa provocare dei problemi, in quanto tutto ciò rende imprevedibile il numero di righe da leggere perchè la variabile abbia il contenuto corretto.

    Per ovviare al problema, sempre che l'inghippo risieda in questo, potresti prevedere una sostituzione dei caratteri di ritorno a capo, con un altro carattere (ad esempio il pipe |), che renderà possibile scrivere il testo su un'unica riga, ma conservando i "segnaposto" per i ritorni a capo.

    Al momento del caricamento della variabile, poco prima di visualizzare il testo nella TextBox, potrai provvedere alla sostituzione dei segnaposto con i caratteri di ritorno a capo.

    Boolean

  3. #3
    Ovviamente ci hai preso in pieno.
    Dunque una vera soluzione non c'è ma bisogna usare un'accorgimento?
    Il punto è che le "string" vengono immese dal textbox che col comando salva le scrive così come sono state immesse. Per cui dovrei fare un procedimento inverso tale che per ogni -a capo- immesso in quella textbox diventi = | in fase di output,
    di modo che in fase di input possa riconvertire?

    Grazie per la disponibilità.

  4. #4
    Utente di HTML.it L'avatar di Boolean
    Registrato dal
    Oct 2005
    Messaggi
    758
    Non per forza la cosa deve essere fatta in fase di input vero e proprio. Però sicuramente va fatta prima della fase di salvataggio.

    Per spiegarmi meglio:

    codice:
    PulsanteSalva_Click()
    Dim TestoDaSalvare As String
    TestoDaSalvare = Replace(TestoDigitato.Text, vbCrLf, "|")
    'Apro il File
    'Scrivo i dati
    'Chiudo il File
    End Sub
    Al caricamento, per visualizzare i dati, operazione inversa:

    codice:
    PulsanteApri_Click()
    Dim TestoDaMostrare As String
    'Apro il File
    'Leggo i dati
    TestoDaMostrare = Replace(TestoLettoDalFile, "|", vbCrLf)
    'Chiudo il File
    End Sub
    Boolean

  5. #5
    Ok, ti ringrazio per la tua grande disponibilità, dopo lavoro proverò ad implementare il codice, e se riesco lo posto completo, giacchè ho consultato manuali e girato il web per molti giorni, ma di un caso così specifico non ho mai trovato alcun esempio.
    Purtroppo per un neofita come me si va avanti ad esempi, e non so neanche se è il corretto modo di procedere.

  6. #6
    Grazie Boolean, ovviamente funziona, posto tutto lo script dei due button per i ciuchi come me che troveranno le stesse difficoltà:
    codice:
    Private Sub Salva_Click()
    Dim TestoDaSalvare As String
    TestoDaSalvare = Replace(Text1(18).Text, vbCrLf, "|")
    CommonDialog1.CancelError = True
    On Error GoTo GestioneErrori
    CommonDialog1.Filter = "Text Files|*.txt"
    CommonDialog1.ShowSave
    NomeDelTesto = CommonDialog1.FileName
    Open NomeDelTesto For Output As #1
    Print #1, Text1(0)
    Print #1, Text1(1)
    Print #1, Text1(2)
    Print #1, Text1(3)
    Print #1, Text1(4)
    Print #1, Text1(5)
    Print #1, Text1(6)
    Print #1, Text1(7)
    Print #1, Text1(8)
    Print #1, Text1(9)
    Print #1, Text1(10)
    Print #1, Text1(11)
    Print #1, Text1(12)
    Print #1, Text1(13)
    Print #1, Text1(14)
    Print #1, Text1(15)
    Print #1, Text1(16)
    Print #1, Text1(17)
    Print #1, TestoDaSalvare
    
    Close #1
    GestioneErrori:
    Exit Sub
    End Sub
    codice:
    Private Sub Apri_Click()
    Dim TestoDaMostrare As String
    Dim Impressioni As String
    Dim Data As String
    Dim Agente As String
    Dim Salone As String
    Dim Telefono As String
    Dim Indirizzo As String
    Dim Mail As String
    Dim Durata As String
    Dim Prodotti1 As String
    Dim Prodotti2 As String
    Dim Prodotti3 As String
    Dim AssOp As String
    Dim AssVeb As String
    Dim Ser As String
    Dim Aff As String
    Dim Ritual As String
    Dim Intensive As String
    Dim Take As String
    Dim Be As String
    CommonDialog1.CancelError = True
    On Error GoTo GestioneErrori
    CommonDialog1.Filter = "Text files|*.txt"
    CommonDialog1.ShowOpen
    NomeDelTesto = CommonDialog1.FileName
    Open NomeDelTesto For Input As #1
         
           Input #1, Data
         Input #1, Agente
         Input #1, Salone
           Input #1, Telefono
         Input #1, Indirizzo
           Input #1, Mail
           Input #1, Durata
           Input #1, Prodotti1
           Input #1, Prodotti2
          Input #1, Prodotti3
           Input #1, AssOp
           Input #1, AssVeb
           Input #1, Ser
           Input #1, Aff
          Input #1, Ritual
          Input #1, Intensive
          Input #1, Take
           Input #1, Be
      Input #1, Impressioni
        TestoDaMostrare = Replace(Impressioni, "|", vbCrLf)
    
      
    Close #1
    
    Text1(0).Text = Data
    Text1(1).Text = Agente
    Text1(2).Text = Salone
    Text1(3).Text = Telefono
    Text1(4).Text = Indirizzo
    Text1(5).Text = Mail
    Text1(6).Text = Durata
    Text1(7).Text = Prodotti1
    Text1(8).Text = Prodotti2
    Text1(9).Text = Prodotti2
    Text1(10).Text = AssOp
    Text1(11).Text = AssVeb
    Text1(12).Text = Ser
    Text1(13).Text = Aff
    Text1(14).Text = Ritual
    Text1(15).Text = Intensive
    Text1(16).Text = Take
    Text1(17).Text = Be
    Text1(18).Text = TestoDaMostrare
    
    GestioneErrori:
    Exit Sub
    Close #1
    End Sub
    Questo è quanto.
    Ancora Grazie
    Cordiali saluti Domenico

  7. #7
    Utente di HTML.it L'avatar di naki
    Registrato dal
    Feb 2009
    Messaggi
    52
    Ciao a tutti,
    comunque per questo genere di cose avresti fatto meglio a utilizzare un archivio random
    in questo caso avresti potuto salvare in un solo record tanti campi .

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 © 2025 vBulletin Solutions, Inc. All rights reserved.