PDA

View Full Version : Leggere un file...


ASyd
21-10-2003, 16:52
E' possibile leggere un determinato campo "chiamandolo" per la posizione in cui si trova, in un file sequenziale?

Ho letto una sintassi di questo tipo:

Input #numerofile, elencocampi

"elencocampi" può essere una cosa tipo "riga-campo1" o "riga-campo12" o "riga-campo40"?

Se si, com'è la sintassi corretta?

In caso non fosse possibile come posso ottenere un risultato simile?

tnx

matpez
21-10-2003, 17:53
Prima di tutto nn è Elenco campi ma cosi:

Input #numerofile, elencovariabili

c'è un po' di differenza :p


Quello che vuoi fare tu fai in due metodi (almeno secondo me), il primo leggere in una varibile stringa tutto il file riga per riga con l'isctruzione "Line Input #numerofile, nomevariabile", l'istruzione successiva potrebbe essere cosi: sFile= sFile & nomevaribile & vbcrlf

In questa maniera ti ricrei il file in una varibile e "giochi" con le stringhe...supponiamo che il tuo file sia del tipo:

riga1=ciao1
riga2=ciao2
riga3=ciao3

Per leggere riga 2 fai una cosa del genere (ti riproduco un pezzo di codice)


Option Explicit

Dim sFile As String

Private Sub Form_Load()

sFile = ""
sFile = sFile & "riga1 = ciao1" & vbCrLf
sFile = sFile & "riga2 = ciao2" & vbCrLf
sFile = sFile & "riga3 = ciao3" & vbCrLf

MsgBox (ValoreRiga("riga2"))

End Sub

Private Function ValoreRiga(ByVal sRiga As String) As String

Dim lLen As Long


lLen = InStr(sFile, sRiga)
lLen = lLen + Len(sRiga) + 3 'tolgo il carattere " = "

ValoreRiga = Mid(sFile, lLen, InStr(lLen, sFile, vbCrLf) - lLen)

End Function



Come seconda soluzione hai il metodo pià usato...cioè utilizzando le API di windows


Option Explicit

Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long

Public Sub WriteFileINI(ByVal sFile As String, ByVal sSezione As String, ByVal sChiave As String, ByVal sChiaveValore As String)

'scrittura file INI
Call WritePrivateProfileString(sSezione, sChiave, sChiaveValore, sFile)

End Sub

Public Function ReadFileINI(ByVal sFile As String, ByVal sSezione As String, ByVal sChiave As String, Optional ByVal sChiaveValoreDefault As String = "") As String

'lettura file INI
ReadFileINI = Space$(255)

Call GetPrivateProfileString(sSezione, sChiave, sChiaveValoreDefault, ReadFileINI, Len(ReadFileINI), sFile)

ReadFileINI = Left$(ReadFileINI, InStr(ReadFileINI, Chr$(0)) - 1)

End Function


Queste due funzioni leggono un qlc file formattato modello INI, cioè si imposta un file, si imposta la sezione (quella racchiusta tra due parentesi quadre), si imposta la chiave (nel tuo caso le righe) ed ti tornerà indietro il valore :)


ciaooooooooooooooo:p