Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Creat0R
Цитата:
$Array = StringSplit("1|4|6|8", "|")
ну ты умеешь озадачить... зачем делать сплит строки если предложенная функция возвращает уже готовый массив с номерами строк?
Цитата:
если дубликатов нет, ненужно выводить сообщения, а просто в массив с нулём ($Array[0])
именно такой массив ф-ция и возвращает, только не одномерный, а двумерный - ты же вроде заказывал не только номера строк ($Array[$i][0]), но и их содержимое ($Array[$i][1])? Счетчик $Array[0][0] содержит число возвращенных строк - если он равен 0, то вхождений соответственно нет. SELECT добавлен для наглядности, я же вроде сказал что его можно убрать.
Цитата:
Но и тут есть проблема, после удаления строки под первым номером присутствующем в массиве, все остальные теряют своё значения, и удаляются уже не те строки
эта проблема решается просто - нужно проходить массив в обратном направлении: от конца файла к его началу:
Код: Выделить весь код
#include <File.au3>

$File = "c:\test.txt"
$Array = _TextInFile ($File, "Просто текст")
If $Array[0][0]>1 Then
	For $i = $Array[0][0] to 2 Step -1
		_FileWriteToLine($File, $Array[$i][0], "", 1)
	Next
EndIf

Func _TextInFile ($file, $text)
	Local $i, $txtLines, $res [1][2] = [[0,0]]
	_FileReadToArray ($file, $txtLines)
	If IsArray ($txtLines) Then
		For $i=1 To $txtLines [0]
			If StringInStr ($txtLines [$i], $text) Then
				ReDim $res [$res [0][0]+2][2]
				$res [0][0] = $res [0][0] +1
				$res [$res [0][0]][0] = $i
				$res [$res [0][0]][1] = $txtLines [$i]
			EndIf
		Next
	EndIf
	Return $res
EndFunc
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:42, 05-11-2006 | #442