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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Найти и заменить в текстовом файле. Как?

Ответить
Настройки темы
[решено] Найти и заменить в текстовом файле. Как?

Аватара для Pozia

Ветеран


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

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


Есть текстовый файл 1.txt. Мне нужно найти в нем определенной слово и заменить его на имя компьютера с которого производится запуск скрипта, и после этого создать текстовый файл 2.txt такой же по содержанию но с измененным словом. Как это сделать?

-------
Жизни вглядись в глаза: Это то, что ты всегда искал? Это то, что ты всегда хотел? Да или нет?


Отправлено: 18:55, 13-01-2010

 

Аватара для madmasles

Ветеран


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

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


У меня так получилось:

Код: Выделить весь код
$sPathOld = "1.txt"
$sPathNew = "2.txt"
$slovo = "" ; Ваше слово для замены

$sTest = FileRead($sPathOld)
$sTest = StringReplace($sTest, $slovo, @ComputerName)
FileWrite($sPathNew, $sTest)
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:21, 13-01-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Pozia

Ветеран


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

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


madmasles, задача несколько усложнилось. Имеется такой кусок кода:

Код: Выделить весь код
...
<MenuMacro UID="ID_Ai_propch">
        <Macro type="Modify">
          <Revision MajorVersion="16" MinorVersion="2" UserVersion="0" />
          <ModifiedRev MajorVersion="16" MinorVersion="2" UserVersion="0" />
          <Name xlate="true" UID="ACAD_334">Properties</Name>
          <Command>^C^C_properties </Command>
          <HelpString xlate="true" UID="ACAD_1440">Controls properties of existing objects:  PROPERTIES</HelpString>
          <SmallImage Name="RCDATA_16_MODIFY" />
          <LargeImage Name="RCDATA_16_MODIFY" />
        </Macro>
      </MenuMacro>
...
в нем всего лишь нужно поменять выделеное слово на dim_edit. Но загвоздка в том что во всем тексте скрипта properties повторяется несколько раз, а мне необходимо поменять только в данном куске кода. Уникальным сочитанием кода будет:

Код: Выделить весь код
<Name xlate="true" UID="ACAD_334">Properties</Name>
          <Command>^C^C_properties </Command>
но не могу сообразить как скрипт написать. помогите пожалуйста

-------
Жизни вглядись в глаза: Это то, что ты всегда искал? Это то, что ты всегда хотел? Да или нет?


Отправлено: 00:56, 27-02-2010 | #3


Аватара для madmasles

Ветеран


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

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


Pozia,
У меня так получилось:
Код: Выделить весь код
#include <file.au3>

$sPathOld = "test.txt" ; файл-источник
$sPathNew = "New.txt" ; файл-результат
$slovoOld = "properties" ; это слово меняем
$slovoNew = "dim_edit" ; на это слово
$sLeft = "<Command>^C^C" ; это слово есть слева
$sRight = " </Command>" ; это слово есть справа
Dim $aFile
_FileReadToArray($sPathOld, $aFile)
For $i = 1 To UBound($aFile) - 1
    If StringInStr($aFile[$i], $sLeft) > 0 And StringInStr($aFile[$i], $sRight) > 0 _
            And StringInStr($aFile[$i], $slovoOld) > 0 Then
        $aFile[$i] = StringReplace($aFile[$i], $slovoOld, $slovoNew)
    EndIf
Next
_FileWriteFromArray($sPathNew, $aFile, 1)
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:16, 27-02-2010 | #4


Аватара для Pozia

Ветеран


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

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


madmasles, вы не учли:
Цитата Pozia:
Но загвоздка в том что во всем тексте скрипта properties повторяется несколько раз »
Получилось так что произошла замена по всему моему скрипту. Нужно как то вставить проверку наличия строки <Name xlate="true" UID="ACAD_334">Properties</Name> после которой идет именно та properties что мне нужно изменить. Как это сделать?

-------
Жизни вглядись в глаза: Это то, что ты всегда искал? Это то, что ты всегда хотел? Да или нет?


Отправлено: 10:15, 27-02-2010 | #5


Аватара для madmasles

Ветеран


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

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


Pozia,
Попробуйте так:
Код: Выделить весь код
#include <file.au3>

$sPathOld = "test.txt" ; файл-источник
$sPathNew = "New.txt" ; файл-результат
$slovoOld = "properties" ; это слово меняем
$slovoNew = "dim_edit" ; на это слово
$sString = '<Name xlate="true" UID="ACAD_334">Properties</Name>' ; это строка сверху
Dim $aFile
_FileReadToArray($sPathOld, $aFile)
For $i = 1 To UBound($aFile) - 1
    If StringInStr($aFile[$i], $sString) > 0 Then
        $aFile[$i + 1] = StringReplace($aFile[$i + 1], $slovoOld, $slovoNew)
    EndIf
Next
_FileWriteFromArray($sPathNew, $aFile, 1)
Мой предыдущий код в примере Вашего текста работал (у меня).
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:27, 27-02-2010 | #6


