|
| Дата |
|
USD/RUB | 88.6852 | BTC/USD | 67794.8860 |
|
|
|
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии. |
24.10.2010, 18:47
|
Start Post: Сгенерировать из двух файлов...
|
Senior Member
Регистрация: 28.05.2009
Сообщений: 1,321
Бабло: $164090
|
Парни, как сделать такую штуку?
Есть два файла, в одном такие сроки типа:
А другом такие:
То есть переменная и в начале, и в конце, по разному.
А мне в итоге надо вот так:
Код:
Eat Orange
Orange Suck
Buy Orange
Eat Apple
Apple Suck
Buy Apple
Eat Pine
Pine Suck
Buy Pine
Строк в итоге будут много, так что php может и помереть по дороге.
|
|
|
24.10.2010, 21:18
|
#22
|
Senior Member
Регистрация: 15.11.2008
Сообщений: 13,239
Бабло: $247847011
|
Цитата:
А в варианте от huanpedro я вставил {zamena} вместо X - выдает ошибку (со скобками что-то, синтакс еррор)
|
хм, а попробуй другие символы вместо фигурных скобок
|
|
|
24.10.2010, 21:21
|
#23
|
Senior Member
Регистрация: 28.05.2009
Сообщений: 1,321
Бабло: $164090
ТС -->
|
ТС
Я теперь сделал без фигурных скобок (второй вариант скрипта) - он просто переписывает содержимое sub.txt
|
|
|
24.10.2010, 21:25
|
#24
|
Senior Member
Регистрация: 07.02.2008
Адрес: online
Сообщений: 876
Бабло: $143415
|
пхп-шный вариант с озвученными переделками:
PHP код:
$file1=file('file1.txt'); // файл 1
$file2=file('file2.txt'); // файл 2
$zamena="x"; // что меняем
$count_file2=count($file2);
$fl=@fopen("result.txt","a+");
for($a=0; $a<count($file1); ++$a)
{
for($b=0; $b<$count_file2; ++$b)
{
fwrite($fl, str_replace($zamena,$file1[$a],$file2[$b])."\n");
}
}
fclose($fl);
|
|
|
24.10.2010, 21:25
|
#25
|
Senior Member
Регистрация: 15.11.2008
Сообщений: 13,239
Бабло: $247847011
|
не поленился протестил, работает первый вариант со скобками
напиши какую ошибку то выдает
хз даже где там можно было накосячить) может ты забыл <?php ?> ?
Последний раз редактировалось imgreen; 24.10.2010 в 21:33.
|
|
|
24.10.2010, 21:38
|
#26
|
Senior Member
Регистрация: 28.05.2009
Сообщений: 1,321
Бабло: $164090
ТС -->
|
ТС
Синтаксис прописал, конечно. Может тогда памяти не хватало. Сейчас затестил последний вариант php - успешно мне записал несколько гигов Всем респект и уважуха!
|
|
|
24.10.2010, 21:42
|
#27
|
Сеньер Член
Регистрация: 03.04.2010
Сообщений: 1,738
Бабло: $280230
|
НУ да)) что-то я ступил.
вот навреное так будет работать), лень думать, и конечно же не проверял)
# file.pl
$zamena="X";
$/="\n";
$all="";
$ii=0;
open FIL, "<sub.txt";
while($lin=<FIL>)
{
chomp($lin);
$lin[$ii]=$lin;
$ii++;
}
close FIL;
$i=0;
open FILE, "<keys.txt";
while($line=<FILE>)
{
chomp($line);
$q=0;
while($q<$ii)
{
$lin=$lin[$q];
$lin=~s/$zamena/$line/g;
$all .= $lin."\n";
$i++;
if($i>1000)
{
open FFILE,"+>>out.txt";
print FFILE $all;
close FFILE;
$i=0;
$all="";
}
$q++;
}
}
close FILE;
if($all ne "")
{
open FFILE,"+>>out.txt";
print FFILE $all;
close FFILE;
$i=0;
$all="";
}
несколько лям строк на среднем компе вполне выдержит
|
|
|
25.10.2010, 10:49
|
#28
|
Senior Member
Регистрация: 26.08.2008
Адрес: UA
Сообщений: 2,941
Бабло: $402835
|
сначала считывает весь файл в оперативку, если размер больше ОП начнет на хард кешировать или вообще сдохнет
Цитата:
for($a=0; $a<count($file1); ++$a)
|
каждый шаг цикла будет считать количество строк, лучше перед этим сохранить это значение в переменную.
Так же в середине текста может быть символ Х, например "x buy sex" (Orange buy seOrange)
PHP код:
<?php $fin1=@fopen("1.txt","r"); $fin2=@fopen("2.txt","r"); $fout=@fopen("result.txt","w+"); while ($f1=fgets($fin1,999)) { while ($f2=fgets($fin2,999)) { //поскольку х может быть в тексте или в начале\конце и чтобы не делать дополнительные проверки, добавим пробелы в начале и конце, поищем "пробел_Х_пробел", а потом уберем $templine = str_replace(" x ", " ".trim($f2)." ", " ".trim($f1)." "); $templine = str_replace(" X ", " ".trim($f2)." ", $templine); if (($templine[0]) == " ") $templine = substr($templine,1,strlen($templine)-2); if (($templine[strlen($templine)-1]) == " ") $templine = substr($templine,0,strlen($templine)); fputs ($fout,$templine."\n"); } fseek($fin2, 0); } ?>
|
|
|
|