PDA

View Full Version : سوال: ویرایش فایل text با ویژوال بیسیک



R2du-soft
چهارشنبه 11 مرداد 1391, 17:14 عصر
سلام
چطوری میشه با دستور ویژوال بیسیک یه فایل text رو ویرایش کرد و چیزی درونش قرار دارد یا چیزی حذف کرد؟
یا به جای یک کلمه کلمه دیگه ای قرار داد؟
مرسی

R2du-soft
چهارشنبه 11 مرداد 1391, 17:53 عصر
یا اگه محتویات فایل تکست داخل یک تکست باکس کپی بشه و ویرایش بشه و بعد به عنوان فایل تکست ذخیره بشه اینم خوبه
راهی هست؟

SlowCode
چهارشنبه 11 مرداد 1391, 18:02 عصر
برای باز کردن یه متن 2 تا راه داری:
1- Open "C:\Text.txt" For Input As #1
While Not EOF(1)
Input #1, a
Text1.Text = Text1.Text & a
Wend
Close #1

2- استفاده از ریچ تکست باکس، که خیلی راحت تره، مثال:
RichTextBox1.LoadFile "C:\Text.txt"
-----------------------
بعد میتونی با تابع instr کلمه مورد نظرت رو جستجو کنی و یا با تابع replace جایگزینی کنی.

R2du-soft
چهارشنبه 11 مرداد 1391, 18:25 عصر
برای ویرایش چی؟ مثلا بگم هرچی reza هست به جاش R2du-soft بزار؟

محسن واژدی
چهارشنبه 11 مرداد 1391, 18:41 عصر
برای ویرایش چی؟ مثلا بگم هرچی reza هست به جاش R2du-soft بزار؟ سلام
از تابع Replace استفاده کنید
برای مثال:
Text1 = Replace(Text1, "reza", "R2du-soft", , , vbTextCompare)

برای وارد کردن یکباره فایل متنی هم میتوانید از کدی مشابه زیر استفاده کنید: Private Sub Command1_Click()

Open "c:\1.txt" For Input As #1

Text1 = Input(LOF(1), 1)

Close

End Sub

موفق باشید

R2du-soft
چهارشنبه 11 مرداد 1391, 21:57 عصر
خوب داداشی محسن اگه بخوایم فایل تکست مستغیم از طریق کدی که داخل برناممون هست ویراش بشه چی؟

محسن واژدی
چهارشنبه 11 مرداد 1391, 22:10 عصر
اگه بخوایم فایل تکست مستغیم از طریق کدی که داخل برناممون هست ویراش بشه چی؟ میتوانیم فایل متنی را وارد و آنرا بجای انتقال به Text-Box در متغیری ذخیره و پس از تغییر مجددا تغییرات را در همان فایل ذخیره کنیم
کد زیر را بررسی کنید: Private Sub Command1_Click()
Dim sStr$, sFile$
sFile$ = "c:\1.txt"
Open sFile$ For Input As #1
sStr$ = Input(LOF(1), 1)
Close #1
sStr$ = Replace(sStr$, "reza", "R2du-soft", , , vbTextCompare)
Open sFile$ For Output As #1
Print #1, sStr$
Close #1
End Sub


موفق باشید

R2du-soft
جمعه 13 مرداد 1391, 17:18 عصر
سلام

دستور




Private Sub Command1_Click()
Dim sStr$, sFile$
sFile$ = "c:\1.txt"
Open sFile$ For Input As #1
sStr$ = Input(LOF(1), 1)
Close #1
sStr$ = Replace(sStr$, "reza", "R2du-soft", , , vbTextCompare)
Open sFile$ For Output As #1
Print #1, sStr$
Close #1
End Sub






اگه تو فایل تکستمون خیلی پر باشه ، ارور میده و جایگزین نمیکنه !!!!
باز میخوام که مستقیم ویرایش بشه.
چطور میشه درستش کرد؟

R2du-soft
شنبه 14 مرداد 1391, 01:05 صبح
کسی نیست راهمایی کنه؟

محسن واژدی
شنبه 14 مرداد 1391, 01:09 صبح
اگه تو فایل تکستمون خیلی پر باشه ، ارور میده و جایگزین نمیکنه !!!!
باز میخوام که مستقیم ویرایش بشه.
چطور میشه درستش کرد؟
سلام علیکم
متن خطا را هم در صورت امکان ضمیمه کنید
کد در فایل های متنی تا حجم ~5MB مشکلی نداشت (حجم بیشتر را تست نکرده ام، البته بسته به حجم فایل سرعت بارگذاری تغییر میکند)

موفق باشید

R2du-soft
شنبه 14 مرداد 1391, 01:21 صبح
run-time error '62':
input past end of file
مرسی گلم

______________
الان چک کردم دیدم مشکل از خط


sStr$ = Input(LOF(1), 1)


