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

    Leggere file con record a lunghezza fissa

    Ciao a tutti,
    ho bisogno di leggere un file di dati anagrafici sapendo che la lunghezza dei record (che non conosco a priori) è sempre uguale. Il problema è che non devo leggere tutti i record, ma devo poter leggere direttamente il record N. Non potendo scrivere una struttura dati a lunghezza fissa (perchè la lunghezza del record la calcolo in runtime), non riesco ad utilizzare la modalità Random.
    Lo scopo è fare una ricerca dicotomica all'interno del file.
    Qual'è la soluzione più veloce (in termini di tempo in runtime)?

  2. #2
    a me viene in mente di usare la modalità binaria
    aggiustando la dimensione del buffer quando conosco la lunghezza del record
    ...qualcosa tipo:
    codice:
    Dim inf As Integer
    Dim j As Long
    Dim sTmp As String
    
    Dim Buffer() As Byte
    
    ReDim Buffer(1 To 1)
    
    inf = FreeFile
    Open "c:\temp\buffer.txt" For Binary As #inf  '123456789012345678
    
    Get #inf, 2, Buffer
    sTmp = Chr(Buffer(1))
    Debug.Print sTmp
    
    'leggo  4 byte alla volta
    ReDim Buffer(1 To 4)
    
    Get #inf, 5, Buffer
    sTmp = ""
    For j = LBound(Buffer) To UBound(Buffer)
        sTmp = sTmp & Chr(Buffer(j))
    Next j
    Debug.Print sTmp
    
    Get #inf, 1, Buffer
    sTmp = ""
    For j = LBound(Buffer) To UBound(Buffer)
        sTmp = sTmp & Chr(Buffer(j))
    Next j
    Debug.Print sTmp
    
    Close #inf

  3. #3
    Grazie!!!
    E' possibile anche leggere direttamente in una variabile di tipo string...
    codice:
    Stringa = Space(n) ' n = lunghezza del record
    get #1, n * (RecordDaLeggere - 1) + 1, Stringa
    ... si vede che oggi ho la testa tra le nuvole...
    grazie per l'ottimo spunto!

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.