txt file search

dakata__92

Super Moderator
За търсене в текстов файл кое е по-добре?
ползвам file(txt) след което foreach и if(strpos($name, "?") !== false ).

Кое е по-добре да ползвам: strpos или stripos ?

Има ли по-добри варянти за създаване на търсачка в текстов файл.
Има ли някъде готов клас с търсачка в тхт ?
 
fread/fgets също ще ти свършaт работа

PHP:
<?php
$handle = @fopen("/tmp/inputfile.txt", "r");
if ($handle) {
    while (($buffer = fgets($handle, 4096)) !== false) {
        echo $buffer;
    }
    if (!feof($handle)) {
        echo "Error: unexpected fgets() fail\n";
    }
    fclose($handle);
}
?>

http://php.net/manual/en/function.fgets.php
http://php.net/manual/en/function.fread.php


stripos

(PHP 5)
stripos — Find the position of the first occurrence of a case-insensitive substring in a string
strpos

(PHP 4, PHP 5)
strpos — Find the position of the first occurrence of a substring in a string
И понеже няма главно и малко '?', не би трябвало да има значение. :?:
 
// offtopic:

Завършвай си темите, де... :)

http://web-tourist.net/forum/viewtopic.php?t=127150
http://web-tourist.net/forum/viewtopic.php?t=127146
 
djman каза:
// offtopic:

Завършвай си темите, де... :)

http://web-tourist.net/forum/viewtopic.php?t=127150
http://web-tourist.net/forum/viewtopic.php?t=127146
Няма с какво да ги завърша, когато вероятно самото ми мслене по темата е било грешно. Когато се премисли нещо и решиш, че си струва да го пренапишеш от колкото да го преработваш постоянно само говори. Благодарен съм на всеки отговорил и немога да дам на всеки точка.

анонимен - от към бързодействие според теб кое е по-добре? В момента ползвам тази логика като txt файла има към 18 000 реда. Бих казъл, че в момента е достааа бързо но не пречи да се консултирам де.
PHP:
$file = file($this->filePath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$arr= array();
foreach($file as $k => $line){
	if(strpos($line, $name) !== false){ 
		$arr[$k] = $line;
	}
}

print_r($arr);
 
Ето аз как мисля:

file() връща масив с редовете на файла. Тоест тя изчита наведнъж целия файл и създава една доста голяма променлива. (в случая с 18 000 елемента)

fgets/fread връщат един-единствен ред. Което означава много по-малко информация наведнъж (което се повтаря, разбира се)

Затова вторият вариант ми се струва по-бърз, но може и да греша. За целта можеш да си направиш тест - да пуснеш и двете неща по няколко пъти и с microtime да засечеш кое е по-бързо. Ето тук някой е направил подобно нещо: http://board.phpbuilder.com/showthread.php?10102927-fgets()-vs.-file()
 
anonimen каза:
Ето аз как мисля:

file() връща масив с редовете на файла. Тоест тя изчита наведнъж целия файл и създава една доста голяма променлива. (в случая с 18 000 елемента)

fgets/fread връщат един-единствен ред. Което означава много по-малко информация наведнъж (което се повтаря, разбира се)

Затова вторият вариант ми се струва по-бърз, но може и да греша. За целта можеш да си направиш тест - да пуснеш и двете неща по няколко пъти и с microtime да засечеш кое е по-бързо. Ето тук някой е направил подобно нещо: http://board.phpbuilder.com/showthread.php?10102927-fgets()-vs.-file()

Честно казано не успях да определя кой е по-добрият варянт. При всяко положение file() повежда в класацията ми за ползване, благодарение на своите флагове.
http://bg2.php.net/manual/bg/function.file.php
(извън темата)
/* Горният линк предоставя доста флагове.
http://bg2.php.net/manual/en/function.file.php
Този не предоставя толкова много.
Всъщност Българският показва, че има флагове налични от 6 версия нагоре.
*/

Та не открих съществена разлика, която съществено да повиши производителността. :)
Правя си търсачка на стрингове в текстов файл.
 

Back
Горе