PDA

View Full Version : مشکل با تابع Replace



gm.sara
دوشنبه 14 دی 1388, 15:00 عصر
سلام به دوستان
من می خوام از رشته ای که دارم کل کاراکتر های space را حذف کنه. از تابع replace استفاده کردم، در حالت عادی جواب می ده، ولی این بار من توی برنامم یک فایل متنی را open کردم، و اول کار هم System.IO، System.IO.File تو این حالت دیگه از من رشته نمی خواد مسیر فایل مبدا و مقصد را می خواد، کسی می دونه مشکل چیه؟ یا راه حل دیگه ای سراغ دارید؟

من باید چه کار کنم؟

saied_genius
دوشنبه 14 دی 1388, 16:31 عصر
من فکر مي کنم شما بايد اطلاعات فايل متني رو توي يک متغيري که امکان replace متن رو داشته باشه بريزيد و پس از جايگزيني متن ، دوباره آنرا به فايل منتقل کنيد.

براي اين کار مي توانيد از :

System.Text.StringBuilder
استفاده کنيد.

سوالي بود در خدمتم.

موفق باشيد.

saied_genius
دوشنبه 14 دی 1388, 16:36 عصر
اين هم يک راه حل:

http://www.developerfusion.com/code/1723/replace-text-in-textbox-or-file/

موفق باشيد.

saied_genius
دوشنبه 14 دی 1388, 16:40 عصر
اين هم يک راه حل:


Dim fi As New System.IO.FileInfo("c:\test.txt")
fi.OpenText().ReadToEnd().Replace("الف", "ب")

موفق باشيد.

Navid Asadi
دوشنبه 14 دی 1388, 19:16 عصر
بهترین راه استفاده از strings.repalce به جای Replace خالی هستش... از trim هم میتونی استفاده کنی...

gm.sara
سه شنبه 15 دی 1388, 07:47 صبح
ممنون از دوستان
جواب هاتون کارم و راه انداخت.

gm.sara
سه شنبه 15 دی 1388, 08:10 صبح
اين هم يک راه حل:


Dim fi As New System.IO.FileInfo("c:\test.txt")
fi.OpenText().ReadToEnd().Replace("الف", "ب")

موفق باشيد.


دوست عزیز من این راه را امتحان کردن برنامه مشکلی نداشت ولی کاری را که خواسته بودم انجام نداد، می دونید مشکل از کجاست؟
یه سوال دیگه آخر کار بخوام فایل را آزاد کنم باید چه کار کنم، گزینه close که نداره؟

saied_genius
سه شنبه 15 دی 1388, 09:54 صبح
از نظر close کردن ، هيچ نيازي نيست ، خودش اتوماتيک بر حسب نياز از منابع استفاده مي کند و هنگامي که نياز نداشته باشد ، منابع را آزاد مي کند.

از نظر جايگزين نکردن ، من بررسي کردم ، ظاهراً با فارسي مشکل دارد.

مي گردم اگر راه حلي برايش پيدا کردم مي گويم ، در غير اينصورت از راه هاي ديگر استفاده کنيد.

موفق باشيد.

gm.sara
سه شنبه 15 دی 1388, 11:53 صبح
از نظر close کردن ، هيچ نيازي نيست ، خودش اتوماتيک بر حسب نياز از منابع استفاده مي کند و هنگامي که نياز نداشته باشد ، منابع را آزاد مي کند.

از نظر جايگزين نکردن ، من بررسي کردم ، ظاهراً با فارسي مشکل دارد.

مي گردم اگر راه حلي برايش پيدا کردم مي گويم ، در غير اينصورت از راه هاي ديگر استفاده کنيد.

موفق باشيد.

ممنون از شما، غیر از فارسی من می خوام که SPACE ها حذف بشه، یعنی من فقط کد زیر را نوشتم، ولی هیچ کاری نکرد. (""," ")

saied_genius
سه شنبه 15 دی 1388, 12:40 عصر
از روش زير استفاده کنيد ، صد در صد جواب مي دهد و با فارسي هم مشکلي ندارد (در صورتي که با utf-8 فايل شما save شده باشد).


Dim strb As New System.Text.StringBuilder()
strb.AppendLine(System.IO.File.ReadAllText("c:\\test.txt"))
strb.Replace(" ", "").Replace("الف", "ب")
System.IO.File.WriteAllText("c:\\test.txt", strb.ToString())

موفق باشيد.

saied_genius
سه شنبه 15 دی 1388, 12:44 عصر
بهترین راه استفاده از strings.repalce به جای Replace خالی هستش... از trim هم میتونی استفاده کنی...

trim فقط فضاهاي خالي دو طرف string را حذف مي کند ، نه تمام space موجود در متن را.

موفق باشيد.

moharrami
سه شنبه 15 دی 1388, 12:54 عصر
از روش زير استفاده کنيد ، صد در صد جواب مي دهد و با فارسي هم مشکلي ندارد (در صورتي که با utf-8 فايل شما save شده باشد).


Dim strb As New System.Text.StringBuilder()
strb.AppendLine(System.IO.File.ReadAllText("c:\\test.txt"))
strb.Replace(" ", "").Replace("الف", "ب")
System.IO.File.WriteAllText("c:\\test.txt", strb.ToString())موفق باشيد.

این یه راه حل خوبه! ولی اگه فایلت بزرگ باشه و داده زیادی توش باشه توابع string مثل split , replace روی خروجی ReadAllText() کار نمی کنه و باید فایل رو خط به خط بخونی (روش خوب اینه که از تابعی استفاده کنی که خروجی IEnumrable داشته باشه)

saied_genius
سه شنبه 15 دی 1388, 12:57 عصر
احتمالاً دوستمون درست مي گويند ، چون من تا حالا نياز نبوده با فايل بزرگ اين کار رو بکنم.

موفق باشيد.

Hossis
سه شنبه 15 دی 1388, 17:58 عصر
خیلی مسئله رو پیچیده نکنید
تمام این کارها با سه خط ساده انجام میشه


Dim str As String
str = IO.File.ReadAllText("c:\1.txt")
str = str.Replace(" ", "")
IO.File.WriteAllText("c:\1.txt", str)

saied_genius
سه شنبه 15 دی 1388, 18:14 عصر
خیلی مسئله رو پیچیده نکنید
تمام این کارها با سه خط ساده انجام میشه


Dim str As String
str = IO.File.ReadAllText("c:\1.txt")
str = str.Replace(" ", "")
IO.File.WriteAllText("c:\1.txt", str)



مسئله پيچيده کردن مسئله نيست ، مسئله سنجيدن کار در حالت هاي مختلف است.

طبق روش شما در فايل هاي بزرگ ، سرعت مي آيد پايين ، ولي با استفاده از stringBuilder سريع کار با فايل خيلي سريعتر است.

موفق باشيد.

Hossis
شنبه 19 دی 1388, 08:41 صبح
مسئله پيچيده کردن مسئله نيست ، مسئله سنجيدن کار در حالت هاي مختلف است.

طبق روش شما در فايل هاي بزرگ ، سرعت مي آيد پايين ، ولي با استفاده از stringBuilder سريع کار با فايل خيلي سريعتر است.

موفق باشيد.
ممکنه یک مثال بزنید یا توضیحی مرقوم فرمایید؟:متفکر::گیج:

saied_genius
شنبه 19 دی 1388, 11:34 صبح
ممکنه یک مثال بزنید یا توضیحی مرقوم فرمایید؟:متفکر::گیج:

با شکلک در آوردن مشکل کسي حل نمي شود.

اين هم دليل :

When you use a normal string and change it, the .net framework will destroy the current string in memory and create a new one somewhere else in the memory. With a stringbuilder the object isn't destroyed each time it's adapted.

http://channel9.msdn.com/forums/TechOff/14294-C-string-vs-StringBuilder/

(http://www.codeproject.com/KB/cs/StringBuilder_vs_String.aspx)http://www.codeproject.com/KB/cs/StringBuilder_vs_String.aspx

موفق باشيد.