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

    [VB6] Leggere riga di file contenente anche \x00

    Ciao a tutti,

    ho la necessità di leggere un semplice file asci a lunghezza variabile riga per riga. Il problema è che a volte il file contiene il carattere "00" (esadecimale) anzichè il "20" (lo spazio).
    Tramite LineInput il carattere 00 viene perso, ovvero la variabile stringa in cui scarico la riga risulta + corta di un carattere rispetto alla riga del file di input. Per me è un problema visto che ogni riga, pur essendo un records a lunghezza a variabile, ha un suo tracciato record prestabilito.
    Ho la necessità quindi di riscrivere questa riga in un file di output senza alcuna modifica.

    Per ora ho in mente 2 soluzioni, ma ne erco una migliore:
    1)Preelaboro il file in modalità binary e sostituisco tutti i caratteri 00 che trovo con uno spazio (diventerebbe troppo lunga l'elaborazione del file).
    2) Apro il file in modalità binary, lo carico per intero in una variabile che vado a splittare (si tratta però di file piuttosto grossi, arrivano anche fino a 2GB, potrebbe non funzionare)

    Avete in mente altre soluzioni?

    Grazie!

  2. #2
    risolto...
    mentre in modalità binay o input la LineInput ha problemi con i caratteri null, utilizzando FileSystemObject (metodo ReadLine) il carattere Null viene mantenuto.

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,468
    Scusa, ma perche' non utilizzavi la Get per leggere il file in modalita' binaria?

  4. #4
    Originariamente inviato da oregon
    Scusa, ma perche' non utilizzavi la Get per leggere il file in modalita' binaria?
    Ho provato, se apro il file in modalità binary e utilizzo la lineinput, quando trova uno carattere NULL mi tronca la riga e si comporta come se fossero 2 righe diverse, ovvero al primo LineInput mi restituisce tutti i caratteri prima del NULL, al LineInput successivo mi restituisce tutti i caratteri dopo il NULL, quasi come se il NULL fosse VbCrLf (strano no?! Però ho fatto diverse prove...).
    Visto che si tratta di un file a lunghezza record variabile sono obbligato a leggere una riga alla volta (non un numero di bytes), quindi non potrei utilizzare nemmeno la "Get"... non proprio, potrei leggere un carattere alla volta, ma i tempi di elaborazione diventerebbero troppo lunghi.
    Oppure potrei leggere N bytes alla volta e splittarli in righe. Funzionerebbe, ma sarebbe troppo uno sbattimento visto che leggendo N bytes, quasi sicuro gli ultimi caratteri farebbero parte di una parte di riga, il che è uno sbattimento troppo grosso gestirlo.

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,468
    Ma se il file non e' tanto grande, potresti leggerlo in memoria con "una sola" Get, molto, molto velocemente ed ottenere le righe con un singolo, veloce, Split ...

  6. #6
    Originariamente inviato da oregon
    Ma se il file non e' tanto grande, potresti leggerlo in memoria con "una sola" Get, molto, molto velocemente ed ottenere le righe con un singolo, veloce, Split ...
    Probabilmente non hai letto bene il mio primo post, può succedere che a qualcuno scappi qualcosa, ma da Oregon proprio non me lo sarei mai aspettato

    Originariamente inviato da Luciano79
    Per ora ho in mente 2 soluzioni, ma ne erco una migliore:

    1)Preelaboro il file in modalità binary e sostituisco tutti i caratteri 00 che trovo con uno spazio (diventerebbe troppo lunga l'elaborazione del file).
    2) Apro il file in modalità binary, lo carico per intero in una variabile che vado a splittare (si tratta però di file piuttosto grossi, arrivano anche fino a 2GB, potrebbe non funzionare)
    Grazie comunque

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,468
    Beh ... sì ... l'ho letto solo un attimo dopo ...

    A questo punto, altre soluzioni che vedo implicano l'uso di API e quindi, va bene cosi' ...

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.