Огромные файлы

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

LEXAlForpostl

Мой дом здесь!
Регистрация
21 Май 2008
Сообщения
766
Реакции
228
Здравствуйте.
Подскажите, пожалуйста, как считать файл 2 ГБ по-строчно.
И к каждой строке применить функцию myfunc ().
 
по строкам 2 гига перебрал за 5 минут
PHP:
function myfunc($str){
    if(!preg_match('/blogs\.mail\.ru/i', $str)){
        return false;
    }
    return $str;
}
$in=fopen("blogs.txt","r");
$out=fopen("blogs_out.txt","w");
while($line=fgets($in)){ 
    if(myfunc($line))fwrite($out, $line);
}
fclose($in);
fclose($out);
 
Странно. Не работает. Создаёт на выходе пустой файл.
Необходимо найти все домены в зоне ру, на кождой строке, если они там есть.
PHP:
$in=fopen("a.txt","r");
$out=fopen("b.txt","w");
while($line=fgets($in)){ 
if (preg_match("|http:\/\/(.*?).ru|is", $str,$preg))
fwrite($out, $preg[1].".ru\n");

}
fclose($in);
fclose($out);
 
Нафига использовать регулярку на таком объеме данных?
 
Другого способа, для того, чтобы урлы выцепить не знаю.
 
PHP:
$in=fopen("a.txt","r");
$out=fopen("b.txt","w");
while($line=fgets($in)){
if (preg_match_all("|http:\/\/([^\/\s]*?)\.ru|is",$line,$preg)) {
fwrite($out,join(".ru\n",$preg[1]).".ru\n");	
} }
fclose($in);
fclose($out);

без preg_match

PHP:
$in=fopen("a.txt","r");
$out=fopen("b.txt","w");
while($line=fgets($in)){
$line=strstr($line,"://") and $n=stripos($line,'ru') and
$line=substr($line,3,$n-4) and fwrite($out,$line.".ru\n");
}
fclose($in);
fclose($out);
 
Домен не в каждой строке есть.
Если нет домена, то в файл ничего писать не надо.
 
Попробуй так: (экранировать точку забыл, и модификатор s там не понятно зачем.
PHP:
$in=fopen("a.txt","r");
$out=fopen("b.txt","w");
while($line=fgets($in)){ 
if (preg_match("|http\:\/\/(.*?)\.ru|i", $line,$preg))
fwrite($out, $preg[1].".ru\n");
}
fclose($in);
fclose($out);
Ну и $str и $line не путай в следующий раз :)

Добавлено через 2 минуты
И кстати
PHP:
while($line = fgets($in)) {
оборвет цикл как только встретит пустую строку. Лучше уж по-старинке, через feof().. Ну то есть я к тому что конструкция эта чрезвычайно удобная, но пользоваться все же осторожно надо.
 
Здравствуйте.
Подскажите, пожалуйста, как считать файл 2 ГБ по-строчно.
И к каждой строке применить функцию myfunc ().
На PHP забудь про такое. Для этого есть другие языки. Я писал на С++ и Ассемблере обработчик, а в php отдавал результат операции.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху