Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизКто чем пользуется, если надо массовые замены делать? Найти похожие ветки
← →
ТимоховД (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 Hostingvar 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;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.07 c