Avatar billede henriktha Nybegynder
27. august 2005 - 12:11 Der er 12 kommentarer og
1 løsning

Finde tilfældig linie i .txt fil og tilfældigt valg af et tal

Jeg skal bruge noget kode der automatisk vælger en linie i en tekstfil.

Ligeledes skal jeg bruge en kode der automatisk vælger et tal imellem 200 og 3000 (gerne med et interval på 50 hvis det er muligt ??)

Nogen der kan hjælpe med det ??
Avatar billede softspot Forsker
27. august 2005 - 13:09 #1
Det lyder som om du har brug for Randomize- og Rnd-funktionerne...

Først læser du hele tekstfilen ind i en streng og så splitter du den ved linieskift

arrTekst = Split(filindhold, vbCrLf)

så kalder du

Randomize

og derefter

tilfaeldig_linie_indeks = CInt(Ubound(arrTekst)) * Rnd()

nu har du et linieindeks hvormed du kan hente linien fra dit array

tilfaeldig_linie = arrTekst(tilfaeldig_linie_indeks)

På samme måde kan du finde et tilfældigt tal mellem 200 og 3000. Du skal have fat i difference mellem 200 og 3000 (dvs. 3000-200=2800) og da det skal være i steps af 50 skal den difference divideres med 50 (altså 2800/50=56). Så kan du bruge Rnd som vist tidligere:

tilfaeldigt_tal_i_interval = CInt(56) * Rnd() * 50 + 200

skulle jeg mene...
Avatar billede henriktha Nybegynder
27. august 2005 - 13:57 #2
Skulle gerne bruge noget kode... er ikke så god til det her ;-)

Hvordan henter jeg variablen Sleeper:
Sub SleepTimer
randomize
Sleeper = (Int((1 - 100 + 1) * Rnd + 100)) * 1000
End Sub   

Ind i denne kode:
do   
    WScript.Sleep "SleeperVariablen jeg skal have hjælp til" 
    Msgbox("Den tilfældige linie Jeg skal have hjælp til")
loop
Avatar billede henriktha Nybegynder
27. august 2005 - 13:58 #3
Desuden returnerer dine tilfældige tal med decimaler og er IKKE delelig med 50, så den Sleeper kode jeg har fundet ud af nu virker fint, dropper det med intervaller på 50 ;-)
Avatar billede softspot Forsker
27. august 2005 - 14:22 #4
Decimalerne kan du fjerne med CInt omkring hele udtrykket:

tilfaeldigt_tal_i_interval = CInt(56 * Rnd() * 50 + 200)

og

tilfaeldig_linie_indeks = CInt(Ubound(arrTekst) * Rnd())


Jeg kunne forestille mig at din kode så nogenlunde således ud:


Randomize

Function SleepTimer
  SleepTimer = (Int((1 - 100 + 1) * Rnd + 100)) * 1000
End Function   

'Du læser en tekstfil med FSO (FileSystemObject) således:
function FindTekst()
  ' Læs filen
  set fso = CreateObject("Scripting.FileSystemObject")
  set txt = fso.OpenTextStream(filsti_og_navn, ForReading)
  filindhold = txt.ReadAll
  txt.Close

  ' Split filen ved linieskift
  arrTekst = Split(filindhold, vbCrLf)

  ' Find et indeks
  Randomize
  tilfaeldig_linie_indeks = CInt(Ubound(arrTekst) * Rnd())

  ' Læs linien
  FindTekst = arrTekst(tilfaeldig_linie_indeks)
end function

do   
    WScript.Sleep Sleeper
    Msgbox(FindTekst)
loop
Avatar billede softspot Forsker
27. august 2005 - 14:23 #5
Må jeg i øvrigt anbefale MS' reference- og brugermanual til VBScript:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/vtoriVBScript.asp?frame=true
Avatar billede henriktha Nybegynder
27. august 2005 - 14:39 #6
Jeg får en Objektet understøtter ikke denne egenskab eller metode 'fso.OpenTextStream'
Avatar billede softspot Forsker
27. august 2005 - 14:45 #7
Prøv med denne linie i stedet

set txt = fso.OpenTextFile(filsti_og_navn, ForReading)
Avatar billede henriktha Nybegynder
27. august 2005 - 14:47 #8
Nu får jeg en Procedurekaldet eller argumentet er ugyldigt
Avatar billede henriktha Nybegynder
27. august 2005 - 14:51 #9
Fandt ud af at dette virkede

Set fso = CreateObject("Scripting.FileSystemObject")
  Set file = fso.OpenTextFile("C:\dell\sites.txt")
Avatar billede softspot Forsker
27. august 2005 - 14:54 #10
ForReading er åbenbart ikke defineret, så værdien der stå i stedet er 1, såledse:

set txt = fso.OpenTextStream(filsti_og_navn, 1)

Du har husket at lægge sti og filnavn på tekstfilen i variablen filsti_og_navn, ikk'? :)
Avatar billede softspot Forsker
27. august 2005 - 14:54 #11
Ok, fint nok :)
Avatar billede henriktha Nybegynder
27. august 2005 - 15:18 #12
Jeg takker.....
Avatar billede softspot Forsker
27. august 2005 - 15:21 #13
Velbekomme og tak for point :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester