Vinnaren i pepparkakshustävlingen!
2011-06-17, 09:49
  #1
Medlem
Hej,

Brukar normalt inte leka med vbscript, men nu har jag ett problem jag måste lösa i vb på grund av att maskinen har detta installerat på sig från början.

Får in ett datum format i en sträng som ser ut så här "Monday, Mars 30, 2011 at 2:00 PM:". Behöver konvertera detta till ett format som funkar med windows scheduletask enligt nedan.

schtasks.exe /F /Create /tn set_maintmode /tr "scriptname" /sc once /st 02:00:00 /sd 05/30/2011 /RU System

Kod:
myDate="Monday, Mars 30, 2011 at 2:00 PM:" 
a=Split(myDate,",") 
MonthDay=trim(a(1)) 
YearTime=trim(a(2)) 
  
a=Split(MonthDay) 
Month=trim(a(0)) 
Day=trim(a(1)) 
  
a=Split(YearTime) 
Year=trim(a(0)) 
Clock=trim(a(2)) 
Gr=trim(a(3)) 
Clock=Clock & ":00" & " " & Replace(Gr,":","") 
  
Clock=CDate(Clock) 
newDate = MonthDay & ", " & Year 
newDate=CDate(newDate) 
  
a=Split(newDate,"-") 
Year=trim(a(0)) 
Month=trim(a(1)) 
Day=trim(a(2)) 
  
tDate=Month & "/" & Day & "/" & Year 

Sen använda variabeln tDate och Clock

Fungerar utmärkt på min PC. Men så fort byter dator är det annan cultureinfo så det är inte säkert att formatet från CDate blir rätt. Hur skjuton löser man det? Hittar ingen function i vbscript där man kan skicka med cultureinfo eller om det går sätta en enviroment variabel i dos prompten programet kör i för alltid få datum formatet rätt på alla maskiner? Hoppas att någon har kompetens nog att kunna detta problem.
Citera
2011-06-17, 11:13
  #2
Medlem
gadzooxs avatar
VBScript är inte VB.NET.


Men du kan få ett svar ändå. Du krånglar till det för dig med alla dessa Split och Trim.
Kod:
s = "Monday, Mars 30, 2011 at 2:00 PM"

s = Split(s, ", ", 2)(1)  ' Klipp bort "Monday, "
tmp = Split(s, " at ") ' Splitta datum och tid

d1 = CDate(tmp(0))
t1 = CDate(tmp(1))

datum = Month(d1) & "/" & Day(d1) & "/" & Year(d1)
tid = FormatDateTime(t1, vbShortTime) & ":00"

Msgbox(datum)
Msgbox(tid)

Hur det ligger till med CultureInfo-problemet vet jag inte, har ingen lust att ställa om på min burk och testa. Har dock testat att modda strängen du tar emot ("Monday, Mars 30, 2011", "Monday, 30 Mars 2011", "Monday, 2011-03-30" osv). Inte för att strängen skulle se ut på något annat sätt i ditt fall, men ändå, CDate verkar ju förstå sig på en hel del.... Kan det vara du som splittar och trimmar sönder strängen så pass att CDate inte längre har en chans att fatta vad det står?

Är du säker på att burken inte har .NET Framework installerat? Så mycket trevligare att jobba i något vettigt språk typ C#. Kolla om du har mappen C:\windows\microsoft.net\Framework och vilka versioner som i så fall ligger däri.
Citera
2011-06-17, 11:13
  #3
Medlem
LeperJesuss avatar
Citat:
Ursprungligen postat av nighter
Hej,

Brukar normalt inte leka med vbscript, men nu har jag ett problem jag måste lösa i vb på grund av att maskinen har detta installerat på sig från början.

Får in ett datum format i en sträng som ser ut så här "Monday, Mars 30, 2011 at 2:00 PM:". Behöver konvertera detta till ett format som funkar med windows scheduletask enligt nedan.

schtasks.exe /F /Create /tn set_maintmode /tr "scriptname" /sc once /st 02:00:00 /sd 05/30/2011 /RU System

Kod:
myDate="Monday, Mars 30, 2011 at 2:00 PM:" 
a=Split(myDate,",") 
MonthDay=trim(a(1)) 
YearTime=trim(a(2)) 
  
a=Split(MonthDay) 
Month=trim(a(0)) 
Day=trim(a(1)) 
  
a=Split(YearTime) 
Year=trim(a(0)) 
Clock=trim(a(2)) 
Gr=trim(a(3)) 
Clock=Clock & ":00" & " " & Replace(Gr,":","") 
  
Clock=CDate(Clock) 
newDate = MonthDay & ", " & Year 
newDate=CDate(newDate) 
  
a=Split(newDate,"-") 
Year=trim(a(0)) 
Month=trim(a(1)) 
Day=trim(a(2)) 
  
