Spenzer Skrevet 18. juni 2009 Del Skrevet 18. juni 2009 (endret) Hei! Har aldri vært bort i eller prøvd split funksjonen, men virker som om jeg trenger den nå, så håper på litt hjelp her i fra Web Browser kilde kode (som skal splittes): <a href="side.php?a=test">Just Testing</a> </div> prøver og få ut ordet som er etter side.php?a= altså jeg prøver og finne ut hvordan jeg splitter ut ordet test fra kildekoden. Hvordan det ser ut hos meg etter mine fantastiske forsøk : Dim split1() As StringDim split2() As String Dim wbsource As String Private Sub Command1_Click() wbsource = wb.Document.All 'Denne er helt sikkert feil, veit ikke hva jeg skal ha her, har bare prøvd og følge "tutorials" split1 = Split(wbsource, "<a href=""side.php?a=") DoEvents split2 = Split(split1(1), """>Just Testing</a> </div>") DoEvents split2(0) = split2(0).Replace(", ", "") DoEvents Text1.Text = split2(0) DoEvents End Sub Private Sub Form_Load() wb.Navigate "http://minside" End Sub Sikkert masse feil, men jeg ville ivertfall prøve selv før jeg begynte og mase her. EDIT: Har lest litt osv, har fått til dette, men er tydeligvis feil det og: Text1.Text = Split(Split(WebBrowser1.Document.body.parentelement.innerhtml, "<a href=""side.php?a=")(1), """>Just Testing</a> </div>")(0) Endret 19. juni 2009 av Spenzer Lenke til kommentar
brgr Skrevet 18. juni 2009 Del Skrevet 18. juni 2009 Du får bare se om dette fungerer, har ikke VS tilgjengelig ATM så får ikke sjekket. Dim input As String = "<a href=""side.php?a=test"">Just Testing</a> </div>") Dim queryString As String Function FindQueryString([text] As String) As String FindQueryString = "" 'Sjekker om input streng inneholder href attribute If [text].ToLower.Contains("href") Then 'Vi fjerner eventuell text som er foran HREF attribute [text] = Strings.Right([text], Len([text]) - [text].ToLower.IndexOf("href") - 4) 'Skal nå sitte igjen med =""side.php?a=test"">Just Testing</a> </div> [text] = Strings.Right([text], Len([text]) - [text].ToLower.IndexOf("""")) 'Skal nå sitte igjen med side.php?a=test"">Just Testing</a> </div> 'Sjekker om gjenstående streng inneholder ? tegnet If [text].Contains("?") Then [text] = Strings.Right([text], Len([text]) - [text].ToLower.IndexOf("?")) For Each x As Char In [text] If x = """" Then Exit For Else FindQueryString &= x End If Next End If End If End Function Sub Command1_Click() 'Kall funksjonen FindQueryString(indata streng) End Sub Lenke til kommentar
Merko Skrevet 18. juni 2009 Del Skrevet 18. juni 2009 (endret) Du kan jo ta en titt på forumets søkemotor. Tror det spørsmålet har blitt stillt en god del ganger før. Om du fremdeles ikke finner noe kan vi lage ett untak denne gangen. Sjekk her. for hvordan du bruker Split funksjonen. Endret 18. juni 2009 av Merkoen Lenke til kommentar
Spenzer Skrevet 19. juni 2009 Forfatter Del Skrevet 19. juni 2009 Har lest det på microsoft sine sider, og jeg har prøvd og, og er rimelig sikker på at det er rett, men er nok tydeligvis ikke det. Skal prøve det du har skrevet brgr uansett om det virket som en mer komplisert måte, når det egentlig skal kunne blitt gjort med 1 linje. Lenke til kommentar
brgr Skrevet 19. juni 2009 Del Skrevet 19. juni 2009 er klart att det vil vær mulig å gjør dette på enklere måter. men denne vil jo bare tre i kraft om du har HREF i inputen. slik att du ikke må ha en absolutt å gå etter. RegExp er jo såklart en mulighet. Men noe jeg absolutt ikke behersker. Så hvorfor plafre om noe jeg ikke kan? :-p Men hvis du tenker etter så er dette en funskjon, du caller denne opp så blir det jo bare en linje du bruker på å calle funksjonen. :-) Dog, den fungerer bare hvis det er en link i hver input. Ikke idiot sikker løsning. Men vil dog virke på en slik input du gav. NB! Kan være at koden ikke er 100% korrekt ettersom jeg ikke hadde VS tilgjengelig :-\ Lenke til kommentar
Spenzer Skrevet 20. juni 2009 Forfatter Del Skrevet 20. juni 2009 Men om jeg ikke husker feil så brukte jeg den siste koden som jeg har posta i "edit" en annen gang, og da funket den, men den funker ikke nå så det er " og url med i bildet... ? Lenke til kommentar
brgr Skrevet 20. juni 2009 Del Skrevet 20. juni 2009 Hvis den inndataen er statisk. Dim input As String = "<a href="side.php?a=test">Just Testing</a> </div>" input = Replace(input, Strings.Left(input, input.IndexOf("?a=") + 3), "") 'Da er vi nede til test">Just.... input = input.Left(input.IndexOf(""")) /Forklaring Vi erstatter det som står på venstre side av ?a= (+ de tre da) med ingenting (""). Så vil vi bare ha det som står fra venstre til neste ". Bruker VB.NET. Kan også bruke InStr(input, """") istedefor input.IndexOf Lenke til kommentar
Spenzer Skrevet 20. juni 2009 Forfatter Del Skrevet 20. juni 2009 Hei har sett på den første koden din, men hvor henter den informasjonen fra? Den skal hente informasjonen fra WebBrowser sourcen, men ser ingen "WebBrowser1.Document.body.parentelement.innerhtml" ikke at jeg har peiling men ville tro at den koden du skreiv var for VB .NET men :S Uansett takk skal du ha Lenke til kommentar
brgr Skrevet 20. juni 2009 Del Skrevet 20. juni 2009 Koden jeg skrev var for .NET ja. :-) Ettersom VB6 er utdatert og burde vært bannlyst fra alt. Gjør deg selv en STOOOOR tjeneste og innstaller Visual Studio 2008 heller. Gratis er det også. Last ned fra http://www.microsoft.com/express/ VB6 er utgått teknologi, er en GOD grunn til att dem i det hele tatt har gått over til VB.NET ettersom den er mye mer robust, og har veldi stort bruksområde ettersom du har direkte tilgang til Mircrosofts eget .NET bibliotek. (Gjelder for samtlige Visual Studio versjoner). Lenke til kommentar
Spenzer Skrevet 22. juni 2009 Forfatter Del Skrevet 22. juni 2009 Har innstallert VB .NET 2008, men sku gjerne ha fullført programmet i VB6 siden jeg har kommet rimelig langt Lenke til kommentar
brgr Skrevet 22. juni 2009 Del Skrevet 22. juni 2009 Eller så bare skriver du om programmet til VB9? Som du uansett vil tjene med å gjør på alle måter. Men fikk du til funksjonen min eller? Lenke til kommentar
Merko Skrevet 22. juni 2009 Del Skrevet 22. juni 2009 Du kan jo bruke VB.Net til og konventere VB6 prosjektet til VB.Net, sikkert ikke alt som funker, men det funker som oftest i de enkle tilfellene. Lenke til kommentar
GeirGrusom Skrevet 23. juni 2009 Del Skrevet 23. juni 2009 (endret) Dette er en perfekt oppgave for regular expressions, hvis du ikke kan det fra før, er det absolutt anbefalt å lære seg. Det kan faktisk være en av de nyttigste verktøyene du finner. Regex klassen finner du i System.Text.RegularExpressions. Kort introduksjon: Regex er et system for å lete etter tekst, den bruker en veldig enkel syntaks (bare ett eller to-tegn for hver forskjellig operasjon) Først og fremst så vil den matche ting du skriver eksakt, for eksempel hvis du skriver inn "bil" vil den si ifra alle steder der det står "bil" i teksten. Dette er ikke så fryktelig nyttig, men det er nyttig som en del av et større uttrykk. Deretter kan du gruppere uttrykk med parantes, og pipe "|" er det samme som "Eller" Så (bil)|(båt) vil matche bil og/eller båt. Du har også quantifiers som gjør at du kan søke etter mengder med uttrykk, for eksempel (bil)* vil matche "", "bil", "bilbil", "bilbilbil" osv. men ikke "bi" eller "il" Stjerne betyr altså "null eller flere ganger" Hvis du er interessert i å matche noe 1 eller flere, bruker du + istedet (bil)+ matcher "bil", "bilbil" osv. men ikke "" Du kan også si at du vil kun matche én gang, da brukes spørsmålstegn (bil)? matcher kun "bil" Men å lete etter ord en eller flere ganger er ikke nyttig, derfor har du andre funksjoner, som for eksempel punktum (.) som matcher alle tegn. .* vil altså matche hva som helst (inkludert en tom streng) Vi kan også navngi en capturegroup, da bruker vi ?<blablabla> (merk at ? ikke er en quantifier i dette tilfellet) Merk også at tegn som er brukt av regex må escapes med \ Så en enkel test for å hente ut verdien i en href vil bli: \<a href="(?<HrefVerdien>.*)"\> Da finner du verdien i href-en i Groups["HrefVerdien"] Du kan også si at du vil kun matche noe innenfor visse bokstaver, da brukes klammer: [a-z] vil matche én bokstav som må være fra og med 'a' til og med 'z' Du kan legge inn flere slike i samme klammer: [a-zA-Z0-9] vil matche alfanumeriske verdier. Du kan også legge til en "not" foran, som gjør at den matcher alt, bortsett fra det i klammene: [^0-9] vil matche alt, bortsett fra og med 0 til og med 9. Merk også at det er noe som kalles greedy quantifiers, .NET er greedy som standard. Greedy vil si at dersom det er flere søk som gir match, så vil den som gir lengst match være den som blir matchet. Et eksempel er flerlinjede kommentarer i C som ser noe slikt ut: /* kommentarer. */ /* flere kommetarer */ Dersom den er satt som greedy, vil den match HELE koden over, hvis ikke vil den føst matche /* kommentarer. */ og etterpå /* flere kommentarer */ For å skru av greedy setter du et spørsmålstegn etter quantifieren. /\*.*?\*/ Er ikke greedy (merk escapingen med \ for å markere at '*' i /* og */ ikke er quantifiers) /\*.*\*/ er derimot greedy. Nå tror jeg du skal ha alt som trengs for å løse oppgaven med regular expressions. Dette er langt ifra en komplett guide, men en enkel innføring, det finnes mange flere funksjoner i regex. Endret 23. juni 2009 av GeirGrusom Lenke til kommentar
Merko Skrevet 23. juni 2009 Del Skrevet 23. juni 2009 Bra veiledning GeirGrusom. Nå forstår iallefall jeg mye mere ang. regex skal ekspermintere litt med det selv nå fremover. Har egentlig alltid prøvd og holde meg unna regex pga det ser utrolig avansert ut med masse rare tegn men nå gir jo koden mere mening for meg, så takk Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå