PDA

View Full Version : خواندن از بین عبارت



alirezash
یک شنبه 02 خرداد 1389, 13:59 عصر
سلام دوستان عزیز .
از طریق یک سخت افزار یکسری اطلاعات به صورت زیر داخل یک تکس باکس نشون داده میشه

software id:gt46678iifj date:2010:11 time:22:30:11 text:salam
id:6346436date:2010:12 time:22:30:11 text:mer30
id:jhfjgfjfdate:2010:13 time:22:30:11 text:welcome
id:gt466yu6578iifj date:2010:11 time:22:30:11 text:bye

چجوری می تونم مقدار id , date , time , text رو برای هر ردیف بگیرم .
فقط یک نکته که این ردیف ها پشت سرهمه و شاید enter بکار نرفته باشه

MMR_1344
یک شنبه 02 خرداد 1389, 15:08 عصر
دوست خوبم
برای اینکار میتونی این اطلاعات رو بصورت خطی بخونی و بعد دنبال کلمه های Date و Time و .. در اون بگردی و در زمانی که به این کلمات رسیدی اطلاعات بعد از اون رو (تعداد خانه های مورد نیاز) رو در یک متغیر قرار بدی

M.T.P
یک شنبه 02 خرداد 1389, 16:18 عصر
نمونه زیر رو نگاه کنید:



Dim StrData As String
Dim OutText1 As String
Dim OutText2 As String
Dim InpText1 As String
Dim InpText2 As String
Dim A, B As Long
StrData = "id:15245822text:hello"
InpText1 = "id:"
InpText2 = "text:"
A = InStr(1, StrData, InpText1)
B = InStr(1, StrData, InpText2)
OutText1 = Mid(StrData, A + Len(InpText1), B - Len(InpText2))
OutText2 = Mid(StrData, B + Len(InpText2))
MsgBox "id = " & OutText1 & vbLf & "Text = " & OutText2

alirezash
یک شنبه 02 خرداد 1389, 17:07 عصر
دوست عزیز مرسی که کمک کردی اما یک سوال چجوری id های بعدی رو بخونم

M.T.P
یک شنبه 02 خرداد 1389, 17:54 عصر
دوست عزیز مرسی که کمک کردی اما یک سوال چجوری id های بعدی رو بخونم

خب دوست عزیز بستگی داره این متون رو کجا داشته باشین ، داخل فایل متنی ،، داخل تکس باکس ،،، لیبل ،، لیست و و و .... ؟؟؟؟
خب اینطور که معلومه شما این دیتا رو از شبکه و یا اینترنت میگیرین ، بنابراین همون لحظه که دیتا رو میگیری میتونی از همون روش که گذاشتم تفکیک و هرکاری که دوست داری روش انجام بدی.

alirezash
یک شنبه 02 خرداد 1389, 19:40 عصر
دوست عزیز میشه با کد توضیح بدی . این اطلاعات رو از یک میکرو میگیرم

M.T.P
یک شنبه 02 خرداد 1389, 20:18 عصر
دوست من شما الان هم تفنگ رو داری ، هم صید جلوتونه ... فقط باید عنایت کنید و بطرف هدفتون شلیک کنید.
خب شما الان هر خط از متنی رو که از میکرو میگیرن با استفاده ازون کد تفکیک کنید دیگه ،، که البته من فقط ID و Text رو نوشتم و هدفم این بود که موضوع روشن شه و شما یک متغیر دیگه تعریف کن واسه Time یا ....

alirezash
یک شنبه 02 خرداد 1389, 20:37 عصر
دوست عزیز مشکل من هم همینه
که من این اطلاعات رو خط به خط نمیگریم .
اطلاعاتی که هز میکرو برای من میاد یک دفعه 100 تا از این خط ها پشت سر همه . نمیدونم چجوری اولین اطلاعات رو گرفتم برم دنباله بقیش

pooya1072
یک شنبه 02 خرداد 1389, 22:37 عصر
سلام دوست عزیز
به نظر میاد اینقدر درگیر برنامه شدی که الان دید مناسبی روی اون نداری.
اصلا مهم نیست که اطلاعاتت دنبال هم هست یا توی خط های جداگانه.
توی این تکست باکس شما دو فرم داده دارین.یکی نام داده مثل id یا date و غیره...و دیگری مقدار متناظر اون داده ها.


id:gt46678iifj date:2010:11 time:22:30:11 text:salam
کاری که شما می کنی اینه که اولا موقعیت اولین نام داده رو که یک عدده و موقعیت دومین نام داده رو بگیرین.موقعیت دوم منهای موقعیت اول میشه طول مقدار داده اول.مثلا اگه id اولین نام داده باشه و هیچ متنی توی تکست قبل از اون نباشه موقعیت مقدار اون از 3 توی تکست باکست شروع میشه.چرا ؟ به این دلیل که id دو حرفه ...... حالا باید بری سراغ نام داده دوم یعنی date و موقعیت اون رو بدست بیاری.مثلا میشه 9 .یعنی date از نهمین کارکتر تکست شروع میشه.این یه مفهوم دیگه هم داره.اونم اینه که مقدار مربوط به id تا کارکتر 8 ادامه داشته.این کار رو باید برای هر دو نام داده متوالی انجام بدی. یعنی بین id و date ---- date و time ---- time و text و در ادامه text و id و همینطور ادامه بدی تا آخر تکست .
وای خسته شدم:گریه:

alirezash
یک شنبه 02 خرداد 1389, 22:55 عصر
دوست عزیز ممنونم که توجه میکنی
مشکل اینجاست که اولین id,text,date,time رو میتونم بخونم ، اما برای خوندن دومین id,text,date,time باید چکارکنم و همین طور سومین و بعدی

M.T.P
دوشنبه 03 خرداد 1389, 10:57 صبح
دوست عزیز ممنونم که توجه میکنی
مشکل اینجاست که اولین id,text,date,time رو میتونم بخونم ، اما برای خوندن دومین id,text,date,time باید چکارکنم و همین طور سومین و بعدی


خب شما تمامی خطوط این دیتا رو تو یه ListBox اضافه کن و بعد با یک حلقه به طول تعداد آیتم های لیست تفکیکش کن. :افسرده:

pooya1072
دوشنبه 03 خرداد 1389, 11:36 صبح
دوست عزیز ممنونم که توجه میکنی
مشکل اینجاست که اولین id,text,date,time رو میتونم بخونم ، اما برای خوندن دومین id,text,date,time باید چکارکنم و همین طور سومین و بعدی

خب اگه توجه كني برات نوشتم كه بزارش توي لوپ كه هر وقت توي تكست به id رسيد مقداربعد از اون رو برات برگردونه .همينطور بقيه مقادير(date,time,text) شما بدون حلقه كارت پيش نميره.
به اين نكته توجه كن كه text و مقدارش آخرين كاركترهاي قبل از id دوم هستند.پس پوزيشن آخرين كاركتر مربوط به مقدار text به علاوه يك ، برابر است با اولين كاركتر نام id دوم
اميدوارم منظورم رو خوب رسونده باشم.

alirezash
دوشنبه 03 خرداد 1389, 14:34 عصر
دوست عزیز مشکل همین جاست به خدااااااااااااااااااااااا ااااااااااااااااااااااااا ااااا
نمی دونم چجوری بفهمم که آخرین کلمه text چیه یا طول رشته text چه قدره

pooya1072
سه شنبه 04 خرداد 1389, 21:52 عصر
دو تا تکست باکس و دو تا command buttom روی یه فرم بزار.کد زیر رو توی قسمت کد نویسی وارد کن.با command button اول یه متن شبیه اونچه مد نظر شماست وارد تکست باکس 1 میشه.توی تسکت دوم طول کل تکست رو داری .به حلقه توجه کن.بی نقص نیست ولی روال کار دستت میاد :


Dim test As Boolean
Dim text As String
Dim i, j As Integer
Dim idPos, DatePos, TimePos, TextPos As Integer

Private Sub Command1_Click()
Text1.text = ""
For i = 1 To 10
Text1.text = Text1.text + "id" + Str(i + 1000)
Text1.text = Text1.text + "Date" + Str(i + 1000)
Text1.text = Text1.text + "Time" + Str(i + 1000)
Text1.text = Text1.text + "Text" + Str(i + 1000)
Next i
text = Text1.text
End Sub

Private Sub Command2_Click()
Do While test = False
p = InStr(idPos, text, "id")
If p > 0 Then
idPos = idPos + p
MsgBox Str(p) + " id"
p = 0
Else
e = e + 1
End If
p = InStr(DatePos, text, "Date")
If p > 0 Then
DatePos = DatePos + p
MsgBox Str(p) + " date"
p = 0
Else
e = e + 1
End If
p = InStr(TimePos, text, "Time")
If p > 0 Then
TimePos = TimePos + p
MsgBox Str(p) + " time"
p = 0
Else
e = e + 1
End If
p = InStr(TextPos, text, "Text")
If p > 0 Then
TextPos = TextPos + p
MsgBox Str(p) + " text"
p = 0
Else
e = e + 1
End If
If e >= 4 Then Exit Do
Loop
End Sub

Private Sub Form_Load()
test = False
idPos = 1
DatePos = 1
TimePos = 1
TextPos = 1

End Sub