Аватара для Pozia

Ветеран


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

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


madmasles, в яблочко! Спасибо огромное за оперативность!

-------
Жизни вглядись в глаза: Это то, что ты всегда искал? Это то, что ты всегда хотел? Да или нет?


Отправлено: 10:43, 27-02-2010 | #7


Аватара для Pozia

Ветеран


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

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


madmasles, прошу еще помощи маленькой. я Вашим скрипт в моем коде меняю две строки. Сча не могу сообразить как эти два скрипта в один объединить. Первый что вы привели, второй:

Код: Выделить весь код
$sPathOld = 'acad.CUI'
$sPathNew = 'acad2.CUI'
$slovo1 = "        <PartialMenuFile>custom.cui</PartialMenuFile>"
$slovo2 = "        <PartialMenuFile>custom.cui</PartialMenuFile>        <PartialMenuFile>Pozia_Tools\pozia.cui</PartialMenuFile>"
$sTest = FileRead($sPathOld)
$sTest = StringReplace($sTest, $slovo1, $slovo2)
FileWrite($sPathNew, $sTest)
madmasles, сделал так методом тыка:

Код: Выделить весь код
#include <file.au3>

$sPath1 = 'acad.CUI'
$sPath2 = 'acad2.CUI'
$sPath3 = 'acad3.CUI'
$slovo1 = "        <PartialMenuFile>custom.cui</PartialMenuFile>"
$slovo2 = "        <PartialMenuFile>custom.cui</PartialMenuFile>        <PartialMenuFile>Pozia_Tools\pozia.cui</PartialMenuFile>"
$slovo3 = "properties"
$slovo4 = "dim_edit"

$sString = '<Name xlate="true" UID="ACAD_334">Properties</Name>'

$sTest = FileRead($sPath1)
$sTest = StringReplace($sTest, $slovo1, $slovo2)
FileWrite($sPath2, $sTest)

Dim $aFile
_FileReadToArray($sPath2, $aFile)
For $i = 1 To UBound($aFile) - 1
    If StringInStr($aFile[$i], $sString) > 0 Then
        $aFile[$i + 1] = StringReplace($aFile[$i + 1], $slovo3, $slovo4)
    EndIf
Next
_FileWriteFromArray($sPath3, $aFile, 1)

FileDelete($sPath2)
но чувствую что это сильно по ламерски с удалением промежуточного файла. Хотелось бы сразу конечный результат

-------
Жизни вглядись в глаза: Это то, что ты всегда искал? Это то, что ты всегда хотел? Да или нет?


Отправлено: 11:04, 27-02-2010 | #8


Аватара для madmasles

Ветеран


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

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


Pozia,
Попробуйте так:
Код: Выделить весь код
#include <file.au3>

$sPath1 = 'acad.CUI'
$sPath3 = 'acad3.CUI'
$slovo1 = "        <PartialMenuFile>custom.cui</PartialMenuFile>"
$slovo2 = "        <PartialMenuFile>custom.cui</PartialMenuFile>        <PartialMenuFile>Pozia_Tools\pozia.cui</PartialMenuFile>"
$slovo3 = "properties"
$slovo4 = "dim_edit"
$sString = '<Name xlate="true" UID="ACAD_334">Properties</Name>'
Dim $aFile

_FileReadToArray($sPath1, $aFile)
For $i = 1 To UBound($aFile) - 1
    If StringInStr($aFile[$i], $slovo1) > 0 Then
        $aFile[$i] = StringReplace($aFile[$i], $slovo1, $slovo2)
    EndIf
    If StringInStr($aFile[$i], $sString) > 0 Then
        $aFile[$i + 1] = StringReplace($aFile[$i + 1], $slovo3, $slovo4)
    EndIf
Next
_FileWriteFromArray($sPath3, $aFile, 1)
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:51, 27-02-2010 | #9


Аватара для Pozia

Ветеран


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

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


madmasles, еще маленький вопросик. не могу сообразить как дать определенному файлу имя текущей учетной записи. Подскажите пожалуйста.

-------
Жизни вглядись в глаза: Это то, что ты всегда искал? Это то, что ты всегда хотел? Да или нет?


Отправлено: 17:43, 05-03-2010 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Найти и заменить в текстовом файле. Как?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Удаление строк в текстовом файле, как это сделать??? VladZombie Скриптовые языки администрирования Windows 70 08-09-2020 13:28
CMD/BAT - [решено] Передача исполняемому файлу параметров, перечисленных в текстовом файле Vadikan Скриптовые языки администрирования Windows 6 19-04-2017 02:30
CMD/BAT - [решено] Отделить последние цифры из строчки в текстовом файле ZeroCrash Скриптовые языки администрирования Windows 4 29-06-2009 16:03
[решено] Как удалить строки в текстовом файле при отсутсвии файла в опрелеленном месте? Pozia AutoIt 23 14-05-2009 21:41
[решено] Как заменить строку [27] в файле? semiono AutoIt 8 05-04-2009 02:56




 
Переход