Что нового

[Файловая система] Поиск файла и замена в нем текста

vanekzver

Новичок
Сообщения
91
Репутация
2
Здравствуйте уважаемые пользователи autoit-script.ru
Прошу вас помочь с написанием одной программы.
Её суть заключается в том, что она ищет на компьютере некий файл, допустим text.vdf и заменяет в нем текст.
Как такое можно реализовать.
 

AZJIO

Меценат
Меценат
Сообщения
2,755
Репутация
1,151
vanekzver
1. FileOperations - UDF для поиска файлов
2. FileOpen, FileRead, StringReplace, FileWrite.
 
Автор
V

vanekzver

Новичок
Сообщения
91
Репутация
2
Ок, разобрался немного другим методом, но и на этом спасибо, задам вопрос а как прикрепить аттач?
 

AZJIO

Меценат
Меценат
Сообщения
2,755
Репутация
1,151
vanekzver
немного другим методом
что за другой способ? Принято отписывать, дабы тему имела пользу для других, иначе будут этот же вопрос сотни раз спрашивать без указания решения.

как прикрепить аттач?
нажми "Предварительный просмотр", и "дополнительные опции".

Если что есть программа TextReplace содержит исходник, посмотри. Или можешь её использовать в скрипте, передав параметры ком-строкой, всё поддерживается.
 
Автор
V

vanekzver

Новичок
Сообщения
91
Репутация
2
Я только начал заниматься программированием на данном языке.

Решил сделать все по другому, просто заменить файл.

Код:
#AutoIt3Wrapper_Res_File_Add=2.txt, rt_rcdata, 2TXT ;добавляем 2.txt в скрипт

#include "Resources.au3"

_ResourceSaveToFile(@ScriptDir & '\2.txt', "2TXT", $RT_RCDATA, 0, 1)    ;копируем 2.txt в папку со скриптом

$drives = DriveGetDrive('FIXED')

