PDA

View Full Version : حرفه ای: راهنمایی توی طبقه بندی این نوع متن...! ؟



arash020
سه شنبه 05 اردیبهشت 1391, 13:07 عصر
سلام
فرض کنید متنی داریم (مثلا محتوای فایلی متن )داخل ریچ تکست باکس به شکل زیر :

xdf :12341234567891
2345678912345215856789
5125111084846416789

xdf :12341234567891
234565965695656789
52629713020656789

xdf :65959565
873169789
56789

این متن به این صورت است که کلمه ای در ابتدایش (مثلا xdf ) تکرار میشود و بین حروف مورد نظر من که می خواهم جدا کنم یک خط خالی مطابق بالا وجود دارد .

چه روشی رو توصیه میکنید که من بتونم با سرعت بالا(با توجه به زیاد بودن متن) کارکتر های بین خطی که کلمه ی تکراری در آن است تا خط خالی را جدا کنم (و در آرایه ای از رشته ذخیره کنم).

==>از خطی که آن کلمه ی تکراری در آن است صرف نظر کند .

مثلا
xdf :1,44 fgd
121342342536
4747574635363
57463535363636
بشود:
121342342536
4747574635363
57463535363636

(خطوط bold شده به عنوان جواب داده شود .)


مرسی

M.T.P
سه شنبه 05 اردیبهشت 1391, 13:42 عصر
ابتدا کل متن رو تو یه رشته قرار بدید.

بعد با تابع Replace کلمه کلیدیتون رو حذف کنید:


strText = Replace(strText, "xdf :", vbNullString)

بعد با Split بریزید تو یه آرایه:


Dim arrText() As String
arrText = Split(strText, vbCrLf)

arash020
سه شنبه 05 اردیبهشت 1391, 17:43 عصر
ممنون که سعی کردین به من کمک کنین
ولی
اگه به سوالم بیشتر دقت کنین
من گفتم
میخوام کلا خطی که حاوی اون کلمه است حذف بشه (نه فقط اون کلمه!)
مشکل من پیدا کردن یه الگوریتم یا روش بهینه برای این کاره...!
لطفا دوباره به مثالی که زدم نگاه کنید...

M.T.P
سه شنبه 05 اردیبهشت 1391, 19:53 عصر
می خواهید از راهی غیر از حلقه استفاده کنید؟

به نظرم تنها راهش حلقه ست.

vbhamed
چهارشنبه 06 اردیبهشت 1391, 09:08 صبح
سلام

ابتدا كل متن رو تو يك متغير بزاريد و با تابع Split و بر اساس كلمه مورد نظر از متنتون يك آرايه تشكيل بديد
Dim temp() As String
temp = Split(Text1, "xdf :")

حالا شما آرايه اي دارين كه اولا بايد از آيتم 1 به بعد اون استفاده كنيد نه آيتم 0 چون خاليه، دوما در مورد هر آيتم اون از ابتداي شروع آيتم تا اولين كاراكتر Enter رو بايد ناديده گرفته و بقيه آيتم رو بخونيد مثلا در مورد اولين آيتم رشته مورد نظر شما ميشه :
MsgBox Mid$(temp(1), InStr(temp(1), vbCrLf) + 2)
اينطوري از حلقه استفاده نكردين ولي هر بار بايد پردازشي روي هر آيتم انجام بشه تا رشته مورد نظر بدست بياد اما اگر هم دوست داشتيد مي‌تونيد يكبار با حلقه كل آرايه رو اصلاح كنيد
For i = 1 To UBound(temp)
temp(i) = Mid$(temp(i), InStr(temp(i), vbCrLf) + 2)
Next