tDate=Month & "/" & Day & "/" & Year 

Sen använda variabeln tDate och Clock

Fungerar utmärkt på min PC. Men så fort byter dator är det annan cultureinfo så det är inte säkert att formatet från CDate blir rätt. Hur skjuton löser man det? Hittar ingen function i vbscript där man kan skicka med cultureinfo eller om det går sätta en enviroment variabel i dos prompten programet kör i för alltid få datum formatet rätt på alla maskiner? Hoppas att någon har kompetens nog att kunna detta problem.

Hej!
Eftersom det här är .net forumet är ju förstås det väldigt enkla svaret att du skriver ett par rader c# där du kollar cultureinfo och genererar ett korrekt vbscript oavsätt datorns inställningar. Denna kodsnutt kan du ju schedulera att köras före ditt andra script.
Citera
2011-06-17, 12:06
  #4
Medlem
Citat:
Ursprungligen postat av gadzoox
VBScript är inte VB.NET.


Men du kan få ett svar ändå. Du krånglar till det för dig med alla dessa Split och Trim.
Kod:
s =  
s = Split(s, ", ", 2)(1)  ' Klipp bort "Monday, "
tmp = Split(s, " at ") ' Splitta datum och tid

d1 = CDate(tmp(0))
t1 = CDate(tmp(1))

datum = Month(d1) & "/" & Day(d1) & "/" & Year(d1)
tid = FormatDateTime(t1, vbShortTime) & ":00"

Msgbox(datum)
Msgbox(tid)

Hur det ligger till med CultureInfo-problemet vet jag inte, har ingen lust att ställa om på min burk och testa. Har dock testat att modda strängen du tar emot ("Monday, Mars 30, 2011", "Monday, 30 Mars 2011", "Monday, 2011-03-30" osv). Inte för att strängen skulle se ut på något annat sätt i ditt fall, men ändå, CDate verkar ju förstå sig på en hel del.... Kan det vara du som splittar och trimmar sönder strängen så pass att CDate inte längre har en chans att fatta vad det står?

Är du säker på att burken inte har .NET Framework installerat? Så mycket trevligare att jobba i något vettigt språk typ C#. Kolla om du har mappen C:\windows\microsoft.net\Framework och vilka versioner som i så fall ligger däri.

Snyggt! Kunde också splitat lite snyggare slängde ihop det lite snabbt som exempel kod för illustrera mitt problem. Tyvärr kommer din kod inte funka på min PC när du splitar så på grund av cultureinfo problemet som jag inte lyckas lösa. Verkar inte finnas någon bra lösning på det problemet i vb tyvärr kanske får försöka hitta något liknande i vbscript som try catch block och testa med olika format tills något sitter. Jävligt fult dock.
Citera
2011-06-17, 13:45
  #5
Medlem
ojns avatar
Vi drar iväg tråden till VB-forumet.
/Moderator
Citera
2011-06-17, 15:12
  #6
Medlem
gadzooxs avatar
Citat:
Ursprungligen postat av nighter
Snyggt! Kunde också splitat lite snyggare slängde ihop det lite snabbt som exempel kod för illustrera mitt problem. Tyvärr kommer din kod inte funka på min PC när du splitar så på grund av cultureinfo problemet som jag inte lyckas lösa. Verkar inte finnas någon bra lösning på det problemet i vb tyvärr kanske får försöka hitta något liknande i vbscript som try catch block och testa med olika format tills något sitter. Jävligt fult dock.
Eller använd ett bättre språk, som sagt. Jag kan nästan lova dig att .NET 2.0 är installerat på burken din utan att jag ens har sett den, och att du därmed kan koda i C# eller VB.NET.
Citera
2011-06-17, 15:52
  #7
Medlem
Citat:
Ursprungligen postat av gadzoox
Eller använd ett bättre språk, som sagt. Jag kan nästan lova dig att .NET 2.0 är installerat på burken din utan att jag ens har sett den, och att du därmed kan koda i C# eller VB.NET.

Hej hade tänkt skriva det i C# vilket jag har mycket högre kompetens inom. Detta var mitt första vbscript. Kan man koda hyffsat i ett språk som fattar man ganska snabbt. Anledningen jag tog vb var att det först skulle bara bli en snabb enkel lösning, så tänkte att jag skriver bara ett snabbt script för lösa problematiken och vb är installerat på alla maskiner. Är inte så sugen på börja om igen nu med c# så kör vidare på detta. Har egentligen inte tiden just nu att skriva det i c#. Det kommer som sagts att köras på ett par 100 maskiner detta så därför blir cultureinfo ganska viktigt. Men jag tror att jag har fått det att fungera hyffsat nu iaf efter en del stök. Tack för hjälpen
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback