PDA

View Full Version : انتقال اطلاعات سورس صفحه سایت به لیست باکس



samiasoft
چهارشنبه 04 دی 1392, 13:27 عصر
من سورس صفحه ای را داخل یک تکست باکس ریخته ام

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


<P dir=rtl>sami</P>



کلمه sami ثابت نیست و ممکن است شامل چیزایی دیگری نیز باشد.

بطور مثلا در لیست باکسم اینطور بشه

<P dir=rtl>sami</P>
<P dir=rtl>aaa</P>
<P dir=rtl>bbbbbbbbbb</P>
...

mehran901
چهارشنبه 04 دی 1392, 19:18 عصر
این بحث کلیشه ای بارها بحث شده ، با استفاده از دستور instr میتونید عبارت <P dir=rtl> رو سرچ بزنین در نهایت از محل شروع این عبارت عبارت دوم یعنی : </P رو سرچ بزنین نقظه شروع و پایان رو دارید و حالا با استفاده از دستور mid عبارت مورد نظر رو جداسازی کنین

samiasoft
چهارشنبه 04 دی 1392, 19:21 عصر
این بحث کلیشه ای بارها بحث شده ، با استفاده از دستور instr میتونید عبارت <P dir=rtl> رو سرچ بزنین در نهایت از محل شروع این عبارت عبارت دوم یعنی : </P رو سرچ بزنین نقظه شروع و پایان رو دارید و حالا با استفاده از دستور mid عبارت مورد نظر رو جداسازی کنین

اگر امکانش هست بصورت نمونه سورس اینو قرار بدید...متاسفانه با این مبحث اشنا نیستم

mehran901
چهارشنبه 04 دی 1392, 19:29 عصر
اولین تگ <P dir=rtl>sami</P> رو درمیاره

Const a As String = "<P dir=rtl>"
Const b As String = "</P>"
Dim j%, i%
j = InStr(1, Text1, a, vbTextCompare)
i = InStr(j, Text1, b, vbTextCompare) - j + Len(b)

MsgBox Mid$(Text1, j, i)

samiasoft
چهارشنبه 04 دی 1392, 20:00 عصر
اولین تگ <P dir=rtl>sami</P> رو درمیاره

Const a As String = "<P dir=rtl>"
Const b As String = "</P>"
Dim j%, i%
j = InStr(1, Text1, a, vbTextCompare)
i = InStr(j, Text1, b, vbTextCompare) - j + Len(b)

MsgBox Mid$(Text1, j, i)




خب من حال میخواهم این کلا تمامی عبارت های شامل اون رو بیاره و مثلا در یک لیست باکس بریزه
برای این حالت چیکار میشود کرد؟

من این رو بدین صورت نوشتم اما عبارت اولی را تکرار کرد!


Const a As String = "<P dir=rtl>"
Const b As String = "</P>"
Dim j%, k%

Dim i As Integer
For i = 0 To 8

j = InStr(1, Text, a, vbTextCompare)
k = InStr(j, Text, b, vbTextCompare) - j + Len(b)
List1.List(i) = Mid$(Text, j, k)

Next

mehran901
پنج شنبه 05 دی 1392, 21:51 عصر
الان رو این سیستم ویبی ندارم بنویسم برات روند کار به این صورت هست که

ی حلقه do loop میذاری و مرتبا عمل سرچ رو انجام میدی تا زمانی که مقدار j صفر بشه یعنی دیگه عبارت a پیدا نشده و از حلقه با exit do خارج میشی ..
نکته : محل شروع j = InStr(1, Text, a, vbTextCompare) رو بجای 1 باید ی متغییر بذاری که سری اول ک اجرا میشه مقدار یک داشتهباشه و سری های بعدی مقدارش با مقدار k عوض بشه ... یعنی : هر سری که تگ پیدا شد ، در واقع عمل سرچ بعدی ، بعد از </P> تگ قبلی شروع بشه

samiasoft
پنج شنبه 05 دی 1392, 23:08 عصر
الان رو این سیستم ویبی ندارم بنویسم برات روند کار به این صورت هست که

ی حلقه do loop میذاری و مرتبا عمل سرچرو انجام میدی تا زمانی که مقدار j صفر بشه یعنی دیگه عبارت a پیدا نشده و از حلقه با exit do خارج میشی ..
نکته : محل شروع j = InStr(1, Text, a, vbTextCompare) رو بجای 1 باید ی متغییر بذاری که سری اول ک اجرا میشه مقدار یک داشتهباشه و سری های بعدی مقدارش با مقدار k عوض بشه ... یعنی : هر سری که تگ پیدا شد ، در واقع عمل سرچ بعدی ، بعد از </P> تگ قبلی شروع بشه


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

Do
j = InStr(k, Text, a, vbTextCompare)
k = InStr(j, Text, b, vbTextCompare) - j + Len(b)
List1.AddItem Mid$(Text, j, k)
If j = 0 Then Exit Do
Loop

در واقع این قسمت که نکته رو گفتید من نمیدونم چطوری کدشو بنویسم

m.4.r.m
پنج شنبه 05 دی 1392, 23:29 عصر
من تا اینجا برات نوشتم بقیه شم خودت درست کن دیگه حوصلم نکشید


Private Sub Command1_Click()
'On Error Resume Next
Const a As String = "<P dir=rtl>"
Const b As String = "</P>"

For i = 0 To List1.ListCount
List2.AddItem Replace(Left(a, 11), Left(a, 11), Mid$(List1.List(i), 12))
Next i

End Sub

