PDA

Просмотр полной версии : Заменить слова рандомно


skagen2
26.03.2010, 05:45
Имеется текст, пример:

"двести килограмм картофеля сняли"
"двести килограмм картофеля сняли"
"двести килограмм картофеля сняли"
"двести килограмм картофеля сняли"
"двести килограмм картофеля сняли"
"двести килограмм картофеля сняли"
"двести килограмм картофеля сняли"
"двести килограмм картофеля сняли"
"двести килограмм картофеля сняли"
"двести килограмм картофеля сняли"

- именно с такими повторениями. Так вот, нужно чтобы каждое слово "картофеля" было заменено рандомно (произвольно)...
и должно получится что-то типо:

"двести килограмм картофеля сняли"
"двести килограмм фываавааа сняли"
"двести килограмм ывафыпрл сняли"
"двести килограмм упцуйцу сняли"
"двести килограмм ыпвпфыпвп сняли"
и т.п... думаю, смысл понятен=)))))))))


В общем, кто возьмётся и за какую плату=)) нужен такой вот автозаменщик-) или подскажите, где воспользоваться)
Благодарю!

ICQ#: 640-000-342

KaE
26.03.2010, 09:09
Набросал тут на Perl немного:

#!/usr/bin/perl
use strict;

use Getopt::Long;
my $source_file = "";
my $set_of_world = "";
my $result_file;
my @set_of_world = ();

GetOptions("source=s" => \$source_file,
"set=s" => \$set_of_world,
"result=s" =>\$result_file);

unless ($source_file && $set_of_world ) {
Usage();
}

open(fd_set, "$set_of_world");
while(<fd_set>) {
chomp $_;
push @set_of_world, $_;
}
close(fd_set);

open(fd_source, "$source_file") or die "Can't open $source_file: $!\n";
if(defined($result_file)) {
open(fd_result, ">$result_file");
}
while(<fd_source>) {
chomp $_;
my($a, $b, $c, $d) = split(' ', $_);
if(defined($result_file)) {
print fd_result "$a $b ".$set_of_world[rand @set_of_world]." $d\n";
}
else {
print "$a $b ".$set_of_world[rand @set_of_world]." $d\n";
}
}
if(defined($result_file)) {
close(fd_result);
}
close(fd_source);

sub Usage() {
print "Usage: perl ./script.pl --source=source.txt --set=set.txt [--result=result.txt]";
exit 0;
}

skagen2
26.03.2010, 13:59
А что скачать - не подскажете?

TRX.new
26.03.2010, 14:01
ActivePerl, скачай и установи.. потом создай файл name.pl .. и запускай Пуск -> Выполнить -> cmd .. там пиши путь до скрипта и жми enter

KaE
26.03.2010, 14:07
Качаете ActivePerl (http://downloads.activestate.com/ActivePerl/releases/5.10.1.1007/ActivePerl-5.10.1.1007-MSWin32-x86-291969.msi) . Ставите. Копируете скрипт отсюда. В файлике source.txt - то, что надо поменять. В файле set.txt - набор рандомных слов. Кладете все это файло в одну папку со скриптом и запускаете:

perl script.pl --source=source.txt --set=set.txt

На консоль выпадет результат.
Если хотите, чтобы резалт падал в файл, то запускаете вот так:
perl script.pl --source=source.txt --set=set.txt --result=result.txt

Все!)

Fepsis
26.03.2010, 14:27
А зачем тут что-то заменять, если можно сразу генерировать то, что тебе нужно..?!
#!/usr/bin/perl


$n = 20; # нужное количество строк
$txt_do = 'двести килограмм'; # текст до рандомного слова
$txt_posle = 'сняли'; # текст после рандомного слова


open(OUT, "> out.txt");

for($i = 1; $i <= $n; $i++)
{
$rndword = join('', map(('а','б','в','г','д','е','ё','ж','з', 'и','й','к','л','м','н','о','п','р','с', 'т','у','ф','х','ц','ч','ш','щ','ь','ы', 'ъ','э','ю','я')[rand(33)], (1..7)));
print OUT $txt_do.' '.$rndword.' '.$txt_posle."\n";
}

close(OUT);
Результат:
двести килограмм фцддонм сняли
двести килограмм мчемямц сняли
двести килограмм цьэфэтю сняли
двести килограмм иъашывс сняли
двести килограмм изщюциж сняли
двести килограмм вшдтькъ сняли
двести килограмм зуёцпфж сняли
двести килограмм юмьцёць сняли
двести килограмм сэёсорй сняли
двести килограмм бгхрчьх сняли
двести килограмм нвжншэв сняли
двести килограмм епюялди сняли
двести килограмм гысъпщг сняли
двести килограмм нзлшэжю сняли
двести килограмм ъчёлвъс сняли
двести килограмм нжздеыл сняли
двести килограмм нлвлъеъ сняли
двести килограмм геяуалю сняли
двести килограмм еъёъйоы сняли
двести килограмм шиийзюэ сняли