Помогите написать небольшой скрипт

Статус
В этой теме нельзя размещать новые ответы.

Uglik

Старатель
Регистрация
8 Окт 2008
Сообщения
350
Реакции
14
Здравствуйте

Помогите реализвать такую задачу:
Есть текстовый файл состоящий из строк текстовых и ссылок. Нужно вытащить все строки с сылками и сложить в отлельные файл в чистом виде. Пример:
HTML:
http://www.domen.ru
текст
текст
текст
http://www.domen.ru
http://www.domen.ru
текст
Как я понимаю нужно что бы находило строки содержащие "http://" и копировало их в отдельный файл

За ранее благодарю
 
http://nulled.cc/showpost.php?p=1296916&postcount=4
...нужно всего лишь чуточку подправить.
Я в php вообще не волоку .... можешь подсказать что именно подправить нужно

PHP:
function to_write($way, $data, $e) {
    $hf = fopen($way, $e);
          flock($hf, LOCK_EX);
          fputs($hf, $data);
          flock($hf, LOCK_UN);
          fclose($hf);
}
$urls = file('urls.txt'); // каждый урл с новой строки
   $c = count($urls);
    for($i=0; $i < $c; $i++ ) {
       $content = @file_get_contents(trim($urls[$i]));
         if (strpos($content, 'да покупаю') !== false) {
              to_write('file-1.txt', $urls[$i], 'w+');
         } else {
              to_write('file-2.txt', $urls[$i], 'w+');
         }
   }
 
примерно так
PHP:
<?php
$urls = file('urls.txt'); // каждый урл с новой строки 
   $c = count($urls); 
   echo $c;
    for($i=0; $i < $c; $i++ ) { 
	       preg_match_all('/http:\/\//',$urls[$i],$str);
		   // print_r($str[0][0]);			 
         if (isset($str[0][0])) { 
		      // echo 'линк';
		       $fp1=fopen('links.txt', 'a');
			   fwrite($fp1,$urls[$i]);
            } else { 
			  // echo 'текст';
              $fp2=fopen('text.txt', 'a');
			   fwrite($fp2,$urls[$i]); 
         } 
   }
fclose($fp1);
fclose($fp2);
?>
 
Вот так будет в разы быстрее работать:
PHP:
<?php 
$urls = file('urls.txt'); // каждый урл с новой строки
	$c = count($urls);
	echo "Строк:" . $c;
	$fp1=fopen('links5.txt', 'a'); 
	//$fp2=fopen('text5.txt', 'a'); 
	for($i=0; $i < $c; $i++ ) {
		if(strstr($urls[$i],'http://')) {
			fwrite($fp1,$urls[$i]); 
		} 
		//else { fwrite($fp2,$urls[$i]); }
	}
fclose($fp1); 
//fclose($fp2); 
?>
А код выше - это ужас ужасный...
Использовать preg_match_all для строки чтобы урвать только первый результат - глупость несусветная.
А открытие указателя на файл в цикле - нет слов!
Похоже на то, что тот, кто писал код выше, хотел значительно замедлить конкурентов...

PS: может пригодиться код для удаления дублей доменов http://nulled.cc/showthread.php?t=198732
 
А открытие указателя на файл в цикле - нет слов!
И при этом еще fclose используется только раз после цикла :)
Да уж, жестокий код, интересно что будет с сервером если в файле 1000000 строк?
Да и вообще твой вариант не так хорош как кажется, file для больших файлов не есть гуд.
PHP:
$f = fopen('file.txt', 'r');
$fp = fopen('links.txt', 'a');
while (!feof($f)){
    $l = fgets($f);
    if (preg_match('|http|isu', $l)){
        fputs($fp, $l);
    }
}
fclose($f);
fclose($fp);
 
latteo любят у нас попинать :-] Извини не волшебник а только учусь. по поводу
А открытие указателя на файл в цикле - нет слов!
да действительно тупанул, а вот насчет регуляркой или strstr (да просто регулярка первой на ум пришла)
PHP:
<?php
$start1=gettimeofday();
$urls = file('urls.txt'); // каждый урл с новой строки 
   $c = count($urls); 
   //echo $c;
   $fp1=fopen('links.txt', 'a');
   $fp2=fopen('text.txt', 'a');
    for($i=0; $i < $c; $i++ ) { 
	         preg_match('/http:\/\//',$urls[$i],$str);
		    //print_r($str[0]);			 
           if (isset($str[0])) 
		 // if(strstr($urls[$i],'http://'))
		  { 
		       //echo 'линк';
		       fwrite($fp1,$urls[$i]);
            } else { 
			   //echo 'текст';
              fwrite($fp2,$urls[$i]); 
         } 
   }
fclose($fp1); 
fclose($fp2);
$end1=gettimeofday();
$totaltime1 = (float)($end1['sec'] - $start1['sec']) + ((float)($end1['usec'] - $start1['usec'])/1000000);

echo "Время выполнения скрипта: ".$totaltime1;
?>
Эксперемент:
в url.txt 100 строк
результат с регуляркой : Время выполнения скрипта: 0.0057912
результат с strstr : Время выполнения скрипта: 0.004777
тут ты прав конкуренты дышат в затылок :-]
 
zzallexx, объясни плиз зачем тут preg_match_all?
 
Просто он скопировал чей-то код и не знает как работает ф-я preg_match_all
 
zzallexx, объясни плиз зачем тут preg_match_all?
я же написал
да просто регулярка первой на ум пришла
конечно можно и preg_match :)
Просто он скопировал чей-то код
не чей-то а свой :) см. выше сначало скопировал потом вставил copy-paste

PS: Кстати c preg_match мой выриант получилось минимальное Время выполнения скрипта: 0.008677
Вариант a_n_d_y минимальное Время выполнения скрипта: 0.003483
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху