السلام عليكم...
* أعتذر من أخي Vb_Coder لأني كنت أجهز الرد قبل أن ألاحظ مشاركته :o و على أية حال "في الإعادة إفادة".
بالطبع يمكن ذلك.
اكتب الدالة التالية في القسم العام:
كود :
Private Function ReadLineOfFile(ByVal AFilePath As String, ByVal ALineIndex As Long) As String
Dim FNum As Integer
Dim Idx As Long
Dim ALine As String
Dim MsgTxt As String
On Error GoTo ReadLineOfFile_Err
ReadLineOfFile = ""
If ALineIndex < 0 Then Err.Raise vbObjectError + 1001, "IO.ReadLineOfFile", "Negative line numbers not allowed"
ALine = ""
Idx = 0
FNum = FreeFile
Open AFilePath For Input As #FNum
Do While Idx <= ALineIndex
Line Input #FNum, ALine
Idx = Idx + 1
Loop
Close #FNum
ReadLineOfFile = ALine
Exit Function
ReadLineOfFile_Err:
Close #FNum
MsgTxt = "حدث خطأ عند محاولة قراءة سطر من الملف." & vbCrLf & vbCrLf & "رسالة الخطأ:" & vbCrLf & Err.Description
MsgBox MsgTxt, vbExclamation Or vbMsgBoxRight Or vbMsgBoxRtlReading
End Function
* حيث AFilePath هو مسار الملف، و ALineIndex هو رقم السطر.
* لاحظ أن الدالة تعتبر أن ترقيم الأسطر يبدأ بالصفر، أي أن السطر الأول رقمه 0، و السطر الثاني رقمه 1، و السطر الثالث رقمه 2، ... إلخ.
و لقراءة السطر المطلوب قم باستدعاء الدالة كالتالي مثلاً (السطر الخامس):
كود :
Private Sub Command1_Click()
Text2.Text = ReadLineOfFile("E:\NameList.txt", 4)
End Sub
*** اقتراح:
إذا كنت ستستخدم الدالة بشكل متكرر لقراءة بعض الأسطر فربما يكون من الأسرع و الأسهل قراءة كامل أسطر الملف في مصفوفة ثم قراءة الأسطر من المصفوفة. لعمل ذلك اكتب الدالة التالية في القسم العام:
كود :
Private Function ReadAllLinesOfFile(ByVal AFilePath As String) As Variant
Dim FNum As Integer
Dim MsgTxt As String
Dim ResultStr As String
On Error GoTo ReadAllLinesOfFile_Err
ReadAllLinesOfFile = Null
FNum = FreeFile
Open AFilePath For Input As #FNum
ResultStr = Input(LOF(FNum), #FNum)
Close #FNum
ReadAllLinesOfFile = Split(ResultStr, vbCrLf)
Exit Function
ReadAllLinesOfFile_Err:
Close #FNum
MsgTxt = "حدث خطأ عند محاولة القراءة من الملف." & vbCrLf & vbCrLf & "رسالة الخطأ:" & vbCrLf & Err.Description
MsgBox MsgTxt, vbExclamation Or vbMsgBoxRight Or vbMsgBoxRtlReading
End Function
في هذه الحالة فإن الدالة ReadAllLinesOfFile تعيد قيمة من النوع Variant يحتوي على مصفوفة يبدأ ترقيم عناصرها بالصفر (الدالة تعيد Null في حالة حدوث خطأ).
و يتم استعمالها كالتالي:
كود :
Private Sub Command1_Click()
Dim MyList As Variant
MyList = ReadAllLinesOfFile("E:\NameList.txt")
If Not IsNull(MyList) Then
Text2.Text = MyList(3)
End If
End Sub
أي نقوم بتعريف متغير لتخزين المصفوفة ثم نستدعي الدالة ثم نتأكد من أن القيمة المعادة ليست Null. لاحظ أننا بعد استدعاء الدالة استعملنا المصفوفة MyList للوصول إلى الأسطر.
نرجو الاستفادة و السلام.