کدی برای خواندن کاراکتر ها در وی بی

shahiboy

New Member
سلام. کدی برای خواندن کاراکتر ها در وی بی میخواستم.

من میخوام برنامه ای بنویسم که تعداد رکوردو در وی بی بخونه..یعنی ما یکم فایل تسکت به برنامه میدیم که توش چندتا اسم نوشته شده و اسم ها با کاما از هم جدا شدن.
برنامه باید بگه که چندتا اسم وجود داره داخل فایل (همون فایل پایل) از چه کدی باید استفاده کنم که تک تک کاراکتر ها رو بخونه تا شرط بزارم و بگم وقتی مثلا به " , " رسیدی 1 رکورد حساب کنه.

مرسی
 

the_king

مدیرکل انجمن
سلام. کدی برای خواندن کاراکتر ها در وی بی میخواستم.

من میخوام برنامه ای بنویسم که تعداد رکوردو در وی بی بخونه..یعنی ما یکم فایل تسکت به برنامه میدیم که توش چندتا اسم نوشته شده و اسم ها با کاما از هم جدا شدن.
برنامه باید بگه که چندتا اسم وجود داره داخل فایل (همون فایل پایل) از چه کدی باید استفاده کنم که تک تک کاراکتر ها رو بخونه تا شرط بزارم و بگم وقتی مثلا به " , " رسیدی 1 رکورد حساب کنه.

مرسی

ویژوال بیسیک کلاسیک (Visual Basic 6) یا ویژوال بیسیک Net. ؟

در ویژوال بیسیک کلاسیک اگر فایل متنی ASCII باشه، مثلا برای فایل C:\test.txt ، آنوقت names.Count تعداد رکورد ها است :
کد:
    Dim names As New Collection
    Dim name As String
    Dim ch As Byte
    Open "C:\test.txt" For Binary As #1
    Do
        If LOF(1) < Loc(1) Then Exit Do
        Get #1, , ch
        Select Case ch
            Case 13, 10, 44
                If Len(name) > 0 Then
                    names.Add name
                    name = ""
                End If
            Case Else
                name = name + Chr(ch)
        End Select
    Loop
    If Len(name) > 0 Then
        names.Add name
    End If
    Close #1

    Dim i As Long
    Dim s As String
    For i = 1 To names.Count
        s = s + names(i) + vbNewLine
    Next
    MsgBox s
 

shahiboy

New Member
ویژوال بیسیک کلاسیک (Visual Basic 6) یا ویژوال بیسیک Net. ؟

در ویژوال بیسیک کلاسیک اگر فایل متنی ASCII باشه، مثلا برای فایل C:\test.txt ، آنوقت names.Count تعداد رکورد ها است :
کد:
    Dim names As New Collection
    Dim name As String
    Dim ch As Byte
    Open "C:\test.txt" For Binary As #1
    Do
        If LOF(1) < Loc(1) Then Exit Do
        Get #1, , ch
        Select Case ch
            Case 13, 10, 44
                If Len(name) > 0 Then
                    names.Add name
                    name = ""
                End If
            Case Else
                name = name + Chr(ch)
        End Select
    Loop
    If Len(name) > 0 Then
        names.Add name
    End If
    Close #1

    Dim i As Long
    Dim s As String
    For i = 1 To names.Count
        s = s + names(i) + vbNewLine
    Next
    MsgBox s

با تشکر از پاسخگویی سریعتون .بله منظورم همون وی بی کلاسیک بود. الان این کد یک فایل text.txt که توش مثلا 3 تا اسم hasan,hosain,ali رو نوشته باشه میخونه و به ما تعداد رکوردها رو نشون میده(هر اسم=1رکورد)؟ یعنی میگه 3 تا اسم توی تکست بود؟ چون کد رو اجرا کردم و msgbox خالی نشون داد! وی بی من نسخه portable هست یعنی بخاطر وی بی هست که نمیتونه بخونه text رو یا کدش کامل نیست(البته فک کنم کامل باشه)؟
 

the_king

مدیرکل انجمن
با تشکر از پاسخگویی سریعتون .بله منظورم همون وی بی کلاسیک بود. الان این کد یک فایل text.txt که توش مثلا 3 تا اسم hasan,hosain,ali رو نوشته باشه میخونه و به ما تعداد رکوردها رو نشون میده(هر اسم=1رکورد)؟ یعنی میگه 3 تا اسم توی تکست بود؟ چون کد رو اجرا کردم و msgbox خالی نشون داد! وی بی من نسخه portable هست یعنی بخاطر وی بی هست که نمیتونه بخونه text رو یا کدش کامل نیست(البته فک کنم کامل باشه)؟

1) مطمئن شوید که اسم و مسیر فایل رو درست و کامل مشخص کرده اید، در کدی که من نوشته ام test.txt است نه text.txt، اگر شما فایل text.txt را ساخته اید،
در درایو \:C کپی اش کرده و مسیر فایل را در کد به C:\text.txt تغییر دهید.

2) مطمئن شوید که فایل را Unicode ذخیره نکرده اید، کد فایل های Unicode اندکی با ASCII فرق دارد و این کد صرفا با فایل های ASCII سازگار است.
 

shahiboy1

New Member
مرسی . فقط من این چند خط رو متوجه نشدم. میشه یه لفی بکنب این چند خطو توضیح بدی؟ آخه باید برنامه رو و نحوه حلشو توضیح بدم پیش استاد:shock:
البته با دستورات و آرایه ها آشنا هستم منظورم منطق و الگوریتم برنامست بیشتر مرسی .ممنون میشم توضیحی بدی :rose:

If LOF(1) < Loc(1) Then Exit Do Get #1, , ch Select Case ch Case 13, 10, 44 If Len(name) > 0 Then names.Add name name = "" End If Case Else name = name + Chr(ch) End Select Loop If Len(name) > 0 Then names.Add name End If Close #1
 

the_king

مدیرکل انجمن
مرسی . فقط من این چند خط رو متوجه نشدم. میشه یه لفی بکنب این چند خطو توضیح بدی؟ آخه باید برنامه رو و نحوه حلشو توضیح بدم پیش استاد:shock:
البته با دستورات و آرایه ها آشنا هستم منظورم منطق و الگوریتم برنامست بیشتر مرسی .ممنون میشم توضیحی بدی :rose:

کد:
   Do
این حلقه ای است که کاراکتر ها را داخلش پردازش می کنیم.
کد:
        If LOF(1) < Loc(1) Then Exit Do
اگر موقعیت در فایل (LOC) از طول فایل (LOF) بیشتر شده باشد به انتهای فایل رسیده ایم و از حلقه خارج می شویم.

کد:
        Get #1, , ch
کد ASCII کاراکتر را در ch می خوانیم.

کد:
        Select Case ch
            Case 13, 10, 44
کد کاراکتر هایی که پایان اسامی یا جداکننده شون را مشخص می کنه رو اینجا اعلام می کنیم، 10 و 13 کد کاراکتر های انتهای سطر اند و 44 کد ویرگول (کاما) است.
به هر کدام از اینها که برسیم رشته اسم قبلی به پایان رسیده.

کد:
                If Len(name) > 0 Then
                    names.Add name
                    name = ""
                End If
اگر اسمی دریافت شده که هنوز به لیست اضافه نشده، name شامل آن اسم است، به names اضافه اش می کنیم
و از داخل name پاک می کنیم.

کد:
            Case Else
                name = name + Chr(ch)
        End Select
اما اگر با کاراکتری مواجه شدیم که جزو کاراکتر های پایانی نیست، ادامه رشته اسم است و به انتهای رشته name
اضافه اش می کنیم.

کد:
    Loop
    If Len(name) > 0 Then
        names.Add name
    End If
وقتی از حلقه خارج می شویم که به انتهای فایل رسیده ایم. ممکن است اسمی در name باشد که هنوز به names
اضافه نشده، این مورد را بررسی می کنیم تا از قلم نیافتد.

کد:
    Close #1
فایل را می بندیم.
 

جدیدترین ارسال ها

بالا