Что нового

Удалить все строки по условию "не содержит"

AlexVong

Новичок
Сообщения
112
Репутация
1
Как удалить все строки в файле - в первых семи символах которых нет цифры 92?
Код:
  82   Бюджет ыаыафыва444564654545 55665klkllkj kjk4
   5   Бюджет ыаhjkh444564654545 55665klkllkj kjk55
  73   Бюджет ыаыафыва44hjkhg545 55665klkllkj kjk45645
  92   Бюджет ыаыафыhfjkhjk54545 55665klkllkj kjk456
  82   Бюджет ыаыафыва444564654545 55665klkllkj kjk456456
  92   Бюджет ыаыафыва444564654ghkhjkj kjk456456
результат:
Код:
  92   Бюджет ыаыафыhfjkhjk54545 55665klkllkj kjk456
  92   Бюджет ыаыафыва444564654ghkhjkj kjk456456
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
AlexVong,
Как вариант.
Код:
Local $s_File = @ScriptDir & '\test.txt', $s_Txt, $a_Res, $s_Num = '92', $s_Delim

$s_Txt = FileRead($s_File)
$a_Res = StringRegExp($s_Txt, '(?m)^(\h{' & 4 - StringLen($s_Num) & '}' & $s_Num & '\h{3}.*?)\r*$', 3)
If @error Then
	MsgBox(16, 'Error', 'Error')
	Exit
Else
	If StringInStr($s_Txt, @CRLF) Then
		$s_Delim = @CRLF
	ElseIf StringInStr($s_Txt, @CR) Then
		$s_Delim = @CR
	ElseIf StringInStr($s_Txt, @LF) Then
		$s_Delim = @LF
	EndIf
	If Not $s_Delim Then
		$s_Txt = $a_Res[0]
	Else
		$s_Txt = ''
		For $i = 0 To UBound($a_Res) - 1
			$s_Txt &= $a_Res[$i] & $s_Delim
		Next
;~ 		$s_Txt = StringTrimRight($s_Txt, StringLen($s_Delim));удаляет последний (пустой) перенос строки
	EndIf
EndIf
ConsoleWrite($s_Txt & @LF)
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Вот мой вариант
Код:
#include <File.au3>
#include <Array.au3>

Global $aArr1, $iIndex
Global $aArr2[0]

_FileReadToArray("1.txt", $aArr1, 0)

_ArrayDisplay($aArr1)

For $i = 0 To UBound($aArr1) - 1
	$iIndex = StringInStr($aArr1[$i], "92")
	If $iIndex > 0 And $iIndex < 8 Then _ArrayAdd($aArr2, $aArr1[$i])
Next

_ArrayDisplay($aArr2)
_FileWriteFromArray("2.txt", $aArr2)
 

MockeR

Знающий
Сообщения
101
Репутация
14
И мой:smile:
Код:
$inputFileName = "1.txt"
$outputFileName = "2.txt"
$pattern = "(?m)^(?=\D{0,5}92\D)(.*?)$|^.*?(\r|$)"
$input = FileRead($inputFileName)
$output = StringRegExpReplace($input, $pattern, "$1")
FileWrite($outputFileName, $output)
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
MockeR,
ты что натворил?! Этот pattern не рабочий. Немедленно верни первоначальный вариант!

ну и мой скрипт до кучи

Код:
$text = "  92   Бюджет ыаыафыва444564654545 55665klkllkj kjk4"&@CRLF& _
		"   5   Бюджет ыаhjkh444564654545 55665klkllkj kjk55"&@CR& _
		"  73   Бюджет ыаыафыва44hjkhg545 55665klkllkj kjk45645"&@CRLF& _
		"  92   Бюджет ыаыафыhfjkhjk54545 55665klkllkj kjk456"&@CRLF& _
		"  82   Бюджет ыаыафыва444564654545 55665klkllkj kjk456456"&@CRLF& _
		"  92   Бюджет ыаыафыва444564654ghkhjkj kjk456456"

$pattern = "(?ms)^(?(?=.{0,5}92)^|.*?(\r\n|\r|$))"
$res = StringRegExpReplace($text, $pattern, "")

MsgBox(0,"res",$res)
 

MockeR

Знающий
Сообщения
101
Репутация
14
C2H5OH,
под этот паттерн:
Код:
$pattern = "(?ms)^(?(?=.{0,5}92)^|.*?(\r\n|\r|$))"

так же попадут строки такого вида:
Код:
" 1923  Бюджет ыаыафыва444564654ghkhjkj kjk456456"

Вот рабочий паттерн:
Код:
$pattern = "(?m)^(?=\D{0,5}92\D)(.*?)$|^.*?([\r\n]|$)"
 
Верх