Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Замена текста одного файла, текстом из другого файла (http://forum.oszone.net/showthread.php?t=324619)

ninjaman 10-03-2017 00:20 2718034

Замена текста одного файла, текстом из другого файла
 
Доброго времени суток!
Заранее извиняюсь, если такая тема уже была, сходу не смог найти.
Есть файл file1.txt с содержимым
Код:

Старый текст блаблабла Старый текст2 блаблабла Старый текст3 и т.д.
Есть файл file2.txt с содержимым (строк несколько тысяч)
Код:

Старый текст=Новый текст
Старый текст2=Новый текст2
Старый текст3=Новый текст3
и т.д. построчно

Задача:
Заменить в file1.txt все вхождения текста левой части в file2.txt на правую. Я новичок в этом и буду очень признателен за помощь.

megaloman 10-03-2017 10:42 2718120

ninjaman,
Цитата:

Есть файл file1.txt с содержимым
Из приведенного примера не ясно, что за файл: там очень длинная строка ( без символов cr+lf), или это нормальный текстовый файл. При очень длинных строках Ваша задача средствами СMD не решается. Опять же, будут проблемы при обработке строк, содержащих символы ! ( ) и многие другие. Кстати, а в какой кодировке файлы? ИМХО, эту задачу лучше (надёжнее и, похоже, эффективнее по времени исполнения) сделать в vbs.

ninjaman 10-03-2017 12:05 2718148

megaloman, Извиняюсь, неправильно написал. 1 файл имеет xml формат
Код:

<main_form>
 <form id="1">
      <param param1="Старый текст" param2="Старый текст3" />
      <param param1="Старый текст2" />
 </form>
 <form id="2">
      <param param1="Старый текст3" />
      <param param1="Старый текст4" />
 </form>
</main_form>

(param1, param2 - для примера, на их месте может быть все что угодно.), а второй простой построчный текст. Кодировки везде UTF-8.

Iska 10-03-2017 14:11 2718174

ninjaman, в таком случае, упаковывайте образец файлов 1 и 2 в архив и прикладывайте к сообщению. Кстати, обычно файл 2 должен быть отнюдь не в виде «Старый текст=Новый текст», а в виде «Путь в файле xml=новое значение» или попросту файл xml. Что это за xml — файл 1?

ninjaman 10-03-2017 15:40 2718202

Вложений: 1
Iska, Там именно так (Старый текст=Новый текст). Это переводы к одной игре. Таких файлов много. Пример приложил.

Iska 10-03-2017 16:14 2718218

ninjaman, теперь покажите весь SocialActionInfo.xml и все:
Цитата:

Цитата ninjaman
Таких файлов много »

Хочу посмотреть на них. Упакуйте в архив и выложите на RGhost или Яндекс.Диск.

ninjaman 10-03-2017 19:25 2718256

Iska, Он весь и есть. Вот именно в таком виде как я выложил и надо заменить текст. В остальных файлах принцип тот же, только названия другие.

Iska 10-03-2017 21:36 2718290

Вот я бы и хотел на них поглядеть.

В общем, не хотите. Ни файлы выкладывать, ни первичную задачу толком описать. Ну, да, бога ради.

На PowerShell:
Скрытый текст
Код:

$sSourceFile = 'C:\Мои проекты\0050\SocialActionInfo.txt'
$sDestFile  = 'C:\Мои проекты\0050\SocialActionInfo.xml'

$cPatterns = Get-Content -Path $sSourceFile -Encoding UTF8 -ReadCount 0
$sContent  = [System.IO.File]::ReadAllText($sDestFile, [System.Text.Encoding]::UTF8)

$cPatterns[1..$cPatterns.Length] | ForEach-Object -Process {
    $cPattern = $_ -split '='
    $sContent = $sContent.Replace($cPattern[0], $cPattern[1])
}

Set-Content -Path $sDestFile -Encoding UTF8 -Value $sContent


ninjaman 11-03-2017 00:59 2718334

Iska, Спасибо огромное!!! Все работает)) А Задача - просто контент перевести для игрового сайта.


Время: 06:41.

Время: 06:41.
© OSzone.net 2001-