Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

Кто чем пользуется, если надо массовые замены делать?   Найти похожие ветки 

 
ТимоховД   (2012-08-29 15:59) [0]

Есть:
1. Есть каталог со 1000 файлами.
2. Есть файл формата:

СтараяСтрока1 НоваяСтрока1
СтараяСтрока2 НоваяСтрока2
...
СтараяСтрокаN НоваяСтрокаN


Надо во всех файлах в каталоге из п. 1 заменить строки СтараяСтрокаX на НоваяСтрокаX.

Чем воспользоваться? Какой утилитой пользуетесь для этого?

Спасибо.


 
Дмитрий С ©   (2012-08-29 16:01) [1]

Тоталкомандером


 
turbouser ©   (2012-08-29 16:02) [2]

Notepad++


 
Ega23 ©   (2012-08-29 16:02) [3]


> Тоталкомандером

+много.

З.Ы. Ты опять логин забыл?


 
Ega23 ©   (2012-08-29 16:02) [4]


> Notepad++

Тыщщу файлов задолбаешься открывать.


 
ТимоховД   (2012-08-29 16:04) [5]

Notepad++ я знаю. Сам так делаю, но как сказал Олегыч - задолбаешься 1000 файлов открывать)))

Пойду посмотрю как тоталькомандир это делает.

Димыч, а какая команда в тотале?


 
Дмитрий С ©   (2012-08-29 16:08) [6]

Вот это я наврал оказывается! Прошу прощения. Перепутал с Notepad++, недавно пользовался. Там можно папку указать в которой заменять, все файлы при этом можно не открывать.


 
RWolf ©   (2012-08-29 16:10) [7]

FAR"ом.


 
Ega23 ©   (2012-08-29 16:11) [8]

Гы, а я тоже наврал с ТС, там имена файлов можно менять. Но не содержимое.


 
turbouser ©   (2012-08-29 16:12) [9]


> Ega23 ©   (29.08.12 16:02) [4]
>
>
> > Notepad++
>
> Тыщщу файлов задолбаешься открывать.


> ТимоховД   (29.08.12 16:04) [5]
>
> Notepad++ я знаю.

Oo зачем тыщу? вообще ниодного не надо открывать - Ctrl+F - "Найти в файлах" - "заменить в файлах"


 
RWolf ©   (2012-08-29 16:14) [10]

ну, как я понимаю, топикстартеру надо автоматизировать не только процесс поиска/замены в каталоге, но и процесс подстановки аргументов в этот поиск/замену.


 
Ega23 ©   (2012-08-29 16:16) [11]


> ну, как я понимаю, топикстартеру надо автоматизировать не
> только процесс поиска/замены в каталоге, но и процесс подстановки
> аргументов в этот поиск/замену.


"Старая строка" на "Новая строка"??


 
RWolf ©   (2012-08-29 16:18) [12]

[11]

стараястрока1 на новаястрока1,
заменяем,
стараястрока2 на новаястрока2,
заменяем,
и т.д.


 
turbouser ©   (2012-08-29 16:19) [13]

в Notepad++ и регулярками можно


 
Дмитрий С ©   (2012-08-29 16:22) [14]


> в Notepad++ и регулярками можно

это врядли получится.

Вообще это сложно, думаю, для какой-либо програмки, я б скрипт написал по-быстрому.


 
Дмитрий С ©   (2012-08-29 16:29) [15]

Вот грубо говоря как-то так.

<?
// тут можно использовать массив $argv чтобы получить параметры командной строки.
$replaces_file = "replaces.txt";
$process_files = "dir/*";

$replaces = preg_split("~\s*[\r\n]\s*~", trim(file_get_contents($replaces_file)));

$from = array();
$to = array();

for($i=0; $i<count($replaces); $i++) {
$item = preg_split("\s*", $replaces[$i], 2);
if (count($item)==2) {
 $from[] = $item[0];
 $to = $item[1];
}
}

$files = glob($process_files);

for($i=0; $i<count($files); $i++) {
file_put_contents($files[$i], str_replace($from, $to, file_get_contents($files[$i])));
}



 
Дмитрий С ©   (2012-08-29 16:33) [16]

Если интересно, могу даже ошибки исправить :)


 
ТимоховД   (2012-08-29 16:42) [17]

Язык то какой, Димыч?)))


 
brother ©   (2012-08-29 16:43) [18]

php


 
Palladin ©   (2012-08-29 16:46) [19]

как то так
Windows Script Hosting

var fso = WScript.CreateObject("Scripting.FileSystemObject");
var dictionary = WScript.CreateObject("Scripting.Dictionary");

function readText(fileName) {
 var data = new Array();
 var file = fso.OpenTextFile(fileName);
 while (!dctFile.AtEndOfLine)
   data[data.length] = file.readLine();
 dctFile.Close();
 return data;
}

function writeText(fileName, txt) {
 var file = fso.CreateTextFile(fileName, true);
 for (var i = 0; i < txt.length; i++)
   file.writeLine(txt[i]);
 file.Close();
}

