Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.064 c
2-1331979813
>|<
2012-03-17 14:23
2013.03.22
DrawFocusRect


15-1340305869
Ega23
2012-06-21 23:11
2013.03.22
Знатокам Оракла и вообще.


11-1245250056
Dy1
2009-06-17 18:47
2013.03.22
ListView


15-1335792488
Knight
2012-04-30 17:28
2013.03.22
Триггер в FireBird


15-1339959786
Artem
2012-06-17 23:03
2013.03.22
Pocket Fritz





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский