Avatar billede Murphy Juniormester
27. juni 2020 - 14:23 Der er 4 kommentarer

Hjælp til VBS script

Hej. Er der nogle kloge VBS programmører her, jeg mangler lidt hjælp.
Nedenstående 4 kolonner, skal kolonne to skrives ud når første decimal ændre sig.
I nedenstående skal linierne med * skrives i en ny fil
På forhånd mange tak, hvis du vil hjælpe.

2.259    -0.195    39.7    0.00 *
2.260    -0.195    39.7    0.00
2.261    -0.195    39.7    0.00
2.262    -0.195    39.7    0.00
2.263    -0.195    39.7    0.00
2.264    -0.195    39.7    0.00
2.265    -0.195    39.7    0.00
2.266    -0.195    39.7    0.00
2.267    -0.195    39.7    0.00
2.268    -0.195    39.9    0.00
2.269    -0.195    39.9    0.00
2.270    -0.197    39.9    0.00
2.271    -0.197    39.9    0.00
2.272    -0.197    39.9    0.00
2.273    -0.197    39.9    0.00
2.274    -0.197    39.9    0.00
2.275    -0.197    39.9    0.00
2.276    -0.197    39.9    0.00
2.277    -0.197    39.9    0.00
2.278    -0.197    39.9    0.00
2.279    -0.197    39.9    0.00
2.280    -0.197    39.9    0.00
2.281    -0.197    39.9    0.00
2.282    -0.197    39.9    0.00
2.283    -0.197    40.1    0.00
2.284    -0.198    40.1    0.00
2.285    -0.198    40.1    0.00
2.286    -0.198    40.1    0.00
2.287    -0.198    40.1    0.00
2.288    -0.198    40.1    0.00
2.289    -0.198    40.1    0.00
2.290    -0.198    40.1    0.00
2.291    -0.198    40.1    0.00
2.292    -0.198    40.1    0.00
2.293    -0.198    40.1    0.00
2.294    -0.198    40.1    0.00
2.295    -0.198    40.1    0.00
2.296    -0.199    40.3    0.00
2.297    -0.199    40.3    0.00
2.298    -0.199    40.3    0.00
2.299    -0.199    40.3    0.00
2.300    -0.199    40.3    0.00
2.301    -0.199    40.3    0.00
2.302    -0.199    40.3    0.00
2.303    -0.199    40.3    0.00
2.304    -0.199    40.3    0.00
2.305    -0.199    40.3    0.00
2.306    -0.199    40.3    0.00
2.307    -0.199    40.3    0.00
2.308    -0.199    40.3    0.00
2.309    -0.199    40.3    0.00
2.310    -0.200    40.3    0.00*
2.311    -0.200    40.3    0.00
2.312    -0.200    40.3    0.00
2.313    -0.200    40.3    0.00
2.314    -0.310      40.3    0.00*
2315        -0.312      40.3 0.00
Avatar billede ejvindh Ekspert
28. juni 2020 - 10:20 #1
Du har stillet et lignende spørgsmål før, hvor du ikke fik svar, så nu giver jeg lige, hvad jeg kan. Udfordringen for mig er, at det er mange år siden, jeg har programmeret i vbs, og jeg har ikke nogen Windowscomputer, hvor jeg kan prøve eventuel programkode af på.

Men altså: Da det ser ud til at du har noget kode allerede, der kan trawle dataene igennem, tænker jeg egentlig bare du mangler en metode til at afdække, hvornår kriteriet er opfyldt. Her tænker jeg den nemmeste måde må være at gange tallet med 10, fjerne alle decimaler, og herefter undersøge om tallet stadig er identisk med det forrige tilsvarende tal.

Heltallet kan du få med fix:
https://www.w3schools.com/asp/func_fix.asp

Int og round ligner også, men så vidt jeg lige kan lure, har du mest brug for fix.
https://www.w3schools.com/asp/func_int.asp
https://www.w3schools.com/asp/func_round.asp
Avatar billede Murphy Juniormester
28. juni 2020 - 11:25 #2
Hej
Tak for svar
Hvor i denne kode ville du sætte det ind??

Set fso = CreateObject("Scripting.FileSystemObject")
Set re = New RegExp
re.Pattern = " +" 'matcher mere end ét mellemrum i række
isFound001 = false
lastLine = ""
lastDbl =  1.79769313486231E+308
Set inFile  = fso.OpenTextFile("case2.txt")
Set outFile = fso.CreateTextFile("slut.txt", True)
Do Until inFile.AtEndOfStream
    line = inFile.ReadLine
    line = Replace(line, vbTab, " ") 'Erstat Tab med Space
    line1white = re.Replace(line, " ") 'højest 1 mellemrum
    lineArr = Split(line1white, " ")
  If isFound001 And CDbl(Replace(lineArr(1),".",",")) > lastDbl Then
    Exit Do
    End If
    Do 'null loop for at simulere Continue
    'Første -0.100 
    If Not isFound001 And lineArr(1) = "-0.100" Then
  curr = -0.100
      lastDbl = CDbl(Replace(lineArr(1),".",","))
    isFound001 = True
    Exit Do 'Continue
End If
    'Sidste linje i hver serie
    If curr <> lineArr(1) And isFound001 Then
        outFile.WriteLine lastLine
        curr = lineArr(1)
        lastDbl = CDbl(Replace(lineArr(1), ".", ","))
    End If
    Loop While False 'slut på null loop
    lastLine = line
Loop

outFile.WriteLine lastLine 'Sidste linje udskrives

inFile.Close
outFile.Close
Avatar billede ejvindh Ekspert
28. juni 2020 - 12:02 #3
Som skrevet, så jeg godt dit forrige spørgsmål også, og havde jeg haft et mere kodenært svar på dit spørgsmål, havde jeg givet det sidst du oprettede spørgsmålet.

Så vidt jeg kan lure, så handler indeholder variablen "lineArr(1)" den kolonne, som du søger efter. Så det er nok den, du skal gøre ovenstående på. Men jeg kan ikke helt gennemskue, hvorfor ovenstående kode ser ud som den gør, og derfor vil jeg helst ikke vove mig ud i et bud på, hvor det skal lægges.

Men altså udenfor det store loop skal du definere en "prev" variabel, som du først sætter til at være noget, som aldrig vil være i "lineArr(1)". Og så når "lineArr(1)" er blevet defineret (i split-sætningen) undersøger du om "Fix(lineArr(1)*10)" er forskellig fra "prev", og hvis den er det, skrives den ud. Herefter sættes "prev" til at være lig med "Fix(lineArr(1)*10)".
Avatar billede Murphy Juniormester
28. juni 2020 - 12:32 #4
Mange tak,jeg prøver.
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

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