Что нового

Поиск текста в строке с заменой

Burzum

Новичок
Сообщения
11
Репутация
0
Версия AutoIt: Version 3.4.4 Jul 13 2014 20:07:38

Описание:
Добрый день, есть небольшой скрипт, который ищет в файле 1.txt строки и из файла 2.txt делает их замену по совпадению до " : ". Но есть проблема, если текст в файле не найден, скрипт просто закрывается, а нужно что бы переходил к другой строке. В общем синхронизация паролей из 2.txt в 1.txt с сохранением сортировки :stars:
Код:
Код:
#Include <File.au3>

$file1= @ScriptDir & '\1.txt'
$file2= @ScriptDir & '\2.txt'
$file_read=FileOpen($file2,0)
$hSizeLine = _FileCountLines($file2)

For $nDir = 1 To $hSizeLine Step 1

$line = FileReadLine($file_read)

; Чтение файла. line — строка
$str=StringSplit($line,':')
$login=$str[1]

$sSearched = $login ;Текст который ищем

$sText = FileRead($file1) ;Читаем файл

$aLines = StringSplit($sText, @CRLF, 1) ;Разбиваем текст на строки, строки помещаем в массив

For $i = 1 To $aLines[0] Step +1
    if StringInStr($aLines[$i], $sSearched) Then $nLine = $i
Next

$LineFile2 = $nDir
$LineFile1 = $nLine


$NewLinePass = FileReadLine ($file2, $LineFile2)
_FileWriteToLine ($file1, $LineFile1, $NewLinePass, 1)
FileClose($file1)
FileClose($file2)

Next
 

Вложения

  • 1.txt
    48 байт · Просмотры: 4
  • 2.txt
    46 байт · Просмотры: 4
  • Конечный файл.txt
    46 байт · Просмотры: 3

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Burzum
Можно так попробовать сделать.
Код:
Local $aFirst, $sSecond, $sTmp, $sRes

$aFirst = StringSplit(StringRegExpReplace(StringStripCR(FileRead(@ScriptDir & '\1.txt')), '\n*$', ''), @LF & ':')
If (@error) Or (Mod($aFirst[0], 2)) Then Exit 1
$sSecond = StringStripCR(FileRead(@ScriptDir & '\2.txt'))
For $i = 1 To $aFirst[0] Step 2
    $sTmp = StringRegExpReplace($sSecond, '(?ms).*^\Q' & $aFirst[$i] & ':\E(.+?)$.*', '$1')
    If @extended = 1 Then $aFirst[$i + 1] = $sTmp
    $sRes &= $aFirst[$i] & ':' & $aFirst[$i + 1] & @CRLF
Next
$sRes = StringTrimRight($sRes, 2)
$aFirst = 0
$sSecond = ''
$sTmp = ''

ConsoleWrite($sRes & @LF)
 
Автор
B

Burzum

Новичок
Сообщения
11
Репутация
0
madmasles
Отлично, спасибо огромное! :laugh:
 

ildar

Осваивающий
Сообщения
252
Репутация
30
Комментарий внутри
Код:
#Include <File.au3>

$file1= @ScriptDir & '\1.txt'
$file2= @ScriptDir & '\2.txt'
$file_read=FileOpen($file2,0)
$hSizeLine = _FileCountLines($file2)

For $nDir = 1 To $hSizeLine Step 1

$line = FileReadLine($file_read)

; Чтение файла. line — строка
$str=StringSplit($line,':')
$login=$str[1]

$sSearched = $login ;Текст который ищем

$sText = FileRead($file1) ;Читаем файл

$aLines = StringSplit($sText, @CRLF, 1) ;Разбиваем текст на строки, строки помещаем в массив

For $i = 1 To $aLines[0] Step +1
    if StringInStr($aLines[$i], $sSearched) Then $nLine = $i    ;<-------------- переменная $nLine не получает никакого значения если условие не находит совпадения, либо дать переменной $nLine какое-нибудь значение перед циклом, либо добавить Else $nLine = 0
Next

$LineFile2 = $nDir
$LineFile1 = $nLine


$NewLinePass = FileReadLine ($file2, $LineFile2)
_FileWriteToLine ($file1, $LineFile1, $NewLinePass, 1)
FileClose($file1)
FileClose($file2)

Next
 
Автор
B

Burzum

Новичок
Сообщения
11
Репутация
0
ildar
Да, это я понял, но придумать корректное условие я не смог :(
 
Верх