#vbscript
#vbscript
Вопрос:
Я получаю синтаксическую ошибку, но не могу понять, почему. В настоящее время я пишу некоторый скрипт на vbs и я новичок в vbs. Поскольку поведение этого скрипта меня смущает, у меня возникла мысль, что я сделал что-то не так. вот мой код:
Option Explicit
Const read =1,overwrite=2,append=8 'constants for parameters of OpenTextFile command
Dim fos,i,ofile,text,month,day,year,hour,minute,day2
Set fos =CreateObject("Scripting.FileSystemObject")
'fos.OpenTextFile("path",type)
ofile =fos.OpenTextFile("C:UsersmartinDesktoptxtReminderV1_0datentermin1.txt",1)
'read a date from a txt file
day=ofile.readline
month=ofile.readline
year=ofile.readline
hour=ofile.readline
minute=ofile.readline
set ofile=ofile.close
wscript.echo "abcde" 'i never get a messagebox "abcde" and i dont know why
If day eqv "01" then day2="first" 'use of eqv or = seems to be meaningless
ElseIf day="02" day2="second"
ElseIf day="03" day2="third"
Else day2=day amp; "-th"
End if
msgbox "2"
text="the " amp; day2 amp; " of "amp; month amp; " " amp; year amp; " at "amp; hour amp;":"amp; minute amp;" o'clock"
msgbox "3"
msgbox text
Он должен считывать дату и время из текстового файла (имя: «termin1»), расположенного в папке и выглядящего следующим образом:
01
07
2014
19
20
Я не очень далеко продвинулся.
Если я запускаю это, я получаю следующее сообщение об ошибке:
Возможно, извините за плохой перевод (я немец)
Line: 23
token/char: 5
Error: Syntaxerror
Code: 800A03EA
Source: Compilationerror in Microsoft VBScript
Так что это было бы «E» моего первого Elseif.
Но поскольку я посмотрел это на Youtube и на нескольких веб-сайтах, синтаксис правильный.
Также, хотя я вызываю echo в строке 20 («abcde»), я никогда не получаю никакого echo.
Мое единственное предположение заключается в том, что я неправильно использовал какие-либо объекты или нарушил какие-либо правила, которые я еще не знаю, потому что мне не хватает опыта.
Ответ №1:
В вашем коде есть несколько проблем.
-
Однострочный синтаксис (
If foo Then bar
) не поддерживаетсяElseIf
, и даже если бы это было так, вам все равно пришлось бы поместить весь оператор в одну строку. В вашем случае вы должны использовать блочный синтаксис:If condition1 Then ... ElseIf condition2 Then ... ElseIf condition3 Then ... Else ... End If
-
eqv
недопустимый оператор сравнения в VBScript. Используйте=
. Day
это встроенная функция, поэтому ее не следует использовать в качестве переменной. То же самое касаетсяMonth
,Year
,Hour
иMinute
. Вместо этого используйте другие имена переменных.
Подводя итог, измените это:
day=ofile.readline
month=ofile.readline
year=ofile.readline
hour=ofile.readline
minute=ofile.readline
set ofile=ofile.close
wscript.echo "abcde" 'i never get a messagebox "abcde" and i dont know why
If day eqv "01" then day2="first" 'use of eqv or = seems to be meaningless
ElseIf day="02" day2="second"
ElseIf day="03" day2="third"
Else day2=day amp; "-th"
End if
в это:
dayRead = ofile.ReadLine
monthRead = ofile.ReadLine
yearRead = ofile.ReadLine
hourRead = ofile.ReadLine
minuteRead = ofile.ReadLine
ofile.Close
Wscript.Echo "abcde"
If dayRead = "01" Then
day2 = "first"
ElseIf dayRead = "02" Then
day2 = "second"
ElseIf dayRead = "03" Then
day2 = "third"
Else
day2 = dayRead amp; "-th"
End If
и ошибки исчезнут.
Комментарии:
1. очень, очень полезно, спасибо. сейчас все работает. пока 🙂
Ответ №2:
Попробуйте это
If day = "01" then day2="first" 'use of eqv or = seems to be meaningless
ElseIf day="02" then day2="second"
ElseIf day="03" then day2="third"
Else day2=day amp; "-th"
End if