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

    FileSystemObject Lettura e scrittura su file testo

    Ciao a tutti!

    Innanzitutto piacere di conoscervi...è il mio primo post qui dentro. Dopo un po' di tempo passato a scervellarmi su una possibile soluzione ho deciso di cercare aiuto...

    La questione è la seguente:

    Devo aprire un file .txt costituito da una serie di righe: codAlfaNUmerico|N
    Devo effettuare un ciclo che, per ogni riga, legga la prima parte (codAlfaNumerico), effettui delle operazioni in base al valore assunto da tale stringa (se la seconda parte vale "N") e, una volta terminate, vada ad aggiornare la seconda parte da "N" a "Y". Il tutto deve essere fatto con un solo accesso al file.

    Il codice implementato fino ad ora è il seguente:

    Open sFileName For Input Read Write As #1
    While Not EOF(1)
    Line Input #1, sGUID
    'ReDim aRiga(1)
    'aRiga = newSplitFunction(sGUID,"|")
    'If aRiga(1) = "N" Then
    ....
    'End If
    ...
    'newcontent = aRiga(0) & "|Y"
    'Print #1, newcontent
    Wend
    Close #!

    Con il carattere " ' " indico il codice che ho aggiunto in un secondo tempo per tentare di risolvere.
    "Ovviamente", questa risoluzione non funziona nel senso che, con un accesso "Input" cerco poi di scrivere sul file con "Print"....questo dà errore.

    Vi spiego che vorrei evitare di dover portare l'informazione su un file di testo di supporto (sarebbe sicuramente semplice).
    Inoltre, l'aggiornamento che deve essere fatto dopo il lavoro su ciascuna riga mi serve per tener traccia di dove sono arrivato, in caso di stop durante l'esecuzione (questo è quello che voglio con l'utilizzo del suffisso "Y").

    C'è un qualche modo possibile per fare ciò, magari modificando le opzioni dell'Open?! Ho provato con Output (ma questo cancella il file appena lo apro) e con variazioni delle operazioni possibili (Read, Write, Read Write)...questo invece mi dà errore di sintassi ("expected As").

    Vi ringrazio per l'attenzione e spero di essermi spiegato bene


  2. #2
    Sto cercando di risolvere con Open file As Random...Qualcuno ne è pratico?

  3. #3
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Non si capisce perchè tu abbia messo nel titolo FileSystemObject, quando in realtà non lo usi...

    Comunque, ti consiglio di caricare tutto il file in una variabile stringa, poi puoi farci tutte le operazioni che vuoi.
    Alla fine ti basta riscrivere l'intero file.
    Puoi usare questa funzione per caricare il contenuto in una stringa:
    codice:
    Public Function LoadTextFile (byval sPathFile as string) As String
        Dim fnum As Integer
        fnum = FreeFile()
        Open filename For Input As #fnum
        LoadTextFile  = Input(LOF(fnum), fnum)
    End Function
    Nota: se il tuo file contiene caratteri di controllo devi usare Binary al posto di Input.
    Puoi usare la funzione così:

    codice:
    Dim sTesto As String
    sTesto = LoadTextFile(percorso_file)
    Per leggere riga per riga basta usare un'array e popolarlo con Split() utilizzando il carattere vbCrLf come separatore:

    codice:
    Dim sAr() As String
    sAr = Split(sTesto, vbCrLf)
    Ora puoi eseguire le tue operazioni riga per riga

    codice:
    Dim i As Integer
    For i = 1 to UBound(sAr)
        Rem Leggo la riga corrente
        Debug.Print sAr(i)
    Next i
    Alla fine salvi il file.
    Guarda che ho scritto 'al volo', quindi potrebbero esserci errori!

    Ciao

  4. #4
    Originariamente inviato da gibra
    Non si capisce perchè tu abbia messo nel titolo FileSystemObject, quando in realtà non lo usi...

    Comunque, ti consiglio di caricare tutto il file in una variabile stringa, poi puoi farci tutte le operazioni che vuoi.
    Alla fine ti basta riscrivere l'intero file.
    Puoi usare questa funzione per caricare il contenuto in una stringa:
    Ti ringrazio per il consiglio...però ho bisogno di non dover riscrivere l'intero file, ma solo una riga alla volta.

    Ho provato ad implementare la seguente soluzione:


    Dim Elenco As String
    Dim fHnd As Integer
    fHnd = FreeFile
    Open sFileName For Random As fHnd Len = 40

    lunghFile = LOF(fHnd)
    NumRecords = lunghFile\40

    'non so se serve però mi crea una stringa di 40 caratteri
    Elenco = " "


    recnumber = 1

    Do While Not EOF(fHnd)
    'carica i dati in variabile di supporto
    Get fHnd, NumRecords, Elenco
    ReDim aRiga(1)
    aRiga = newSplitFunction(Elenco,"|") 'è una funzione che splitta la stringa
    If aRiga(1) = "N" Then
    sGUID = aRiga(0)


    ....passo sGUID all'algoritmo

    aRiga(1) = "Y"
    Elenco = aRiga(0) & aRiga(1)
    Put fHnd, recnumber, Elenco
    End If
    recnumber = recnumber + 1
    Loop
    Close fHnd

    La soluzione mi sembrava corretta ma al Get mi dà il seguente errore fin dal primo ciclo: Record Length Exceeded. Si tenga presente che il mio file sorgente di partenza sFileName è costituito da tante (di volta in volta diverse) righe "codicealfanumerico(36 caratteri)|N"
    ...quindi ho 38 caratteri su una riga + i 2 caratteri per andare a capo (almeno me lì conta così in debug)....Quindi ho impostato 40 come lunghezza del singolo record da caricare.
    Dove potrebbe essere l'errore? Non riesco a spiegarmi l'exceeded della memoria.

  5. #5
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da albyped81
    Ti ringrazio per il consiglio...però ho bisogno di non dover riscrivere l'intero file, ma solo una riga alla volta.
    Non puoi! Forse non l'hai ancora capito...?

    Ciao

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.