Реклама на сайте Advertise with us

Замена (во множестве файлов) шаблона на строку из файла

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:

Soul's Buyer

С нами с 16.11.05
Сообщения: 12702
Рейтинг: 10740


Передовик Master-X (16.10.2008) Передовик Master-X (01.11.2008) Передовик Master-X (16.11.2008) Передовик Master-X (01.12.2008) Передовик Master-X (16.12.2008) Ветеран трепа Master-X (01.01.2009)
Ссылка на сообщениеДобавлено: 08/05/10 в 12:00       Ответить с цитатойцитата 

Скажем есть стопицот файлов html (локально, не на сервере).
Надо заменить в них {title} на строки из текстового файла (последовательно, или рандомом, или по кругу из файла - ну чтоб чтоб все разные были в итоге).

Подскажите софтину - чё то пока никуя не нашёл (просто замена - мильён вариантов, а вот чтоб из файла брало - куй icon_sad.gif ).
TextPipe уже часа полтора дрочу - не могу от неё добиться нужного эффекта.

p.s. Вариант два - вдруг найдётся не обделённый интеллектом индивидум, способный (быстро, а не послезавтра после обеда) написать утилитку мне, выполняющую ряд подобных задач или скриптик виндовый

Последний раз редактировалось: Woland (10/09/11 в 22:58), всего редактировалось 1 раз

0
 

Прожигатель жизни

С нами с 20.10.05
Сообщения: 942
Рейтинг: 638

Ссылка на сообщениеДобавлено: 08/05/10 в 15:31       Ответить с цитатойцитата 

Как самый ломовой вариант: поставить денвер, и простеньким скриптом на РНР прогнать эти 100500 файлов.

3
 

Soul's Buyer

С нами с 16.11.05
Сообщения: 12702
Рейтинг: 10740


Передовик Master-X (16.10.2008) Передовик Master-X (01.11.2008) Передовик Master-X (16.11.2008) Передовик Master-X (01.12.2008) Передовик Master-X (16.12.2008) Ветеран трепа Master-X (01.01.2009)
Ссылка на сообщениеДобавлено: 08/05/10 в 16:11       Ответить с цитатойцитата 

Anab0L1k: Я понимаю это icon_smile.gif - но блин неудобно мне на php, ну пиздец, как неудобно - мне это надо иногда гонять по многу раз в день, применять к тоннам файлов (находясь при этом в сонном-заёбаном-пьяном-отвлечённом-занятом виде) и вот вся эта ерунда с копированием файлов в каталог денвера, перезапусками его же и прочей светохеротенью не улыбает icon_smile.gif Не принимает у меня организм скрипты на php локально, противоестественно это. Кроме того возможно этим будет заниматься какой-то работник, а там надо уровень нажми на кнопку - получишь результат icon_smile.gif

Вот на VB или как его там звать, под винду который, мне тут когда-то чел написал подобную скриптину - милое дело. Тока я чё-то ни поиском ни гуглом не могу найди ни того человека ни того топика icon_sad.gif

Cdn быстро, надёжно и недорого!

0
 

Добрых Дел Мастер

С нами с 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

8
 



С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538


Передовик Master-X (01.11.2009) Передовик Master-X (16.11.2009) Передовик Master-X (01.02.2011) Передовик Master-X (01.12.2011) Передовик Master-X (16.12.2011) Ветеран трепа Master-X (01.01.2014)
Ссылка на сообщениеДобавлено: 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


Контроль ошибок отсутствует. Так что если ты опустишь один из аргументов или укажешь несуществующий файл или папку будет выдано исключение.

Удачи. smail101.gif

8
 



С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538


Передовик Master-X (01.11.2009) Передовик Master-X (16.11.2009) Передовик Master-X (01.02.2011) Передовик Master-X (01.12.2011) Передовик Master-X (16.12.2011) Ветеран трепа Master-X (01.01.2014)
Ссылка на сообщениеДобавлено: 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

Аргументы также не проверяются.

icon_smile.gif

8
 

Soul's Buyer

С нами с 16.11.05
Сообщения: 12702
Рейтинг: 10740


Передовик Master-X (16.10.2008) Передовик Master-X (01.11.2008) Передовик Master-X (16.11.2008) Передовик Master-X (01.12.2008) Передовик Master-X (16.12.2008) Ветеран трепа Master-X (01.01.2009)
Ссылка на сообщениеДобавлено: 09/05/10 в 12:58       Ответить с цитатойцитата 

Всем спасибо, но мне таки написали на заказ icon_razz.gif

Cdn быстро, надёжно и недорого!

0
 



С нами с 06.10.06
Сообщения: 964
Рейтинг: 742

Ссылка на сообщениеДобавлено: 10/05/10 в 09:17       Ответить с цитатойцитата 

софтина вобщето давно написана )
man sed

0
 



С нами с 23.02.09
Сообщения: 28
Рейтинг: 17

Ссылка на сообщениеДобавлено: 16/05/10 в 18:15       Ответить с цитатойцитата 

Одна из функций доргенов.

0
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »