hn4u @ Last updated 21/11/04 22:42
Go to my homepage at http://4u.jcisio.com
Full version available at http://4u.jcisio.com/r/article370.htm

Vovisoft

Tập tin

Làm sao đọc từ một Text file

Sau đây là một thí dụ đọc data từ một Textfile tên "Friends.txt" nằm trong cùng folder với chương trình đang xử lý.

Mã lệnh (VB)
Sub Form_Load()
Dim strALine as string
Dim strLocalFolder as string
Dim strFullPathFileName as string
strLocalFolder = App.path
If Right(strLocalFolder,1) <> "\" then
strLocalFolder = strLocalFolder & "\"
End If
strFullPathFileName = strLocalFolder & "Friends.txt"
Open  strFullPathFileName for input as #1
lstFriend.Clear  ' Clear ListBox lstFriend
Do While Not EOF(1)  ' Read till End-Of-File
Line Input #1, strALine  ' Read a line
lstFriend.AddItem  strALine  'Add that line to ListBox
Loop
Close #1  ' Close the file
End Sub

Làm sao chứa vào một Text file

Sau đây là một thí dụ đọc data từ một Textfile tên "Friends.txt" nằm trong cùng folder với chương trình đang xử lý.

Mã lệnh (VB)
Sub Form_Load()
Dim i
Dim strLocalFolder as string
Dim strFullPathFileName as string
strLocalFolder = App.path
If Right(strLocalFolder,1) <> "\" then
strLocalFolder = strLocalFolder & "\"
End If
strFullPathFileName = strLocalFolder & "Friends.txt"
Open  strFullPathFileName for output as #2
For i=0 to lstFriend.Listcount-1
Print #2, lstFriend.List(i)
Next
Close #2  ' Close the file
End Sub

Làm sao Log một dữ kiện vào một Text file ?

Nhiều lúc ta cần Log vào trong một LogFile các biến cố xãy ra trong khi nhu liệu đang chạy để sau nầy kiểm lại tình hình.

Mã lệnh (VB)
Sub LogEvent(ByVal GivenFileName, ByVal msg As String, HasFolder As Boolean, IncludeTimeDate As Integer)
' Append event message Msg to a text Logfile GivenFileName
' If GivenFileName is fullPathName then HasFolder is true
' IncludeTimeDate = 0  : No Time or Date
'                 = 1  :  Prefix with Time
'                 = 2  : Prefix with Time and Date
Dim FileNo, LogFileName, theFolder
If HasFolder Then
LogFileName = GivenFileName
Else
If Right(App.Path, 1) <> "\" Then
theFolder = App.Path & "\"
Else
theFolder = App.Path
End If
LogFileName = theFolder & GivenFileName
End If
FileNo = FreeFile
If Dir(LogFileName) <> "" Then
Open LogFileName For Append As FileNo
Else
Open LogFileName For Output As FileNo
End If

Select Case IncludeTimeDate
Case 0  ' No Time or Date
Print #FileNo, Msg
Case 1  ' Time only
Print #FileNo, Format(Now, "hh:nn:ss ") & Msg
Case 2  ' Date & Time
Print #FileNo, Format(Now, "dd/mm/yyyy hh:nn:ss ") & Msg
End Select

Close FileNo
End Sub

Coi chừng trường hợp LogEvent được gọi bởi hai Sub khác nhau cùng một lúc. Khi  Sub thứ nhì muốn mở LogFileName thì bị error vì LogFileName đã bị Sub thứ nhất mở rồi.  Trong trường hợp đó ta có thể sữa LogEvent lại cho nó AddItem Msg vào một Listbox rồi giao nhiệm vụ viết xuống File cho một Process chuyên viên thứ ba.

Làm sao đọc/viết value của một Variable từ một "ini" file ?

Có khi ta muốn đọc value của một variable chứa trong một file có extension là "ini" (còn gọi là configuration file) nằm trong folder C:Windows hay c:WinNT.  Trong file nầy những cặp variable=value nằm trong các sections, mỗi Section header có dạng như [System Var].  Thí dụ "protocol.ini" chứa ngững dòng sau:

</p> <p>[ndishlp$] &nbsp; <= &nbsp;section header</p> <p>DriverName=ndishlp$ &nbsp;<= cặp variable=value</p> <p>[protman$] &nbsp; <= &nbsp;section header</p> <p>DriverName=protman$ &nbsp; <= cặp variable=value</p> <p>priority=ndishlp$ &nbsp; <= cặp variable=value</p> <p>[data] &nbsp; <= &nbsp;section header</p> <p>version=v4.10.1998 &nbsp; <= cặp variable=value</p> <p>

Dùng Function ReadPrivateProfileString sau đây để đọc value của VarName$ dưới section header SectionHeader$ từ file Filename$:

Mã lệnh (VB)
Function ReadPrivateProfileString( SectionHeader$, VarName$, Filename$) As String
' Read data from an Ini file in default Windows directory
' Filename$ : The Ini file name   eg: myProg.ini
' SectionHeader$ : The Section name in Ini file eg: [System Var]
' VarName$  : Variable name whose data value we want to get

Dim RetStr As String
RetStr = String(255, Chr(0)) ' Prepare a string of 255 zeros (number).
'Get Requested Information
ReadPrivateProfileString = Left(RetStr, GetPrivateProfileString(SectionHeader$, ByVal
VarName$, "", RetStr, Len(RetStr), Filename$))
End Function

Tương tự như vậy, ta có thể viết value mới của một variable vào trong một "ini" file như sau:

Mã lệnh (VB)
Dim ErrCode
ErrCode = WritePrivateProfileString(SectionHeader$, VarName$,newValue, Filename$)

Nhớ để hai câu tuyên bố cho các API Function ta cần vào một Basic Module:

Mã lệnh (VB)
Public 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
Public Declare Function WritePrivateProfileString& Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal AppName$, ByVal KeyName$, ByVal keydefault$, ByVal Filename$)


hainam4u @ Last updated 21/11/04 22:42
Go to my homepage at http://4u.jcisio.com