Private Sub Form_Load()
List1.AddItem "<P dir=rtl>sami</P>"
List1.AddItem "<P dir=rtl>Yes</P>"
List1.AddItem "<P dir=rtl>No</P>"
End Sub

samiasoft
جمعه 06 دی 1392, 15:00 عصر
من تا اینجا برات نوشتم بقیه شم خودت درست کن دیگه حوصلم نکشید

[/VB]

تشکر دوست عزیز اما مشکل من این نبود...

سید حمید حق پرست
جمعه 06 دی 1392, 15:34 عصر
با توجه به گفته شما اینگونه عمل کردم ولی لیست باکس هنگ کرد

Do
j = InStr(k, Text, a, vbTextCompare)
k = InStr(j, Text, b, vbTextCompare) - j + Len(b)
List1.AddItem Mid$(Text, j, k)
If j = 0 Then Exit Do
Loop
در واقع این قسمت که نکته رو گفتید من نمیدونم چطوری کدشو بنویسم

سلام علیکم
کد ویرایش کنید به :
Private Sub Command1_Click()
Const a As String = "<P dir=rtl>"
Const b As String = "</P>"
Dim j%, i%
Do
j = InStr(1, Text1, a, vbTextCompare)
If j = 0 Then Exit Do
i = InStr(j, Text1, b, vbTextCompare) - j + Len(b)
List1.AddItem Mid$(Text1, j, i)
Text1 = Replace(Text1, Mid$(Text1, j, i), "")
Loop
End Sub
نمونه هم براتون ضمیمه کردم.
موفق باشید.

یا علی (ع)

m.4.r.m
جمعه 06 دی 1392, 15:46 عصر
من آخر نفهمیدم تو اسم ها رو می خوای یا تگ هاشو آقا تکلیف ما رو مشخص کن دو ساعت کد می نویسیم آخه :قهقهه:

samiasoft
جمعه 06 دی 1392, 16:33 عصر
بازم متشکرم از شما دوستان که در این برنامه منو کمک کردید

حقیقتشو هم بخواهید جناب m.4.r.m (http://barnamenevis.org/member.php?247494-m.4.r.m) من هم اسمهارو میخواستم هم تگ ها رو که البته با راهنمایی های شما دوستان به هدفم رسیدم

samiasoft
جمعه 06 دی 1392, 17:00 عصر
یه سوال دیگر داشتم یعنی اخرین سوالم در این بخش هست اما شاید مربوط به این قسمت نباشه:لبخندساده:

در ویژوال خیلی وقت ها مقادیری مثل "> را که در کد نویسی قرار میدهیم بصورت خودکار تبدیل به ">" میشوند

مثل در کد زیر
Const b As String = "c"

من میخواهم به جای c مقدار "> قرار بدم تا تبدیل کد زیر بشود

Const b As String = "">"

اما متاسفانه این رو وقتی قرار بصورت زیر در می اید


Const a As String = "" > ""

یعنی یه مقدار " بهش اضافه میشود برای حل این مشکل باید چیکار کرد؟

m.4.r.m
جمعه 06 دی 1392, 17:18 عصر
باید به این شکل استفاده کنید .
MsgBox Chr$(34) & "123456" & Chr$(34)

سید حمید حق پرست
جمعه 06 دی 1392, 17:22 عصر
میتونید مقدار "> داخل یک textbox یا label قرار بدید و visible آن رو false کنید بعد کد بصورت زیر میشه :
Const a As String = text1.text
یا :
Const a As String = label1.caption
موفق باشید.

یا علی (ع)

samiasoft
جمعه 06 دی 1392, 17:23 عصر
باید به این شکل استفاده کنید .
MsgBox Chr$(34) & "123456" & Chr$(34)

متوچه نشدم یعنی به جای123456 من مقدار "> قرار بدم خب اینطوری این مقدار رو به من میده True

خب چگونه حالا اینو داخل
Const b As String = "c" به جای c قرار بدم

samiasoft
جمعه 06 دی 1392, 17:25 عصر
میتونید مقدار "> داخل یک textbox یا label قرار بدید و visible آن رو false کنید بعد کد بصورت زیر میشه :
Const a As String = text1.text
یا :
Const a As String = label1.caption
موفق باشید.

یا علی (ع)

این اصلا یادم نبود ممنونم

m.4.r.m
جمعه 06 دی 1392, 22:41 عصر
ببین این کد معادل دستور :

Dim S As String
S = "<p align=" & Chr(34) & "Right" & Chr(34)


<p align="Right"

samiasoft
شنبه 07 دی 1392, 18:01 عصر
من در همین مبحث به متنی خوردم که بصورت زیر هست

http://samisoft.ir/1/images/CDe9X.gif

sami و data هردو متغییر هستند و ثابت نیستند

من میخوام از این عبارت فقط data رو بدست بیارم ....بطوری که تعداد کاراکتر این sami و data رو هم نمیدونم و هربار تغییر میکند.

ایا روشی به نظرتون هست?برای جدا کردن data

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

Const a As String = "<"
Const b As String = ">"
Dim j%, i%
j = InStr(1, Text1, a, vbTextCompare)
i = InStr(j, Text1, b, vbTextCompare) - j + Len(b)
Text2 = Mid$(Text1, j, i)


خب اینطوری همه متن رو به جز data رو میتونم پیدا کنم حال ایا امکانش هست همینی که پیدا کردم رو از داخل متن پاک کنم تا data بدست بیاد؟

یا روش ساده تری هم هست؟

samiasoft
شنبه 07 دی 1392, 18:31 عصر
یه راه ساده پیدا کردم با کد زیر مشکلم رفع شد

Text2.Text = Mid(Text1.Text, InStrRev(Text1.Text, ">") + 1)