Что нового

Вывести строку при найденом выражении

Nbv_tim

Новичок
Сообщения
47
Репутация
1
Чего то туплю очень сильно.
Код:
$r='^(.+?) '
$y=' (.+)'
		$ch=StringRegExp($lo,$r,1)
$ch1=	StringRegExp($lo,$y,1)	
		MsgBox(0,'',$ch[0]& ' ' &$ch1[0])
	$g=_FileCountLines(@ScriptDir & "\" & "Parce" & "\" & "4.txt")
	$er=FileRead(@ScriptDir & "\" & "Parce" & "\" & "4.txt")
	for $i=1 to $g			 
$er1=FileReadLine($er,$i)
if StringInStr($er1,$ch[0]) Then
	MsgBox(0,'',$er1)			
	EndIf	
Next

читаю строки $g далее цикл до кол-ва строк, читаю в переменную строку. если строка совпадает с данными Ch[0] то должна вывести эту строку не пойму почему не выводит.
цель такая есть две переменные, нужно прочитать файл и если строка совпадает с первой И второй переменно (ch,ch1) то вывести эту строку в файл. ну или просто вывести.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Первый параметр функции FileReadLine - это путь к файлу или дескриптор открытого файла. А вы передаёте содержимое файла.
 
Автор
N

Nbv_tim

Новичок
Сообщения
47
Репутация
1
InnI сказал(а):
Первый параметр функции FileReadLine - это путь к файлу или дескриптор открытого файла. А вы передаёте содержимое файла.
Спасибо, еще один вопрос, по организации поиска, почему не срабатывает поиск там же по второй переменной или надо как то вхождение дописывать.?
Код:
$er1=FileReadLine(@ScriptDir & "\" & "Parce" & "\" & "4.txt",$i)
if StringInStr($er1,$ch[0]) and StringInStr($er1,$ch1[0]) Then
	MsgBox(0,'',$er1)		
	EndIf	
Next
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
По приведенному примеру тяжело сказать, где у Вас ошибка, так как не известно , какие значения принимают переменные.
Попробуйте так:
Код:
$er1 = FileReadLine(@ScriptDir & "\Parce\4.txt", $i);Зачем лепить строку из нескольких кусков , если можно так
ConsoleWrite($er1 & @CR & $ch[0] & @CR & $ch1[0] & @CR);Проверить значение переменных
If StringInStr($er1, $ch[0]) And StringInStr($er1, $ch1[0]) Then
	MsgBox(0, '', $er1)
EndIf

дайте пример файла "4.txt" и опишите, что Вы хотите получить на выходе.
 
Автор
N

Nbv_tim

Новичок
Сообщения
47
Репутация
1
ra4o сказал(а):
По приведенному примеру тяжело сказать, где у Вас ошибка, так как не известно , какие значения принимают переменные.
Попробуйте так:
Код:
$er1 = FileReadLine(@ScriptDir & "\Parce\4.txt", $i);Зачем лепить строку из нескольких кусков , если можно так
ConsoleWrite($er1 & @CR & $ch[0] & @CR & $ch1[0] & @CR);Проверить значение переменных
If StringInStr($er1, $ch[0]) And StringInStr($er1, $ch1[0]) Then
	MsgBox(0, '', $er1)
EndIf
значения вполне конкретные, я их проверяю в
Код:
MsgBox(0,'',$ch[0]& ' ' &$ch1[0])

при выводе ConsoleWrite($er1 & @CR & $ch[0] & @CR & $ch1[0] & @CR);Проверить значение переменных. он лепит все строки где встерчается и первая и вторая переменная.Логика ИЛИ
в данном случае нужна логика И тоесть переменная ch[0] может встречаться n раз и переменная Ch1[0] также. нужна строка где и первая и вторая переменная есть в строке.
Если использовать
Код:
If StringInStr($er1, $ch[0]) Then MsgBox(0, '', $er1)
выдает 2 строки из этих двух строк нужно вывести строку в которой есть $ch1[0] в моем случае And не работает почему то.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Здесь
Код:
If StringInStr($er1, $ch[0]) And StringInStr($er1, $ch1[0]) Then
    MsgBox(0, '', $er1)
EndIf
с логикой всё в порядке , "MsgBox" появится при наличии в строке $er1 одновременно $ch[0] И $ch1[0].
он лепит все строки где встерчается и первая и вторая переменная
Нет он будет писать ВСЕ строки независимо от наличия в них переменных, я потому и рекомендовал эту проверку, что-бы Вы проверили (раз уж не даёте тестовый файл) - что содержится в строке и что в подстроках для поиска, проанализировав все строки Вы поймёте - где ошибка.
 
Автор
N

Nbv_tim

Новичок
Сообщения
47
Репутация
1
ra4o сказал(а):
Здесь
Код:
If StringInStr($er1, $ch[0]) And StringInStr($er1, $ch1[0]) Then
    MsgBox(0, '', $er1)
EndIf
с логикой всё в порядке , "MsgBox" появится при наличии в строке $er1 одновременно $ch[0] И $ch1[0].
он лепит все строки где встерчается и первая и вторая переменная
Нет он будет писать ВСЕ строки независимо от наличия в них переменных, я потому и рекомендовал эту проверку, что-бы Вы проверили (раз уж не даёте тестовый файл) - что содержится в строке и что в подстроках для поиска, проанализировав все строки Вы поймёте - где ошибка.
спасибо, вывел в консоль, оказалось что перед этим я формирую лист с пробелом после первой переменной, а в функции он считывает и этот пробел. убрал пробел, все стало определять. :beer:
 
Верх