هست نمیدونم چشه!!!

موقعی که کد رو تو دکمه در فرم خالی مینویسیم باید چیزی هم داخل فرم بزاریم؟
یا فقط کد رو داخل دکمه بزاریم اوکی هست؟

R2du-soft
شنبه 14 مرداد 1391, 11:29 صبح
دوستان کسی نیست یه کمکی به ما بکنه؟

SlowCode
شنبه 14 مرداد 1391, 15:51 عصر
run-time error '62':
input past end of file
این خطا زمانی رخ میده که به آخر فایل رسیده باشی، یعنی دیگه چیزی واسه خوندن وجود نداره. ولی من توی کد آقای واژدی به همچین خطایی بر نخوردم.


موقعی که کد رو تو دکمه در فرم خالی مینویسیم باید چیزی هم داخل فرم بزاریم؟
یا فقط کد رو داخل دکمه بزاریم اوکی هست؟

بله اوکی هست و چیزی نمی خواد.

R2du-soft
شنبه 14 مرداد 1391, 16:46 عصر
واسه من که عمل نمیکنه
با دستور



RichTextBox1.LoadFile "C:\Text.txt"هم نمیشه که فایل رو بخونم !!!!!!!!!

کد مشابه دیگه ای وجود نداره؟

محسن واژدی
شنبه 14 مرداد 1391, 22:32 عصر
run-time error '62':
input past end of file سلام علیکم گاهی اوقات نشانه EOF در یک فایل متنی وجود دارد (در هرجای فایل) که در اینصورت در صورت استفاده از Input به خطای فوق برخورد می کنیم، برای حل این مشکل دو راه در پیش رو داریم: 1- محتویات فایل متنی فعلی را copy و آنرا در یک notepad جدید paste و ذخیره کنیم 2- محتویات فعلی را با دستور Line-Input وارد کنیم: Public Function TextFileContents(sFilePath$) As String
On Error Resume Next
Dim iFF%, sLC$
iFF% = FreeFile
Open sFilePath$ For Binary As iFF%
Do Until EOF(iFF%)
Input #iFF%, sLC$
TextFileContents = TextFileContents & sLC$ & vbNewLine
Loop
Close iFF%
End Function
این تابع را در ماژول کد یا فرم کپی کنید

برای مثال: MsgBox TextFileContents("c:\1.txt") استفاده از Input در دسترسی Binary روشی نامتعارف است اما در غیر این روش نمیتوانیم کل فایل را بارگذاری کنیم، البته میتوانیم فایل را با Input باز و با استفاده از Line-Input خطوط فایل را وارد کنیم اما استفاده از Line-Input تنها موجب جلوگیری این خطای Error(62) میشود وگرنه با رسیدن حلقه به این نشانگر EOF مثبت و حلقه خاتمه میابد و چه بسا که این نشانگر در جایی بجز انتهای فایل متنی باشد و تنها نیمی از فایل بارگذاری شود

موفق باشید

R2du-soft
شنبه 14 مرداد 1391, 23:46 عصر
با اجرای دستورات بالا برنامه قفل میکنه حتی اگه تو فایل 1.txt یک کلمه باشه!!!!

arenaw
یک شنبه 15 مرداد 1391, 00:10 صبح
از این استفاده کن ببین مشکلت حل میشه؟

Public Function OpenTextFile(ByVal FilePath As String) As String
Dim FFile As Byte
Dim CurByte As Byte
Dim i As Variant
FFile = FreeFile()
Open FilePath For Binary As #FFile
For i = 1 To FileLen(FilePath)
Get #FFile, i, CurByte
OpenTextFile = OpenTextFile & Chr(CurByte)
Next i
Close #FFile
End Function

R2du-soft
یک شنبه 15 مرداد 1391, 01:16 صبح
از این استفاده کن ببین مشکلت حل میشه؟

Public Function OpenTextFile(ByVal FilePath As String) As String
Dim FFile As Byte
Dim CurByte As Byte
Dim i As Variant
FFile = FreeFile()
Open FilePath For Binary As #FFile
For i = 1 To FileLen(FilePath)
Get #FFile, i, CurByte
OpenTextFile = OpenTextFile & Chr(CurByte)
Next i
Close #FFile
End Function


جایگزاری باید کنم تو کد بالا؟
چیز دیگه ای نمیخواد؟!

arenaw
یک شنبه 15 مرداد 1391, 01:27 صبح
شما اینو بالای فرمت بذاز (تو قسمت جنرال)

بعد اینجوری ازش استفاده کن :

Text1.Text = OpenTextFile("C:\1.txt")

R2du-soft
یک شنبه 15 مرداد 1391, 01:39 صبح
شما اینو بالای فرمت بذاز (تو قسمت جنرال)

بعد اینجوری ازش استفاده کن :

Text1.Text = OpenTextFile("C:\1.txt")


مرسی گلم
بله کد درست عمل میکنه اما به جای متن داخل فایل تکستم
اینو مینویسه



ÿþ

!!!!!!!!!

درست بشو نیست!!؟!!

R2du-soft
یک شنبه 15 مرداد 1391, 01:54 صبح
با این کد





Dim FileGet As String * 1
Dim Counter As Long
Open "C:\1.txt" For Binary As 1
For Counter = 1 To LOF(1)
Get 1, , FileGet
Text1.Text = Text1.Text + FileGet
Next
Close



قسمت کمی ار متن نمایش داده میشه ولی نه کاملش

محسن واژدی
یک شنبه 15 مرداد 1391, 19:27 عصر
با اجرای دستورات بالا برنامه قفل میکنه حتی اگه تو فایل 1.txt یک کلمه باشه!!!!

برنامه قفل نشد، حتی با وجود یک کاراکتر و یک کلمه در فایل!

R2du-soft
چهارشنبه 18 مرداد 1391, 01:22 صبح
با سلام و تشکر از تمامی دوستان که منو تو این پست همراهی کردن و کمک کردن بهم.
تمامی کدهایی که دوستان قرار دادن برای چیزی که من میخواستم کار نکرد.
بالاخره پس از گشت و گذارهای پی در پی تونستم که چیزی که میخوام رو پیدا کنم و گفتم که اونو برای شما عزیزان قرار بدم شاید یروز یکی مثل من بهش خیلی نیاز داشت.

با کد زیر میتونید 1 فایل تکست رو بدون باز کردن ویرایش و چیزی که میخواید رو به جای چیز دیگه بزارید

در برنامه اول تابع زیر (ReadFile) را قرار میدهیم:




Private Function ReadFile(ByVal Path As String) As String
Dim Buffer() As Byte
Dim IDCode As Integer
On Error Resume Next
Open Path For Binary As #1
If LOF(1) > 0 Then
Get #1, 1, IDCode
If IDCode = &HFEFF Then
If LOF(1) > 2 Then
ReDim Buffer(0 To LOF(1) - 3) As Byte
Get #1, 3, Buffer
ReadFile = Buffer
Else
ReadFile = ""
End If
Else
ReDim Buffer(0 To LOF(1) - 1) As Byte
Get #1, 1, Buffer
ReadFile = StrConv(Buffer, vbUnicode)
End If
Else
ReadFile = ""
End If
Close #1
End Function




سپس تابع SaveFile را قرار میدهیم:





Private Sub SaveFile(ByVal Path As String, ByVal Text As String, Optional ByVal Unicode As Boolean)
Dim Buffer() As Byte
Dim IDCode As Integer
On Error Resume Next
Open Path For Output As #1
Close #1
Open Path For Binary As #1
If Len(Text) > 0 Then
If Unicode Then
IDCode = &HFEFF
Buffer = Text
Put #1, 1, IDCode
Put #1, 3, Buffer
Else
Buffer = StrConv(Text, vbFromUnicode)
Put #1, 1, Buffer
End If
End If
Close #1
End Sub





و سپس فرمان ویرایش فایلمان را در یک دکمه




Private Sub Command1_Click()

Dim s As String
s = ReadFile("C:\1.txt")
s = Replace(s, "reza", "r2du-soft")
SaveFile "C:\1.txt", s, True

End Sub



کار تمام است زمانی که برنامه اجرا شود و بر وری دکمه کلیک کنیم فایل txt.1 که در درایو c قرار دارد ویرایش میشود و هرچه نام reza در فایل باشد به r2du-soft تغییر میکند و باز با همان نام 1.txt ذخیره میشود.





با تشکر از تمامی اساتید که منو راهنمایی کردن :قلب:

arenaw
چهارشنبه 18 مرداد 1391, 03:31 صبح
فکر میکنم این کدهایی که شما گذاشتین برای تکست های یونیکد هستش
اگه نوع فایلتون ANSI باشه تمام کدهایی که تو پستهای قبل بود جواب میدادن احتمالا!
(چون به نظر میرسه متن تکستتون اینگیلیسی هستش استفاده از یونیکد زیاد کارایی نداره و فقط چن بایت اول فایل اشغال میشه (همون IDCode تو کدهایی که گذاشتین) + اینکه اصلا بعید میدونم ویبی بتونه متون زبان های دیگه مثل فارسی رو به این راحتی به یونیکد ترجمه کنه)

به هر حال موفق باشید

elahe321
یک شنبه 12 بهمن 1393, 08:40 صبح
سلام
دوستان من میخاستم به کمک ویژوال بیسیک 1 فایل txt را دریافت کنم بعد از دریافت 1 شماره اشتراک 10 رقمی را سرچ کنم و اگه تو فایل txt وجود داشت اون سطر پاک بشه میشه کمکم کنید؟