Member 13163682 Ответов: 1

VB скрипт для поиска строки


у меня есть набор карт в текстовом файле, как показано ниже.

псевдоним карты elr72_511
тип regular byRule
роли заменяют admin на owner_roles
комментарий Converted_from_elr72_rule_31
до 1/2 / x29, 1/3/x27
от 1/4/Х5 Х6..
выход
псевдоним карты elr72_582
тип regular byRule
роли заменяют admin на owner_roles
комментарий Converted_from_elr72_rule_274
до 1/2 / x29, 1/3/x27
от 1/4/Х5 Х6..
выход

из этого текстового файла мне нужно найти все названия карт, которые собираются для 1/2/х29.

Что я уже пробовал:

Dim objFSO, filepath, objInputFile, tmpStr, substrToFind

Set objFSO = CreateObject ("Scripting.Filesystemobject, с")
filepath = "C:\Users\Desktop\New текст Document.txt"
substrToFind = " 1/2 / x27"
Set objInputFile = objFSO. OpenTextFile(путь к файлу)
tmpStr = objInputFile. Read
Если InStr (tmpStr, substrToFind) <= 0, то
WScript.Эхо " нет совпадений"
Ещё
WScript.Эхо " нашло совпадение"
Конец, Если

1 Ответов

Рейтинг:
9

NightWizzard

Есть два простых способа решить эту проблему:
1) если правильно, что каждая карта заканчивается ключевым словом "exit" и если это ключевое слово не будет встречаться в других позициях карты, вы можете прочитать все содержимое файла в одну строку, а затем использовать метод split, чтобы превратить строку в массив, используя "exit" в качестве разделителя. С помощью цикла For-Next-Loop вы можете проверить каждый элемент массива на наличие искомой строки.

2) Вы можете использовать объект regex для анализа содержимого файла - это было бы более элегантно и проще, но требует хорошего понимания регулярных выражений.

Вот пример, созданный с помощью VBScript:

Dim objFSO, filepath, objInputFile, tmpStr, substrToFind, arrRecords, r
Const ForReading = 1

Set objFSO = CreateObject("Scripting.FileSystemObject")
filepath = "C:\Users\Desktop\New Text Document.txt"
substrToFind = "1/2/x29,1/3/x27"
Set objInputFile = objFSO.OpenTextFile(filepath, ForReading)
tmpStr = objInputFile.ReadAll()


If InStr(tmpStr, substrToFind) <= 0 Then
	WScript.Echo "No matches"
Else
	arrRecords = Split(tmpStr, "exit")
	
	For r = LBound(arrRecords, 1) To UBound(arrRecords, 1)
		If Instr(arrRecords(r), substrToFind) > 0 Then
			MsgBox "'" & substrToFind & "' found in " & (r +1) & ". record"
		End If
	Next
	
	MsgBox "No more matches found"
End If


Member 13163682

не могли бы вы поделиться кодом в соответствии с вашим 1-м предложением, я попробовал с split, но безуспешно.