Newsgroup: it.comp.lang.visual-basic
Titolo: Lettura File Testo VB6

Ho un file di testo in cui i vari record sono separati da CR. Se apro
il file con il seguente codice ed immagazzino i dati nella stringa
strRiga:
Open strFileName For Input Access Read As #FileNum
Line Input #FileNum, strRiga
Mescolo tutti i record poichè per il Line Input la riga finisce al
CRLF. Ovviamente si tratat di unfile corposo e pesante per cui non
posso fare una successiva ricerca dei CR ed eventuale splittaggio.
Qualcuno di voi avrebbe una soluzione? Magari esiste un API che mi
condenta di sostituire al CR il CRLF?
Grazie Mille
Riccardo

Grazie Mille
Prova cosi
Dim FS As Object
Dim FileIni As Object
Set FS = CreateObject("Scripting.FileSystemObject")
Set FileIni = FS.OpenTextFile(NomeFileIni, 1, True, 0)
Do While FileIni.AtEndOfStream = False
      Riga = FileIni.readline
Loop

Ho la necessità di leggere un file di testo in cui ogni record è
separato da CR. Il problema è che usando le seguenti righe di codice:
Open strFileName For Input Access Read As #FileNum
Line Input #FileNum, strRiga
in strRiga viene inserito tutto il contenuto del file, come se fosse
una riga continua e non viene letto riga per riga, cosa che
normalmente succede se invece del solo carattere CR abbiamo CR e LF.
Ovviamente il problema è che il file che sto leggendo è molto pesante
pertanto questa operazione farebbe impallare il sitema, e sarebbe
quindi anche impossibile ricavare riga per riga cercando i vari CR
come delimitatori.
Qualcuno di Voi ha un prezioso consiglio? Magari qualcuno conosce un
API che esegue la sostituzione di un valore (CR) con un altro (CRLF)?
Grazie
Riccardo

 ha
scritto:

Vuoi usare le API?
Bene
____________________________
Private Declare Function CreateFile Lib "kernel32.dll" Alias "CreateFileA"
(ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As
Long, lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal
dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function ReadFile Lib "kernel32.dll" (ByVal hFile As Long,
lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As
Long, lpOverlapped As Any) As Long
Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long)
As Long
Private Declare Function WriteFile Lib "Kernel32" (ByVal hFile As Long, lpBuffer
As Any, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long,
lpOverlapped As Any) As Long
Private Declare Function FlushFileBuffers Lib "Kernel32" (ByVal hFile As Long)
As Long
Const GENERIC_READ = &H80000000, GENERIC_WRITE = &H40000000
Const FILE_SHARE_READ = &H1, FILE_SHARE_WRITE = &H2, OPEN_ALWAYS = 4,
FILE_ATTRIBUTE_NORMAL = &H80
Const OPEN_EXISTING = 3, CREATE_ALWAYS = 2
Const FILE_ATTRIBUTE_ARCHIVE = &H20
Dim BuffSym As String, MyFile as String, hFile as Long, retval as Long
BuffSym = ""
Fl& = FileLen( MyFile )
BuffSym = Space$(Fl&) ' make room in the buffer Legge una stringa di Fl&
caratteri
hFile = CreateFile(MyFile , GENERIC_READ, FILE_SHARE_READ, ByVal CLng(0),
OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, 0)
retval = ReadFile(hFile, ByVal BuffSym, Fl&, numread, ByVal CLng(0))
retval = CloseHandle(hFile)    'CHIUDI IL FILE
retval = FlushFileBuffers(hFile)
Replace(BuffSym , vbcr, vbcrlf)
Open MyFile For Output As #1
?#1,BuffSym 
Close
_________________
Non provato, ma potrebbe funzionare   ;-)
--
ciao
  Stefano

Scarface wrote:

Non ricordavo e ho fatto una prova: il tuo codice funziona PERFETTAMENTE.
Line Input interrompe correttamente la linea fermata da CR.
Non la interrompe invece se la linea è interrotta da LF (e non so perchè, 
forse a MS non piace proprio Linux...)
In questo caso credo che l'unico sistema sia un po' incasinato... leggi 
anzichè una linea alla volta un buffer, se contiene LF lo splitti su LF, la 
prima parte la concateni a linea(i), la seconda la mantieni in memoria, 
ricominci con la lettura del buffer.
Ciao