Страницы: 1
RSS
VBA сравнение элемента строкового массива с текстом
 
Добрый день Уважаемые Эксперты.

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

Имеется текстовый файл в котором построчно записана следующая информация:
Код
Vasua
Petua
Vovua
Данный текстовый файл заносится в строковый массив построчно функцией Split:
Код
str1 = Split(CreateObject("Scripting.FileSystemObject").Getfile(File_Strok_Poiska).OpenasTextStream(1).ReadAll, vbLf)
Далее следует условная конструкция которая спрашивает, что делать если значение в str1(0) = "Vasua".
Но почему то конструкция не считает что значение взятое из массива равно Текстовому значению
По всей видимости есть некоторый нюанс, который необходимо знать при работе с текстовыми массивами берущими значения из текстовых файлов.

Непосредственно вариант кода:
Код
Sub Obrabotka()

Dim str1() As String
Dim PathFileName$

File_Strok_Poiska = "C:\Тест.txt"
str1 = Split(CreateObject("Scripting.FileSystemObject").Getfile(File_Strok_Poiska).OpenasTextStream(1).ReadAll, vbLf)   'Данный текстовый файл заносится в строковый массив построчно функцией Split

If str1(0) = "Vasua" Then
   MsgBox 1
End If
Stop
End Sub

Прошу помочь разобраться.

Благодарю Вас.
 
IgorBoot, здравствуйте!
Вместо 9-11 строки напишите MsgBox "|" & str1(0) & "|" & vbLf & TypeName(str1(0)) и напишите, что будет в окне
Изменено: Jack Famous - 07.10.2019 12:10:32
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Уважаемый Jack Famous.

Благодарю Вас за ответ. Позвольте уточнить в каком именно окне и что именно написать?
Изменено: IgorBoot - 07.10.2019 12:13:39 (Был добавлен Скриншот)
 
IgorBoot, ну вот и ответ - у вас элемент массива не "Vasua", а "Vasua & vbLf, может и не vbLf, а что-то другое из переноса строки - поэтому и условие не проходит.
Решение: Split делать не по vbLf, а vbLf & что-то ещё. Определить это "что-то ещё" можно, например, циклом по символам строки с отображением их номеров в двух таблицах символов:
Код
For i=1 to Len(str(0))
   Debug.Print str(0), Asc(Mid$(str(0),i,1)), AscW(Mid$(str(0),i,1))
Next i
Изменено: Jack Famous - 07.10.2019 12:23:10 (Изменил под Debug.Print для Immediate)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Уважаемый Jack Famous.
Подскажите лечится ли это Replace?
 
IgorBoot, конечно лечится, если знаете, что менять, но лучше предотвратить проблему, чем героически её решать — определите корректный разделитель (в один или несколько символов), сплитуйте по нему и ничего заменять не надо  ;)
Вот код для цикла по всем символам полученной строки из файла
Код
Sub Obrabotka()
Dim str1() As String, txt$, ltr$, i&
Dim PathFileName$
 
File_Strok_Poiska = "C:\Тест.txt"
txt = CreateObject("Scripting.FileSystemObject").Getfile(File_Strok_Poiska).OpenasTextStream(1).ReadAll
'str1=Split(txt,разделитель) как определите разделитель, то вставите 
 
For i=1 to Len(txt)
   ltr=Mid$(txt,i,1)
   Debug.Print ltr, Asc(ltr), AscW(ltr)
Next i
End Sub
Обновил пост выше
Изменено: Jack Famous - 07.10.2019 12:36:26
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: 1
Наверх