For $i = 1 To $drives[0]
    $aOut = _FileSearch($drives[$i], "123321.txt", 1)
    ;$aOut = _FileSearch($drives[$i] & '\', "123321.txt", 1) ;для поиска в определённых папках

    If $aOut[0] = 0 Then
        MsgBox(0, 'Ошибка', 'В диске ' & $drives[$i] & ' не найдено файлов.', 1)
    Else
        For $a = 1 To $aOut[0]  ;Заменяет все найденные файлы 1.txt на 2.txt
            FileCopy('2.txt', $aOut[$a], 1)
        Next
    EndIf
Next

MsgBox(64, 'Успех', 'Все найденые файлы успешно заменены')

Func _FileSearch($sPath, $sFileMask, $iFlag = 0)    ;Функция для поиска файла
    Local $sOutBin, $sOut, $aOut, $sRead, $hDir, $sAttrib

    Switch $iFlag
        Case 1
            $sAttrib = ' /A-D'
        Case 2
            $sAttrib = ' /AD'
        Case Else
            $sAttrib = ' /A'
    EndSwitch

    $sOut = StringToBinary('0' & @CRLF, 2)
    $aMasks = StringSplit($sFileMask, ';')

    For $i = 1 To $aMasks[0]
        $hDir = Run(@ComSpec & ' /U /C DIR "' & $sPath & '\' & $aMasks[$i] & '" /S /B' & $sAttrib, @SystemDir, @SW_HIDE, 6)

        While 1
            $sRead = StdoutRead($hDir, False, True)

            If @error Then
                ExitLoop
            EndIf

            If $sRead <> "" Then
                $sOut &= $sRead
            EndIf
        Wend
    Next

    $aOut = StringRegExp(BinaryToString($sOut, 2), '[^\r\n]+', 3)

    If @error Then
        Return SetError(1)
    EndIf

    $aOut[0] = UBound($aOut)-1

    Return $aOut
 EndFunc


+ инклуд http://www.autoitscript.com/forum/index.php?app=core&module=attach&section=attach&attach_id=34458


Добавлено: [time]1330039288[/time]
Просто изначально не знал, что тут есть замена, выбрал сложный путь, посмотрел, то что вы кинули, пробую сейчас тоже реализовать


Добавлено: [time]1330039375[/time]
И еще, как в том исходнике, что я кинул, сделать, чтобы файл который я заменил, был только для чтения?
 

AZJIO

Меценат
Меценат
Сообщения
2,755
Репутация
1,151
vanekzver
И еще, как в том исходнике, что я кинул, сделать, чтобы файл который я заменил, был только для чтения?
Установить атрибут R
Код:
FileSetAttrib("File.txt", "+R")

Есть конференция для обсуждения мелких вопросов, ну и поиск по справке и форуму никто не отменял.
 
Автор
V

vanekzver

Новичок
Сообщения
91
Репутация
2
сорри тогда, но последний вопрос, насчет аттача, у меня SciTE4 и он английский, или через что-то другое прикрепить аттач?
 

AZJIO

Меценат
Меценат
Сообщения
2,755
Репутация
1,151
Я про атач к форуму (посту) говорил, SciTE4 тут не причём.
 
Автор
V

vanekzver

Новичок
Сообщения
91
Репутация
2
Код:
$drives = DriveGetDrive('FIXED')

For $i = 1 To $drives[0]
    $aOut = _FileSearch($drives[$i], "MasterServers.vdf", 1)
    If $aOut[0] = 0 Then
        MsgBox(0, 'Ошибка', 'В диске ' & $drives[$i] & ' не найдено файлов.', 1)
    Else
For $a = 1 To $aOut[0]
    FileInstall('MasterServers2.vdf', $aOut[$a], 1)
Next
    EndIf
Next

MsgBox(64, 'Успех', 'Все найденые файлы успешно заменены')

Func _FileSearch($sPath, $sFileMask, $iFlag = 0)    ;Функция для поиска файла
    Local $sOutBin, $sOut, $aOut, $sRead, $hDir, $sAttrib

    Switch $iFlag
        Case 1
            $sAttrib = ' /A-D'
        Case 2
            $sAttrib = ' /AD'
        Case Else
            $sAttrib = ' /A'
    EndSwitch

    $sOut = StringToBinary('0' & @CRLF, 2)
    $aMasks = StringSplit($sFileMask, ';')

    For $i = 1 To $aMasks[0]
        $hDir = Run(@ComSpec & ' /U /C DIR "' & $sPath & '\' & $aMasks[$i] & '" /S /B' & $sAttrib, @SystemDir, @SW_HIDE, 6)

        While 1
            $sRead = StdoutRead($hDir, False, True)

            If @error Then
                ExitLoop
            EndIf

            If $sRead <> "" Then
                $sOut &= $sRead
            EndIf
        Wend
    Next

    $aOut = StringRegExp(BinaryToString($sOut, 2), '[^\r\n]+', 3)

    If @error Then
        Return SetError(1)
    EndIf

    $aOut[0] = UBound($aOut)-1

    Return $aOut
 EndFunc

Вот это конечный вариант, но образовалась 1 проблема, не заменяет в директориях таких как Program Files, Кароче почти весь диск C там где winda винда 7 x64


Добавлено: [time]1330045202[/time]
Проверил на win xp sp3 на виртуалке там обрабатывает все, как я понял проблема в UAC, а ее можно оффнуть через autoit
 
Автор
V

vanekzver

Новичок
Сообщения
91
Репутация
2
Да, проблема в eac, но дело не в этом, я разрабатываю замену файла автоматом для игроков cs, нужно чтобы все было произведено без выскакивания сообщения программа должна.... итп, просто безпалево отключение или обход uac


Добавлено: [time]1330046946[/time]
Хотя нет, возможно так тоже будет норм. Ладно Спасибо тебе большое, очень помог.
 
Автор
V

vanekzver

Новичок
Сообщения
91
Репутация
2
Можешь еще раз помочь please. А можно как нибудь прикрепить статистику тех кто запустил файл, чтобы она отбавилась допустим на сайте, или почте?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
622
Предупреждение За нарушение общих правил (пункт В.4):
Не лепите несколько вопросов разной тематики в один пост. По типу "Ребят, а ещё такой вопрос...". Каждый вопрос в свою тему.


С уважением, ваш Глобальный модератор.
 
Верх