Master-X
Регистрация
|
Вход
Форум
|
Новости
|
Статьи
Главная
»
Форум
»
Программинг, Скрипты, Софт, Сервисы
»
Тема:
Замена (во множестве файлов) шаблона на строку из файла
Новая тема
Ответить
цитата
08/05/10 в 12:00
Woland
Скажем есть стопицот файлов html (локально, не на сервере).
Надо заменить в них {title} на строки из текстового файла (последовательно, или рандомом, или по кругу из файла - ну чтоб чтоб все разные были в итоге).
Подскажите софтину - чё то пока никуя не нашёл (просто замена - мильён вариантов, а вот чтоб из файла брало - куй
).
TextPipe уже часа полтора дрочу - не могу от неё добиться нужного эффекта.
p.s. Вариант два - вдруг найдётся не обделённый интеллектом индивидум, способный (быстро, а не послезавтра после обеда) написать утилитку мне, выполняющую ряд подобных задач или скриптик виндовый
Последний раз редактировалось: Woland (
10/09/11 в 22:58
), всего редактировалось 1 раз
цитата
08/05/10 в 15:31
Anab0L1k
Как самый ломовой вариант: поставить денвер, и простеньким скриптом на РНР прогнать эти 100500 файлов.
цитата
08/05/10 в 16:11
Woland
Anab0L1k:
Я понимаю это
- но блин неудобно мне на php, ну пиздец, как неудобно - мне это надо иногда гонять по многу раз в день, применять к тоннам файлов (находясь при этом в сонном-заёбаном-пьяном-отвлечённом-занятом виде) и вот вся эта ерунда с копированием файлов в каталог денвера, перезапусками его же и прочей светохеротенью не улыбает
Не принимает у меня организм скрипты на php локально, противоестественно это. Кроме того возможно этим будет заниматься какой-то работник, а там надо уровень нажми на кнопку - получишь результат
Вот на VB или как его там звать, под винду который, мне тут когда-то чел написал подобную скриптину - милое дело. Тока я чё-то ни поиском ни гуглом не могу найди ни того человека ни того топика
цитата
08/05/10 в 17:09
FXIX
так зачем денвер. запускай в консоли путь/до/php.exe /путь/до/script.php
Код:
<?php
// $path - путь к обрабатываемому каталогу (по умолчанию в папке скрипта).
class Fileread {
public $files; // массив файлов для обработки
public $titletxt; // массив заголовков
function __construct($path='') {
if (!$path) {$path=getcwd();}
// забираем с каталога только html файлы
$files=scandir($path);
foreach($files as $a) {
$pathinfo=pathinfo($a);
if($pathinfo['extension']=='html') {
$this->files[]=$a;
}
}
$this->titletxt();
}
// читаем в массив список titles из пользовательского файла
public function titletxt() {
$string=file('woland.txt') or die('no open file');
$this->titletxt=array_unique($string);
$this->readfile();
}
// заменяем {title} на произвольную строку из файла woland.txt
public function readfile() {
foreach ($this->files as $a) {
$string=file_get_contents($a) or die('no open files');
$string=str_replace('{title}', $this->titletxt[array_rand($this->titletxt)], $string);
$fd=fopen($a, 'r+t'); ftruncate($fd, 0); fseek($fd, 0, SEEK_SET); fclose($fd);
file_put_contents($a, $string) or die('no write files');
}
}
}
?>
если по хттп то дописать:
$a=new Fileread('');
woland.txt:
newtitle1
newtitle2
newtitle3
newtitle4
цитата
08/05/10 в 17:21
Yacc
Код на C#.
Код:
using System;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
String[] t = File.ReadAllLines(args[1]);
int l = t.Length - 1;
int i = 0;
foreach (String f in Directory.GetFiles(args[0],"*.html"))
{
String p = File.ReadAllText(f, Encoding.UTF8);
p = Regex.Replace(p, "(?<=(<title>)).*?(?=(</title>))", t[i]);
File.WriteAllText(f, p, Encoding.UTF8);
i = (i < l) ? i + 1 : 0;
}
}
}
}
Копипастить в блокнот и сохранить с расширением .cs
Например hello.cs
Компилируем.
win+R
Для платформы х64 c .net 4.0
Код:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /out:e:/hello.exe e:/hello.cs
Для платформы х32 с .net 2.0
Код:
C:\Windows\Microsoft.NET\Framework\v2.0.50727\csc.exe /out:e:/hello.exe e:/hello.cs
Используем.
win+R
Код:
e:/hello.exe c:/путь/до/папки/с/хтмл c:/путь/до/файла/с/титлами.txt
Контроль ошибок отсутствует. Так что если ты опустишь один из аргументов или укажешь несуществующий файл или папку будет выдано исключение.
Удачи.
цитата
08/05/10 в 18:01
Yacc
На случай если тебя не возбуждает перспектива секса с компилятором, привожу перевод на powershell.
Код:
param($d,$f)
$t=gc $f
$l=$t.Length-1
$i=0
ls $d "*.html"|%{
sc $_.fullname ([Regex]::Replace([IO.File]::ReadAllText($_.fullname,[Text.Encoding]::UTF8),"(?<=(<title>)).*?(?=(</title>))",$t[$i])) -Encoding UTF8
if($i -lt $l){$i+=1} else{$i=0}
}
Копипастить в блокнот и сохранить с расширением .ps1
Например hello.ps1
Используем
win+R
powershell e:/hello.ps1 c:/путь/до/папки/с/хтмл c:/путь/до/файла/с/титлами.txt
Аргументы также не проверяются.
цитата
09/05/10 в 12:58
Woland
Всем спасибо, но мне таки написали на заказ
цитата
10/05/10 в 09:17
adminZ
софтина вобщето давно написана )
man sed
цитата
16/05/10 в 18:15
Моторокер
Одна из функций доргенов.
Новая тема
Ответить
Эта страница в полной версии