vb6؛ چگونه میتوان در یک فایل متنی کلمۀ nd را شناسایی و با یک عدد جایگزین کرد؟

سلام به اعضاء گرامی فروم،

میخوام به کمک vb6 برنامه ای بنویسم و نیاز به راهنمایی دارم. مسئله م رو در ادامه توضیح میدم.
فولدری دارم حاوی فایلهایی با فرمتهای مختلف از جمله ascii. میخوام کارهای ذیل رو روی این فولدر انجام بدم:
1- همۀ فایلهای با پسوند ascii رو شناسایی کنم،
2- همۀ فایلهای با پسوند ascii رو با پسوند txt ذخیره کنم (بدون اینکه اسمشون رو تغییر بدم؛ فقط میخوام پسوند و فرمتشون تغییر کنه)،
3- هر یک از این فایلهای txt رو باز کنم و درون اونها کلمۀ nd رو با عدد 9999- جایگزین کنم (تعداد زیادی از این کلمه در داخل هر فایل هست).

ممنون میشم اگه راهنمایی بفرمایید.
 

the_king

مدیرکل انجمن
سلام به اعضاء گرامی فروم،

میخوام به کمک vb6 برنامه ای بنویسم و نیاز به راهنمایی دارم. مسئله م رو در ادامه توضیح میدم.
فولدری دارم حاوی فایلهایی با فرمتهای مختلف از جمله ascii. میخوام کارهای ذیل رو روی این فولدر انجام بدم:
1- همۀ فایلهای با پسوند ascii رو شناسایی کنم،
2- همۀ فایلهای با پسوند ascii رو با پسوند txt ذخیره کنم (بدون اینکه اسمشون رو تغییر بدم؛ فقط میخوام پسوند و فرمتشون تغییر کنه)،
3- هر یک از این فایلهای txt رو باز کنم و درون اونها کلمۀ nd رو با عدد 9999- جایگزین کنم (تعداد زیادی از این کلمه در داخل هر فایل هست).

ممنون میشم اگه راهنمایی بفرمایید.

پوشه ای که فایل های ascii داخلشون قرار داره رو مشخص می کنید و حتما کاراکتر \ رو در انتهای مسیر قرار می دهید :
کد:
    Dim folder As String
    folder = "D:\Your Folder\"

اسامی فایل های ascii رو در حلقه یکی یکی دریافت می کنیم :
کد:
    Dim s As String
    s = Dir(folder & "*.ascii", vbNormal)
    Do While Len(s) > 0


        s = Dir
    Loop

فایل ascii را برای خواندن و نمونه همون فایل ascii ولی با پسوند txt را برای نوشتن باز می کنیم :
کد:
        f = Left(s, InStrRev(s, ".")) & "txt"
        Open folder & s For Input As #1
        Open folder & f For Output As #2

سطر های متنی رو از فایل ascii یکی یکی می خوانیم و در فایل txt می نویسیم (ممکن است در این فاصله ویرایشی رویشان انجام شود)
کد:
        Do Until EOF(1)
            Line Input #1, t

            Print #2, t
        Loop

سطر هایی که در آنها nd وجود دارد را پیدا می کنیم، این nd ممکن است یک کلمه مجزا و یا جزئی از یک کلمه باشد :
کد:
            p = 0
            Do
                Do
                    p = InStr(p + 1, t, "nd")
                    If p > 0 Then

                    End If
                Loop While False
            Loop While (p > 0)

مواردی که nd یک کلمه مستقل نیست را نادیده می گیریم و مواردی که nd یک کلمه است را به 9999- تبدیل می کنیم :
کد:
                        If p > 1 Then
                            x = LCase(Mid(t, p - 1, 1))
                            If (x >= "a" And x <= "z") Then Exit Do
                        End If
                        If p < Len(t) - 1 Then
                            x = LCase(Mid(t, p + 2, 1))
                            If (x >= "a" And x <= "z") Then Exit Do
                        End If
                        t = Left(t, p - 1) & "-9999" & Mid(t, p + 2)

فایل ها را می بندیم و فایل ascii را حذف می کنیم :
کد:
        Close #1
        Close #2
        Kill folder & s

کد تکمیل شده :
کد:
[COLOR="#0000FF"]    Dim folder As String, s As String, f As String, t As String, x As String, p As Integer
    folder = "D:\Your Folder\"
    s = Dir(folder & "*.ascii", vbNormal)
    Do While Len(s) > 0
        f = Left(s, InStrRev(s, ".")) & "txt"
        Open folder & s For Input As #1
        Open folder & f For Output As #2
        Do Until EOF(1)
            Line Input #1, t
            p = 0
            Do
                Do
                    p = InStr(p + 1, t, "nd")
                    If p > 0 Then
                        If p > 1 Then
                            x = LCase(Mid(t, p - 1, 1))
                            If (x >= "a" And x <= "z") Then Exit Do
                        End If
                        If p < Len(t) - 1 Then
                            x = LCase(Mid(t, p + 2, 1))
                            If (x >= "a" And x <= "z") Then Exit Do
                        End If
                        t = Left(t, p - 1) & "-9999" & Mid(t, p + 2)
                    End If
                Loop While False
            Loop While (p > 0)
            Print #2, t
        Loop
        Close #1
        Close #2
        Kill folder & s
        s = Dir
    Loop
[/COLOR]
 

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

بالا