Soul's Buyer
С нами с 16.11.05
Сообщения: 12702
Рейтинг: 10740
|
Добавлено: 08/05/10 в 12:00 |
Скажем есть стопицот файлов html (локально, не на сервере).
Надо заменить в них {title} на строки из текстового файла (последовательно, или рандомом, или по кругу из файла - ну чтоб чтоб все разные были в итоге).
Подскажите софтину - чё то пока никуя не нашёл (просто замена - мильён вариантов, а вот чтоб из файла брало - куй ).
TextPipe уже часа полтора дрочу - не могу от неё добиться нужного эффекта.
p.s. Вариант два - вдруг найдётся не обделённый интеллектом индивидум, способный (быстро, а не послезавтра после обеда) написать утилитку мне, выполняющую ряд подобных задач или скриптик виндовый
Последний раз редактировалось: Woland (10/09/11 в 22:58), всего редактировалось 1 раз
|
|
|
|
Прожигатель жизни
С нами с 20.10.05
Сообщения: 942
Рейтинг: 638
|
Добавлено: 08/05/10 в 15:31 |
Как самый ломовой вариант: поставить денвер, и простеньким скриптом на РНР прогнать эти 100500 файлов.
|
|
|
|
Soul's Buyer
С нами с 16.11.05
Сообщения: 12702
Рейтинг: 10740
|
Добавлено: 08/05/10 в 16:11 |
Anab0L1k: Я понимаю это - но блин неудобно мне на php, ну пиздец, как неудобно - мне это надо иногда гонять по многу раз в день, применять к тоннам файлов (находясь при этом в сонном-заёбаном-пьяном-отвлечённом-занятом виде) и вот вся эта ерунда с копированием файлов в каталог денвера, перезапусками его же и прочей светохеротенью не улыбает Не принимает у меня организм скрипты на php локально, противоестественно это. Кроме того возможно этим будет заниматься какой-то работник, а там надо уровень нажми на кнопку - получишь результат
Вот на VB или как его там звать, под винду который, мне тут когда-то чел написал подобную скриптину - милое дело. Тока я чё-то ни поиском ни гуглом не могу найди ни того человека ни того топика
|
|
|
|
Добрых Дел Мастер
С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227
|
Добавлено: 08/05/10 в 17:09 |
так зачем денвер. запускай в консоли путь/до/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
|
|
|
|
С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538
|
Добавлено: 08/05/10 в 17:21 |
Код на 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 |
Контроль ошибок отсутствует. Так что если ты опустишь один из аргументов или укажешь несуществующий файл или папку будет выдано исключение.
Удачи.
|
|
|
|
С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538
|
Добавлено: 08/05/10 в 18:01 |
На случай если тебя не возбуждает перспектива секса с компилятором, привожу перевод на 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
Аргументы также не проверяются.
|
|
|
|
Soul's Buyer
С нами с 16.11.05
Сообщения: 12702
Рейтинг: 10740
|
Добавлено: 09/05/10 в 12:58 |
Всем спасибо, но мне таки написали на заказ
|
|
|
|
С нами с 06.10.06
Сообщения: 964
Рейтинг: 742
|
Добавлено: 10/05/10 в 09:17 |
софтина вобщето давно написана )
man sed
|
|
|
|
С нами с 23.02.09
Сообщения: 28
Рейтинг: 17
|
Добавлено: 16/05/10 в 18:15 |
Одна из функций доргенов.
|
|
|
|