2014-09-18 1 views
0

Я уже несколько дней кодируюсь в WSH, и совсем недавно метод WScript.Echo() начал печатать только части строки, или он положил бы конец строки в начале, так что он смешался. Я использую Win7 pro x64. Это функция, которая содержит сломанную Echo() метода:WScript.Echo() только печатает часть строки

function age() { 
    if (!/\d*/.test(specimen[AGE]) || !/\d*/.test(comp[AGE])) { 
     WScript.Echo('ERROR: age value for specimen or comp not valid') 
     WScript.Sleep(10000); 
     WScript.Quit(); 
    } 

    WScript.Echo("specimen[AGE] = ", specimen[AGE], " and comp[AGE] = ", comp[AGE]) 

    ageAdjValue = (parseInt(specimen[AGE]) * 250) - (parseInt(comp[AGE]) * 250) 
    adjArray[AGE] = ageAdjValue; 

    //log adjArray 
    for (i=0; i < adjArray.length; i++) { 
     WScript.Echo(adjArray[i]) 
    } 
} 

Это выход:

and comp[AGE] = 12 
SKIP 
SKIP 
SKIP 
SKIP 
SKIP 
0 
0 
? 
0 
0 
0 
2500 
0 
0 

Сообщения на вершине не включает в себя образец [ВОЗРАСТ] часть, вместо этого он имеет пустым пространство.

Теперь, чтобы увидеть, если это из-за того, что содержится в элементе образца [ВОЗРАСТ], я изменил его к образцу [АДРЕС], как это:

WScript.Echo("specimen[AGE] = ", specimen[ADDRESS], " and comp[AGE] = ", comp[AGE]) 

Это был новый выход:

and comp[AGE] = 12ings Ct. 
SKIP 
SKIP 
SKIP 
SKIP 
SKIP 
0 
0 
? 
0 
0 
0 
2500 
0 
0 

Он поставил адрес в конце, а не в начале и печатается только часть адреса ...

затем я заметил, что в строке предшествующей specimen[ADDRESS], строка не совпадает с переменной ... и для ада этого я изменил его на «образец [АДРЕС]», чтобы соответствовать, как это:

WScript.Echo("specimen[ADDRESS] = ", specimen[ADDRESS], " and comp[AGE] = ", comp[AGE]) 

Теперь я совершенно невежественны, почему .. ., но выход изменен, чтобы включить 2 дополнительных символов полного адреса в конце ...

and comp[AGE] = 1263 Kings Ct. 
SKIP 
SKIP 
SKIP 
SKIP 
SKIP 
0 
0 
? 
0 
0 
0 
2500 
0 
0 

То же самое происходит, когда я использую оператор + для конкатенации строк вместо запятых. Что может быть причиной этого?

ответ

1

(1) Эффект, казалось бы, отсутствующих частей строк WScript.Echo'ed вызывается встроенный «\ г» в данных:

WScript.Echo("A", "BB", "CCC"); 
WScript.Echo("A\r", "BB", "CCC"); 
=> 
A BB CCC 
BB CCC 

(2) Для проверки подозреваемых, «цитата» данные:

WScript.Echo(">" + "A" + "<"); 
WScript.Echo(">" + "A\r" + "<"); 
=> 
>A< 
<A 

(3) Он никогда не 'то же самое', когда вы wscript.echo список параметров (пространство сепаратора) против конкатенации (нет пространства сепаратора):

WScript.Echo("A", "BB", "CCC"); 
WScript.Echo("A" + "BB" + "CCC"); 
=> 
A BB CCC 
ABBCCC 

(4)/все */- т.е. ищет нулевой или более whatevers в строке через RegExp - бесполезно большую часть времени:

WScript.Echo(/\d*/.test("full of sequences of zero or more digits")); 
WScript.Echo(/\d+/.test("full of sequences of zero or more digits")); 
WScript.Echo(/\d+/.test("full of 1 sequences of one or more digits")); 
=> 
-1 
0 
-1 
+0

Это подействовало. В частности, я заменил невидимые \ r на 'replace()': 'WScript.Echo (" образец [ADDRESS] = ", образец [ADDRESS] .replace (/ \ r /, '')" и comp [AGE ] = ", comp [AGE])' –