Сгенерировать из двух файлов... - Форум успешных вебмастеров - GoFuckBiz.com - Страница 3
 
 
Форум успешных вебмастеров - GoFuckBiz.com

  Форум успешных вебмастеров - GoFuckBiz.com > Бизнес-решения > Скрипты, программы и технические решения
Дата
USD/RUB88.6852
BTC/USD67794.8860
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии.

Закрытая тема
Опции темы Опции просмотра
Старый 24.10.2010, 18:47
Start Post: Сгенерировать из двух файлов... 
  #21
1een
Senior Member
 
Аватар для 1een
 
Регистрация: 28.05.2009
Сообщений: 1,321
Бабло: $164090
По умолчанию

Парни, как сделать такую штуку?
Есть два файла, в одном такие сроки типа:
Код:
Orange
Apple
Pine
А другом такие:
Код:
Eat x
X Suck
Buy x
То есть переменная и в начале, и в конце, по разному.
А мне в итоге надо вот так:
Код:
Eat Orange
Orange Suck
Buy Orange
Eat Apple
Apple Suck
Buy Apple
Eat Pine
Pine Suck
Buy Pine
Строк в итоге будут много, так что php может и помереть по дороге.
1een вне форума  
Старый 24.10.2010, 21:18   #22
imgreen
Senior Member
 
Аватар для imgreen
 
Регистрация: 15.11.2008
Сообщений: 13,239
Бабло: $247847011
По умолчанию

Цитата:
А в варианте от huanpedro я вставил {zamena} вместо X - выдает ошибку (со скобками что-то, синтакс еррор)
хм, а попробуй другие символы вместо фигурных скобок
imgreen на форуме  
Старый 24.10.2010, 21:21   #23
1een
Senior Member
 
Аватар для 1een
 
Регистрация: 28.05.2009
Сообщений: 1,321
Бабло: $164090
ТС -->
автор темы ТС По умолчанию

Я теперь сделал без фигурных скобок (второй вариант скрипта) - он просто переписывает содержимое sub.txt
1een вне форума  
Старый 24.10.2010, 21:25   #24
dovgan
Senior Member
 
Аватар для dovgan
 
Регистрация: 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($flstr_replace($zamena,$file1[$a],$file2[$b])."\n");    
  }    
 }
fclose($fl); 
dovgan вне форума  
Старый 24.10.2010, 21:25   #25
imgreen
Senior Member
 
Аватар для imgreen
 
Регистрация: 15.11.2008
Сообщений: 13,239
Бабло: $247847011
По умолчанию

не поленился протестил, работает первый вариант со скобками
напиши какую ошибку то выдает
хз даже где там можно было накосячить) может ты забыл <?php ?> ?

Последний раз редактировалось imgreen; 24.10.2010 в 21:33.
imgreen на форуме  
Старый 24.10.2010, 21:38   #26
1een
Senior Member
 
Аватар для 1een
 
Регистрация: 28.05.2009
Сообщений: 1,321
Бабло: $164090
ТС -->
автор темы ТС По умолчанию

Синтаксис прописал, конечно. Может тогда памяти не хватало. Сейчас затестил последний вариант php - успешно мне записал несколько гигов Всем респект и уважуха!
1een вне форума  
Старый 24.10.2010, 21:42   #27
huanpedro
Сеньер Член
 
Аватар для huanpedro
 
Регистрация: 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="";
}

несколько лям строк на среднем компе вполне выдержит
huanpedro вне форума  
Старый 25.10.2010, 10:49   #28
RedHead
Senior Member
 
Аватар для RedHead
 
Регистрация: 26.08.2008
Адрес: UA
Сообщений: 2,941
Бабло: $402835
По умолчанию

Цитата:
file
сначала считывает весь файл в оперативку, если размер больше ОП начнет на хард кешировать или вообще сдохнет

Цитата:
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($fin20);
    }
?>
RedHead вне форума