2016-01-11 3 views
-1

Я изучаю regex и vbscript, чтобы добавить текст в .c файл в новой строке, добавив введенный пользователем текст ежемесячно. Я получаю очередную ошибку синтаксиса выражения в строке: 68 символа: 1 из следующего VBScript, и нуждаюсь в помощи сортировки его:Код ошибки синтаксиса регулярного выражения: 800A1399

path = "<C:\Users\Parth\Desktop\C06S3000.C>" 
Set re = New RegExp 

inputstr1 = InputBox("enter short name for recovery month, example: dec2015") 
re.Pattern = "^([a-zA-Z]{3,5}\d{4})$" 
re.IgnoreCase = True 
Do While re.Test(inputstr1) <> True 
    inputstr1 = InputBox("incorrect entry; enter short name for recovery month, example: dec2015") 
Loop 

inputstr2 = InputBox("enter full name for recovery month, example: december_2015") 
re.Pattern = "^([a-zA-Z_]{3,10}\d{4})$" 
re.IgnoreCase = True 
Do While re.Test(inputstr2) <> True 
    inputstr2 = InputBox("incorrect entry; enter full name for recovery month, example: december_2015") 
Loop 

inputstr3 = InputBox("enter names of all affected groups for recovery month separated by commas and single space, example: a1, a2, a3,...") 
re.Pattern = "^(([a-zA-Z_]{1,2}\d{1,2}[,]\s)*)$" 
re.IgnoreCase = True 
Do While re.Test(inputstr3) <> True 
    inputstr3 = InputBox("incorrect entry, enter names of all affected groups for recovery month separated by commas and space, example: a1, a2, a3,... ") 
Loop 
grpString1 = split(inputstr3, ",") 

inputstr4 = InputBox("enter loss percentage for each group separated by commas and a space; example: 0.00283148378304, 0.39331380134641, ...") 
re.Pattern = "^((\d\.\d{14}[,]\s)*)$" 
Do While re.Test(inputstr4) <> True 
    inputstr4 = InputBox("incorrect entry, enter loss percentage for each group separated by commas and a space; example: 0.00283148378304, 0.39331380134641, ... ") 
Loop 
grpString2 = split(inputstr4, ",") 

If UBound(grpString1) = UBound(grpString2) Then 
Else 
    'use more efficient code by implementing class variables with a function, for example, in future versions' 
    'source: https://bytes.com/topic/asp-classic/answers/125942-vbscript-function-returning-multiple-values' 

    response.write("affected group count does not match loss percentage count; reenter these values to match count") 
    inputstr3 = InputBox("enter names of all affected groups for recovery month separated by commas and single space, example: a1, a2, a3,...") 
    re.Pattern = "^(([a-zA-Z_]{1,2}\d{1,2}[,]\s)*)$" 
    re.IgnoreCase = True 
    Do While re.Test(inputstr3) <> True 
    inputstr3 = InputBox("incorrect entry, enter names of all affected groups for recovery month separated by commas and space, example: a1, a2, a3,... ") 
    Loop 
    grpString1 = Split(inputstr3, ",") 

    inputstr4 = InputBox("enter loss percentage for each group separated by commas and a space; example: 0.00283148378304, 0.39331380134641, ...") 
    re.Pattern = "^((\d\.\d{14}[,]\s)*)$" 
    Do While re.Test(inputstr4) <> True 
    inputstr4 = InputBox("incorrect entry, enter loss percentage for each group separated by commas and a space; example: 0.00283148378304, 0.39331380134641, ... ") 
    Loop 
    grpString2 = Split(inputstr4, ",") 
End If 

Set objfso = CreateObject("Scripting.FileSystemObject") 
If objfso.FileExists(path) Then 
    Set objFile = objFSO.OpenTextFile(path).ReadAll 
End If 

'source: http://www.tutorialspoint.com/vbscript/vbscript_split_function.htm' 
ublptm = UBound(grpString1) 
For i=0 To ublptm 'where lptm = loss_pct_avg_monthyear[group] = percent;' 
    lptmStr = lptmstr + "loss_pct_through_[" & grpString1(i) & "] = " & grpString2(i) & ";" & vbCrLf 
Next 

re.Pattern = "(?<=loss_pct_through_([a-zA-Z]{3,5}\d{4})\[([a-zA-Z_]{1,2}\d{1,2})\]\s=\s\d\.\d{14}[;]\n)\n(?=\}\n)" 

'source: http://stackoverflow.com/questions/13588622/using-vbscript-to-find-and-replace-all-multi-line-text-between-curly-braces-of-a' 

objFile = re.Replace(objFile, vbCrLf & lptmstr & vbCrLf) 

, где линия 68 является:

objFile = re.Replace(objFile, vbCrLf & lptmstr & vbCrLf) 

Регулярного выражения шаблон предполагается искать код .c и добавления данных, вводимых пользователем на символ новой строки, начинающиеся с символа новой строки следующим образом:

Исходный файл:

loss_pct_through_nov2015[a4] = 0.13155605112872; 
loss_pct_through_nov2015[a5] = 0.23415898757080; 

loss_pct_through_dec2015[a2] = 0.00283148378304; 
loss_pct_through_dec2015[a3] = 0.39331380134641; 
loss_pct_through_dec2015[a4] = 0.56333929692615; 
loss_pct_through_dec2015[a5] = 0.04051541794440; <-append content from here 
\n 
} 

Обновленный файл:

loss_pct_through_nov2015[a4] = 0.13155605112872; 
loss_pct_through_nov2015[a5] = 0.23415898757080; 

loss_pct_through_dec2015[a2] = 0.00283148378304; 
loss_pct_through_dec2015[a3] = 0.39331380134641; 
loss_pct_through_dec2015[a4] = 0.56333929692615; 
loss_pct_through_dec2015[a5] = 0.04051541794440; 
\n <--new newline character replacing the old one to append content below 
loss_pct_through_jan2016[a2] = 0.04051541794440; 
loss_pct_through_jan2016[a4] = 0.04051541794440; 

} 
+2

Можете ли вы упростить свой пример? –

+1

Не относится к C - язык обработанного текста не имеет значения. И предоставить [mcve]. Правила сайта требуют, чтобы вопрос был самодостаточным. – Olaf

+0

Извинения за беспорядок. Мое намерение состояло в том, чтобы представить детали, чтобы устранить проблему. Я буду убирать будущие должности соответствующим образом. – sda

ответ

1

У вас есть positive lookbehind assertion ((?<=...)) в начале этого выражения:

re.Pattern = "(?<=loss_pct_through_([a-zA-Z]{3,5}\d{4})\[([a-zA-Z_]{1,2}\d{1,2})\]\s=\s\d\.\d{14}[;]\n)\n(?=\}\n)" 

Регулярное выражение двигатель VBScript не поддерживает их.

+0

Если не существует обходного пути, какой язык лучше всего выполнить для моей задачи, так как мне нужно будет использовать «положительный ответ», чтобы найти правильный шаблон. Также, спасибо за изменения! – sda

+0

Утверждения @Parth Lookaround, похоже, поддерживаются механизмом регулярного выражения [.NET] (https://msdn.microsoft.com/en-us/library/az24scfc.aspx), поэтому вы можете использовать их в PowerShell , –

Смежные вопросы