PDA

View Full Version : سوال: پردازش یک فایل متنی (جدا کردن پاراگراف ها و پردازش آنها)



toopak
پنج شنبه 18 آبان 1391, 23:34 عصر
سلام
من یک فایل متنی دارم که توش یه سری مطلب داره
کاری که میخوام بکنم اینه که با توجه به یک خط خالی که بین هر مطلب وجود داره بیام و مطالب رو جدا جدا یه پرداغزشی روش انجام بدم
حالا سوالم اینه که اولا با توجه به اینکه متن رو هم توی فایل دارم و هم توی richtextbox کدوم حالت پردازش راحت تره؟
دوم اینکه جچوری میتونم با توجه به همون فاصله ای که بین هر مطلب هست مطالب رو جدا کنم و روش به ترتیب پردازش کنم؟ یعنی مثلا اولین مطلب تا خط خالی خونده بشه و بعد روش یه پردازشی انجام بشه (یه سری چیزا به صورت دستی کم یا زیاد بشه) بعد بره پاراگراف بعدی رو بخونه

هر کسی هر راهنمایی میتونه ممنون میشم کمک کنه
تشکر

حل شد:
پاسخ: با استفاده از دستور Split(txtOutput1.Text, ControlChars.Lf & ControlChars.Lf)

arash020
جمعه 19 آبان 1391, 00:13 صبح
سلام
این روش منه برای کاری که گفتی:
اول اینو اضافه کردم(برای کار با فایل هاست)
Imports System.IO

برای اوردن متن از فایل به داخل Textbox :
Using sr As New StreamReader("l:\Form1.txt")
TextBox1.Text = sr.ReadToEnd
End Using

و برای کاری که گفتی انجام بشه :

For i = 0 To TextBox1.Lines.Count - 1
If TextBox1.Lines.GetValue(i) = "" Then
MsgBox("پردازش")
End If
Next
عملیات مورد نظرت رو به جای اون پیغام بزار
این برنامه
دقیقا خط های خالی بین پاراگراف رو تشخیص میده .

toopak
جمعه 19 آبان 1391, 00:28 صبح
کدی که شما گذاشتید میاد خط های خالی رو اجازه پردازش میده، که البته با یک Not بعد از If میشه درستش کرد
ولی مشکل اصلی اینجاست که کد شما هر خط رو به صورت جدا میاره، در حالی که من میخوام تا قسمتی که خط خالی نیومده همه تو یک بلوک قرار بگیره، به عبارت دیگه پاراگراف ها پردازش بشن
خودم هم به یه جاهایی رسیدم
'Dim str, Line As String
'str = txtOutput1.Text
'Dim str1 As String() = str.Split( ChrW(10))
'For Each Line In str1
' MsgBox(word)
'Next
اما بازم همون مشکل بالا رو داره
البته یه راه هایی هست که مثلا بیام تا جایی که خط خالی نیومده رو بریزم تو یه string ولی نمیخوام بار پردازشی برنامه بره بالا
تا جایی که بشه کدهای ساده تر رو ترجیح میدم
بازم ممنون از زحمتت

arash020
جمعه 19 آبان 1391, 00:37 صبح
برای من هیچ کاری نشد نداره
توی پست قبل برداشتم از مساله رو براتون نوشتم
ولی با توضیح مجددی هم که دادین
بازم مساله برام روشن نشده شما دقیقا چی می خواید؟
خب اگه مساله پیچیده باشه
گاهی نیازه که الگوریتم هم کمی پیچیده بشه...

لطفا بیشتر توضیح بدین منظورتون چیه؟

toopak
جمعه 19 آبان 1391, 00:49 صبح
کلا چیز غیرممکنی وجود نداره، فقط واسه رسیدن بهشون راه های مختلفی وجود داره

چیز پیچیده ای نیست
مثال:
خط1
خط2

خط3

خط4
خط5
خط6

خط7

این بالایی باید به صورت پاراگرافی جدا بشه
یعنی کلا بشه 4 دسته که روشون پردازش بشه
پاراگراف اول:
خط1
خط2
پاراگراف دوم:
خط3
پاراگراف سوم:
خط4
خط5
خط6
پاراگراف چهارم:
خط 7

Hossis
جمعه 19 آبان 1391, 03:11 صبح
این فکر کنم خیلی سخت نباشه
Dim txt() As String = Split(txtbox1.Text, vbNewLine & vbNewLine)

متغیر txt در این کد, شامل دسته های چهارگانه ای هست که در مثال بالا ذکر کردید.

toopak
جمعه 19 آبان 1391, 10:18 صبح
متاسفانه وقتی با کد بالا متن رو میخونم و برای تست متغیر txt رو نمایش میدم همه متن رو به صورت یکجا میاره
Dim txt() As String = Split(txtOutput1.Text, vbNewLine & vbNewLine)
For i = 0 To txt.Length - 1
MsgBox(txt(i))
Next

toopak
جمعه 19 آبان 1391, 11:21 صبح
حل شد:
پاسخ: با استفاده از دستور Split(txtOutput1.Text, ControlChars.Lf & ControlChars.Lf)

Hossis
جمعه 19 آبان 1391, 11:32 صبح
متاسفانه وقتی با کد بالا متن رو میخونم و برای تست متغیر txt رو نمایش میدم همه متن رو به صورت یکجا میاره
Dim txt() As String = Split(txtOutput1.Text, vbNewLine & vbNewLine)
For i = 0 To txt.Length - 1
MsgBox(txt(i))
Next
بنده خودم تست کردم اول و درست بود بعد جواب شما رو فرستادم
شما باید ببینید متغیر txt چند عضو داره؟؟ باید چهار عضو داشته باشه
اگر این طور نبود, باید بین این خطوط(که یک خط خالی هم هست) ببینید چه کاراکتری وجود دارد و همونها رو در اسپلیت کردن مشخص کنید.
من فرض رو بر این گرفتم که دوتا خط جدید (vbnewLine ) هست. شما هم اگر به این صورت متن رو در بیارید, مطمئن باشید که جواب خواهد داد.