function readDictionary() {
 var dct = readText("файл с картой замен");
 var keyval;
 for (var i = 0; i < dct.length; i++) {
   keyval = dct[i].split(" ");
   if (keyval.length <> 2)
     continue;
   dictionary.Add(keyval[0], keyval[1]);
 }
}

function proceedFile(fileName) {
 var txt = readText(fileName);
 var val;
 for (var i = 0; i < txt.lengthl i++) {
   val = dictionary.Item(txt[i]);
   if (val)
     txt[i] = val;
 }

 writeText(fileName, txt);
}

readDictionary();
var files = new Enumerator(fso.GetFolder(".").Files);
for (files.moveFirst(); !files.atEnd(); files.moveNext())
 proceedFile(files.item().Name);


 
Дмитрий С ©   (2012-08-29 16:47) [20]

php. Скачай какой-нибудь отсюда
http://windows.php.net/download/
добавь папку с php.exe в path
и потом с командной строки
php myscript.php [тут аргрументы если есть]

Вот вроде без ошибок:

<?
$replaces_file = "replaces.txt";
$process_files = "dir/*";

$replaces = preg_split("~\s*[\r\n]\s*~", trim(file_get_contents($replaces_file)));

$from = array();
$to = array();

for($i=0; $i<count($replaces); $i++) {
$item = preg_split("~\s*~", $replaces[$i], 2);
if (count($item)==2) {
 $from[] = $item[0];
 $to[] = $item[1];
}
}

$files = glob($process_files);

for($i=0; $i<count($files); $i++) {
file_put_contents($files[$i], str_replace($from, $to, file_get_contents($files[$i])));
}



 
TUser ©   (2012-08-29 16:47) [21]

sed


 
pasha_golub ©   (2012-08-29 16:47) [22]

Да вы с ума посходили! Утилиты на пхп писать! Куда катится мир? Пойду выжру ведро портвейну.


 
Palladin ©   (2012-08-29 16:49) [23]

РэНэРэ это 5 )


 
brother ©   (2012-08-29 16:50) [24]

> Пойду выжру ведро портвейну.

тока с пьяну на php не начни писать)


 
Ega23 ©   (2012-08-29 16:54) [25]


> Palladin ©   (29.08.12 16:49) [23]
>
> РэНэРэ это 5 )
>


А чо, пятый рэнэрэ уже ничо так.


 
Palladin ©   (2012-08-29 16:57) [26]

ну может и ничего, но зачем его качать ради такой мелочи если есть не менее гибкий и созданный специально для подобных целей WSH )


 
Ega23 ©   (2012-08-29 17:02) [27]


> ну может и ничего

Вот если бы ты сказал, что "РэНэРэ это 4 )", вот тут да, четыре - некошерен, неправославен и вообще б-гомерзок.
:))


 
Sha ©   (2012-08-29 17:07) [28]

это Delphiiiiiiiiiii


 
Германн ©   (2012-08-29 17:07) [29]

CnPack что-то подобное вроде умеет делать.


 
Медвежонок Пятачок ©   (2012-08-29 19:37) [30]

повершел конечно же.


 
palva ©   (2012-08-29 20:01) [31]

Наверно, текстовые редакторы умеют это делать. Я когда-то увлекался редактором TextPad. Открываю все файлы в директории по маске, делаю замену во всех открытых файлах, (возможны регулярные выражения), закрываю все открытые файлы с сохранением. Когда-то я удалял таким образом мусор, который создается программой TeleportPro при сохранении сайта. Тысячи файлов там не было, но файлов сто было. Сейчас у меня этот редактор не установлен, и я делал бы эту задачу с помощью мароса FAR.

Я вовсе не хотел обидеть или унизить энтузиастов других текстовых редакторов.


 
Писатель   (2012-08-29 20:12) [32]

Я себе для этой цели простенькую прогу наваял. Если надо,могу архив на обменник кинуть


 
Inovet ©   (2012-08-29 20:15) [33]

> [31] palva ©   (29.08.12 20:01)

Так надо ещё и по файлу формата делать.


 
palva ©   (2012-08-29 20:24) [34]


> Так надо ещё и по файлу формата делать.

Одна строчка файла формата - одна замена. Здесь приходится вручную.


 
RWolf ©   (2012-08-29 20:43) [35]


> palva ©   (29.08.12 20:24) [34]

макросы FAR позволяют и по файлу со строчками пробежаться на автомате.



Страницы: 1 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.165 c
15-1343507404
Юрий
2012-07-29 00:30
2013.03.22
С днем рождения ! 29 июля 2012 воскресенье


2-1330953400
dimokis
2012-03-05 17:16
2013.03.22
процедура для обработки нажатия любой кнопки на форме


15-1348000202
Юрий
2012-09-19 00:30
2013.03.22
С днем рождения ! 19 сентября 2012 среда


15-1340712165
картман
2012-06-26 16:02
2013.03.22
кластеризация


15-1332534602
Юрий
2012-03-24 00:30
2013.03.22
С днем рождения ! 24 марта 2012 суббота