Loopback
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Цитата: Подскажите где взять или помогите написать функцию, которая бы в файле (например .txt ) удалял строку если найдена подстрока, при этом функция должна возвращать номер удаленной строки и умела либо удалять со смещением, либо со вставкой пустой строки на место удаленной, в зависимости от параметра. | На мой взгляд, довольно значительным недостатком Autoit является факт, что он может открыть файл либо только для чтения, либо только для записи. Таким образом, средствами Autoit сразу удалить строку нельзя, придется переписывать в новый файл, либо читать файл в память. Оба варианта ниже. Код: #include <File.au3> $sFilePath = "Путь к файлу" $sSubstring = "Строка для поиска" $bShift = False ; Если True - убирать строку, иначе - делать пустой. Dim $aArray _FileReadToArray($sFilePath, $aArray) $hFile = FileOpen($sFilePath, 2) For $i = 1 To $aArray[0] If StringInStr($aArray[$i], $sSubstring) Then If $bShift Then ContinueLoop FileWriteLine($hFile, "") Else FileWriteLine($hFile, $aArray[$i]) EndIf Next FileClose($hFile) | Код: $sFilePath = "Путь к входному файлу" $sFilePathOut = "Путь к выходному файлу" $sSubstring = "Строка для поиска" $bShift = False ; Если True - убирать строку, иначе - делать пустой. $hFileIn = FileOpen($sFilePath, 0) $hFileOut = FileOpen($sFilePathOut, 2) $line = FileReadLine($hFileIn) While not @error = -1 If StringInStr($line, $sSubstring) Then If not $bShift Then FileWriteLine($hFileOut, "") Else FileWriteLine($hFileOut, $line) EndIf $line = FileReadLine($hFileIn) Wend FileClose($hFileIn) FileClose($hFileOut) | Я не стал делать "возврат номера строки", т.к. неясно, как поступить в случае, если строк несколько. Но это легко добавить - в первом случае можно брать индекс массива, во втором нужно сделать переменную-счетчик. Цитата: Такой вопрос: можно ли в AutoIt получить выделенный текст | Все зависит от того, откуда получать. Если контрол - стандартный Edit, то можно получить текст командой ControlCommand с параметром GetSelected. Иначе лучше использовать метод с буфером обмена. |