Gå til innhold

Visual Basic 2008 - Legge til 1+ på tallet som allerede står der.


Gjest

Anbefalte innlegg

Hei!

 

Har et program som laster inn en nettside og det jeg vil er at den skal hente det siste tallet som står deg og plusse (+) på et en (1)

 

Hvis du skjønner :p Den er faktisk til her på forumet ( telle tråden :ph34r: )

Så hvis bruker1 skrev:

21456

 

og bruker2 skrev:

21457

 

og jeg trykker på add knappen i programmet da skal jeg få opp

21458 på posten :)

 

er det mulig eller bare noe jeg kan glemme?

Evnt. andre språk som kan dette?

Lenke til kommentar
Videoannonse
Annonse

Du må (bør) bruke regex til dette (og webclient)

 

Du laster ned siden med WebClient, og parser teksten med regex. Det du må deretter lete etter er den posten med den høyeste post-counten og legge til 1.

 

Hvis du ikke kan VB.NET fra før, er dette neppe det første du begir deg ut på.

Dessuten er det juks :p

Lenke til kommentar

Juks nei :p Hva om det kan gjøre det lettere for forum brukere :grin:

Jeg kan VB fra før av men aldri brukt regex.

 

EDIT:

 

Trenger hjelp med det regex greiene + sjekke tallet på siste posten.

Trenger også hjelp med timer for å oppdatere siden etter XX antall sekunder (tenk jeg sliter med det :()

Endret av Gjest
Lenke til kommentar

Regex tar litt tid å lære seg, men det er ikke egentlig så vanskelig.

 

For eksempel:

"hei på deg"

Vil kun matche en string som inneholder "hei på deg"

Du kan derimot lete etter spesifikke patterns, for eksempel for å lete etter et tall

 

"[0-9]+" vil lete etter et tall som inneholder minst étt siffer.

Du kan gruppere searches ved navn ved å sette

"(?<EtTall>[0-9]+)" som gjør at den vil dukke opp som "EtTall" i Groups listen dersom en match ble funnet.

 

Mer enn dette må du nesten lese deg til selv, fordi det er endel å lære seg som jeg ikke egentlig kan lære deg her og nå. Bare lek litt med det.

 

Regex er ofte helt fantastisk nyttig.

Lenke til kommentar

Leser på regex nå!

 

Men kan du gi meg en kode for at svar.text skal kun inneholde [0-9] ??

 

Takk for hjelpen :D

 

EDIT:

 

Kun [0-9] løst ved hjelp av

If Not IsNumeric(svar.Text) Then

Men jeg vil gå dypere og få til auto svar ved og plusse (+) på en (1) ved siste svar :) Der kan du hjelpe meg vel?

Endret av Gjest
Lenke til kommentar

Regex er et tekst søke-verktøy.

 

Det du først må gjøre, er å laste ned den aktuelle siden, for eksempel med WebClient.

Deretter må du lete etter dette for eksempel

<div class="postcolor" id='post-13171625'>
</div>

En regex for dette kan bli

<div class="postcolor" id='post-[0-9]+'>(?<PostText>.*)</div>

Hvor da gruppen PostText vil inneholde teksten inne i posten.

 

Deretter må du lete etter et tall i denne teksten

 

som kan være

 

[0-9]+

 

Hvis denne matcher, gjør du Value om til integer med Integer.Parse, og plusser på 1.

Hvordan du skal deretter lage en ny post, må du nesten sjekke ut selv, fordi det er juks :)

Lenke til kommentar

Haha Wubbable :p

----

 

Ok GeirGrusom, det var avansert :!:

For å finne siste posten i tråden har jeg gjort slik:

WebBrowser1.Navigate("http://www.diskusjon.no/index.php?showtopic=1077284&view=getlastpost")

Den fungerer og jeg håper til siste posten, der brukeren ser tallet som er postet ;) Noen måte vi kan bruke regex her?

Endret av Gjest
Lenke til kommentar

Du må hente ut HTML koden som blir generert, og bruker regex på den.

 

Den siste matchen vil sannsynligvis inneholde det høyeste tallet.

 

Bruk regexen for HTML node som jeg skrev for å finne de forskjellige postene, deretter kan du bruke den for nummer for å finne tallet inne i den.

 

Jeg sitter på en linux maskin nå, så jeg kan ikke teste alt dette selv.

 

Edit: poenget med telletråden forsvinner hvis du lager en telletråd-bot, gjør den ikke? :p

 

Edit2: Det er heller ikke nødvendig å bruke hverken IsNumeric eller TryParse, siden regexen har allerede passet på at det er et heltall som står der. Bruk vanlig Parse, det vil uansett aldri komme noen exceptions.

Endret av GeirGrusom
Lenke til kommentar

Ikke for å bumpe!

----

 

Jeg klarer ikke det her nå :p Har fått tips om splitt funksjonen (virker det?)

Og hvordan skal jeg klare og hente den siste posten med tallet? Har jo:

WebBrowser1.Navigate("http://www.diskusjon.no/index.php?showtopic=1077284&view=getlastpost")

for å navigere til sisteposten, kanskje det går han å bruke? =S

Lenke til kommentar

Jeg kan skrive litt kode fra hukommelsen

 

Dim post_reg As Regex = new Regex("<div class="postcolor" id='post-[0-9]+'>(?<PostText>.*)</div>", RegexOptions.IgnoreCase)

Dim m As Match = post_reg.Match(WebBrowser1.PageHTML)
Dim posts As New List(Of String)
Do While m.Success
 Posts.Add(m.Groups("PostText"))
 m = m.NextMatch()
Loop

 

Nå skal du ha en liste over alle postene i tråden.

Lenke til kommentar

Da tester vi det ;) Tusen Takk!

 

Kommer med tilbakemeldinger, feilmeldiner straks!

 

EDIT:

 

(WebBrowser1.PageHtml)

Blå strek under "pagehtml" hva skal stå?

(m.Groups("PostText"))

Blå strek under hele linjen =S

Endret av Gjest
Lenke til kommentar

En feilmelding sier mer enn tusen ord... hvis en ordlegger seg veldig dårlig altså.

 

Uansett, bare les feilmeldingen.

 

Som sagt så dro jeg dette rett ut av ræva, og forventet egentlig at du satt inn de riktige bitene, fordi jeg er for slapp til å slå opp i MSDN for deg, for det skal du kunne klare utmerket godt selv.

Lenke til kommentar

(m.Groups("PostText")) - her sier den at den ikke kan bli konvertert til string

(WebBrowser1.PageHtml) - her sier den at PageHtml ikke er noe medlem av webbrowser1

 

Noen andre som kan hjelpe meg :)

Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...