Member 14156312 Ответов: 2

Проверьте наличие или отсутствие данных в файле, проверив строку 2 на 2 с помощью vbscript




I have a file like this : 7G8h6Tghstwt6Y.y8 . Then, I have a string data like this : "2w" & "fr" & "7G" I am going to check whether my string data exist in the file or not.


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

<pre lang="vb"><pre>

filepath = "C:\Users\Desktop\TS.txt"
substrToFind = "2w" & "fr" & "6J"

For i = 1 To Len(tmpStr) Step 2
    If InStr(tmpStr, substrToFind) <= 0 Then
        WScript.Echo "0:"
    Else
        WScript.Echo "1"
    End If

Next

OriginalGriff

Это не очень хороший вопрос - мы не можем понять из этого малого, что вы пытаетесь сделать.
Помните, что мы не можем видеть ваш экран, получить доступ к вашему жесткому диску или прочитать ваши мысли - мы получаем только то, что вы печатаете для работы. Итак, расскажите нам, что происходит, чего вы не ожидали, или не произошло, что вы сделали. Расскажите нам, что вы сделали, чтобы это произошло, что вы пытались выяснить, почему, где вы застряли, когда вам нужна помощь.
На данный момент все, что у нас есть, - это расплывчатое описание и крошечный кусочек кода, который не делает ничего слишком очевидного.

Используйте виджет "улучшить вопрос", чтобы отредактировать свой вопрос и предоставить более подробную информацию.

2 Ответов

Рейтинг:
0

CHill60

Ну, это всегда хорошая идея, чтобы на самом деле открыть файл первым!

Dim objFile, tmpStr, objFSO
Const ForReading = 1
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile= objFSO.OpenTextFile("C:\Users\Desktop\TS.txt", ForReading)
Тогда вы можете прочитать его строка за строкой, если действительно хотите...
Do While Not objFile.AtEndOfStream
   tmpStr = objFile.readline
   ' Do your checks in here
Loop
objFile.Close
Или вы можете просто прочитать весь файл целиком
tmpStr = objFile.ReadAll
Ваша следующая проблема-это то, что вы пытаетесь найти substrToFind = "2w" & "fr" & "6J" на самом деле это приведет к тому, что вы попытаетесь найти строку
"2wfr6J"
- Я не думаю, что это действительно то, что вы имеете в виду. Вы должны искать 2w, fr и 6J отдельно.
Dim b1, b2, b3
b1 = False : b2 = False : b3 = False
Const vbTextCompare = 1
If Instr(1, tmpStr, "2w", vbTextCompare) > 0 Then
    b1 = True
End If
If Instr(1, tmpStr, "fr", vbTextCompare) > 0 Then
    b2 = True
End If
If Instr(1, tmpStr, "6J", vbTextCompare) > 0 Then
    b3 = True
End If
If b1 And b2 And b3 Then
    WScript.Echo "Found"
End If
Также обратите внимание, что я сделал поиск текстовым поиском - по умолчанию для Instr используется двоичный код.

Наконец, вот некоторые справочные материалы - всегда хорошее место для начала
Метод VBScript - OpenTextFile[^]
Метод VBScript - ReadAll[^]
Функция VBScript - InStr[^]


Member 14156312

Спасибо, отличное решение. Но я все равно получаю имя ошибки redifined vbTextCompare

CHill60

Затем удалите линию Const vbTextCompare = 1Вы, должно быть, уже где-то определили его (или он предопределен для вас... прошло много времени с тех пор, как я использовал vbScript)

Member 14156312

Но это не сработало. с помощью этого кода ниже

Member 14156312

Но это выглядело не работать
Тусклый b1, b2, b3
Dim objFile, tmpStr, objFSO
Const ForReading = 1
Set objFSO = CreateObject("Scripting.Filesystemobject, с")
Set objFile= objFSO.OpenTextFile("C:\Users\TT.txt", ForReading)

tmpStr = objFile.ReadAll
WScript.Эхо tmpStr

b1 = False : b2 = False : b3 = False
Если Instr(1, tmpStr, "2w") > 0, то
В1 = истина
Конец, Если
Если Instr(1, tmpStr, "fr") > 0, то
В2 = истина
Конец, Если
Если Instr(1, tmpStr, "6J") > 0, то
В1 = истина
Конец, Если
Если b1 и b2 и b3 то

WScript.Эхо "Найдено"
Конец, Если

CHill60

Я обновил свое решение - я не установил значение для b3 (не отредактировал его должным образом после копирования+вставки). Где он сказал

If Instr(1, tmpStr, "6J") > 0 Then
b1 = True
End If
это должно было читать
If Instr(1, tmpStr, "6J") > 0 Then
b3 = True
End If

Member 14156312

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


Тусклый b1, b2, b3
Dim objFile, tmpStr, objFSO
Const ForReading = 1
Set objFSO = CreateObject("Scripting.Filesystemobject, с")
Set objFile= objFSO.OpenTextFile("C:\Users\TST.txt", ForReading)

tmpStr = objFile.ReadAll
WScript.Эхо tmpStr

b1 = False : b2 = False : b3 = False
Если Instr(1, tmpStr, "2w") > 0, то
В1 = истина
Конец, Если

Если Instr(1, tmpStr, "fr") > 0, то
В2 = истина
Конец, Если

Если Instr(1, tmpStr, "6J") > 0, то
Б3 = истина
Конец, Если

Если b1 и b2 и b3 то
WScript.Эхо "Найдено"

Конец, Если

CHill60

"Строка"...все 3 строки должны присутствовать для того, чтобы это слово было найдено.
Вы изменили это, чтобы сделать двоичное сравнение вместо текста..попробуйте положить это обратно

Member 14156312

Что ты имеешь в виду? Я ничего не меняю в этом коде, я просто удаляю vbTextcompare

CHill60

Удаление vbTextCompare позволяет InStr по умолчанию использовать двоичное сравнение.
У вас также все еще есть ошибка из моего первоначального поста, которую я исправил для вас. См. комментарий выше

Member 14156312

вы имеете в виду этот код?
Это тоже не работает.

Dim objFile, tmpStr, objFSO
Const ForReading = 1
Set objFSO = CreateObject("Scripting.Filesystemobject, с")
Set objFile= objFSO.OpenTextFile("C:\Users\TST.txt", ForReading)


tmpStr = objFile.ReadAll


Тусклый b1, b2, b3
b1 = False : b2 = False : b3 = False

Если Instr(1, tmpStr, "2w", vbTextCompare) > 0, то
В1 = истина
Конец, Если
Если Instr(1, tmpStr, "fr", vbTextCompare) > 0, то
В2 = истина
Конец, Если
Если Instr(1, tmpStr, "6J", vbTextCompare) > 0, то
Б3 = истина
Конец, Если
Если b1 и b2 и b3 то
WScript.Эхо "Найдено"
Конец, Если

CHill60

"Это не работает" не помогает. Вы проверяете другой файл, чем в вашем решении. Вы также проверяете наличие различных значений - действительно ли файл содержит проверяемый текст?

Member 14156312

Ya, строка ("2w", "fr", "6") содержит TST.txt файл.

CHill60

"6" или "6J"? Быть точным. В вашем решении ниже, которое, как вы утверждаете, работает, эхо-это все три найденных сообщения или только два из них? Потому что ваш код не сильно отличается от моего - вы просто повторяете, что нашли их.

Member 14156312

"6J" . три из найденных эхом сообщений работают.

CHill60

В этом случае мой код тоже должен работать. Однако, чтобы ответить на вопрос, который вы разместили в качестве решения, вам нужно понять, как использовать "else" VBScript Tutorial - Оператор If[^]

Рейтинг:
0

Member 14156312

Это работает. Но я не могу понять, чтобы напечатать результат, если строка не найдена. Есть Идеи? Помогите мне пожалуйста

Dim fb1, fb2, fb3
Dim objFile, FBString, objFSO
Const ForReading = 1
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile= objFSO.OpenTextFile("C:\Users\fitri\Desktop\Project 2\ScanFB\FS_Data\FS_TST.txt", ForReading)

FBString = objFile.ReadAll
WScript.Echo "Feature_Byte : "  & FBString

fb1 = False : fb2 = False : fb3 = False
If Instr(1, FBString, "6J") > 0 Then
	fb1 = True
	WScript.Echo "Found 6J"
End If

If Instr(1, FBString, "fr") > 0 Then
	fb3 = True
	WScript.Echo "Found fr"
End If

If Instr(1, FBString, "jC") > 0 Then
	fb3 = True
	WScript.Echo "Found jC"
End If


CHill60

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