[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Запись только уникальных строк
sx000

$file_base_url_temp="base_url.txt";
$file_base_url_temp_="base_url_.txt";
$fp_file_base_url_temp=fopen($file_base_url_temp,"a+");
while (!feof($fp_file_base_url_temp))
{
$fp_file_base_url_temp_=fopen($file_base_url_temp_,"a+");
$string=fgets($fp_file_base_url_temp, 8096);
$string_arr=explode("&ie=",$string);
$string_arr_unic=explode("dp/",$string_arr[0]);
//echo $string_arr_unic[0]."\r\n";
while (!feof($fp_file_base_url_temp_))
{
$string_ = fgets($fp_file_base_url_temp_, 8096);
echo "Ищем в строке:".$string_." === ".$string_arr_unic[0]."\r\n",
$pos = (strpos($string_arr_unic[0], $string_));
if ($pos === true)
{
fputs($fp_file_base_url_temp_,$string_arr[0]."\r\n");
}

}



}

fclose($fp_file_base_url_temp_);
fclose($fp_file_base_url_temp);

Пытаюсь написать проверки части строки на уникальность в записываемый файл. Блин не как не могу понять вроде все ок, а не работает. Ткните в ошибку.



Спустя 13 минут, 57 секунд (24.04.2011 - 17:46) Mirexzpalich написал(а):
Ну... давайте посмотрим....
В первой части вы так сказать считываете строку... и выделяете там необходимую часть для сравнения.. все норм....
В 2-м цикле(вложеном) вы считываете 1 строчку.. ищите в ней строку стравнения, и если не нашли, то стразу записываете... Вам так надо? Остальные строчки может тоже следет просмотреть?? И только после этого, если не найдено совпадений, записывать?... к тому же, считав 1 строчку вы закрываете файл.... И последующие разы цикл наверно просто пролетает... Наверно в base_url_.txt у вас всегда 1 строчка... не так ли???

Может я ошибаюсь....

Спустя 9 минут, 3 секунды (24.04.2011 - 17:55) sx000 написал(а):
Просто я запись сделаю файл и мне надо снова его перечитать перед добавлением чтоб построчно найти в них часть массива. Ну я переставил закрытие файл. И добавил true

Спустя 2 минуты, 35 секунд (24.04.2011 - 17:58) Mirexzpalich написал(а):
Сори.... просмотрел, что открываешь файла в первом цикле =)
Так ты файл-то весь, а не одну строку

Спустя 1 минута, 26 секунд (24.04.2011 - 17:59) Mirexzpalich написал(а):

$file_base_url_temp="base_url.txt";
$file_base_url_temp_="base_url_.txt";
$fp_file_base_url_temp=fopen($file_base_url_temp,"a+");
while (!feof($fp_file_base_url_temp))
{
$fp_file_base_url_temp_=fopen($file_base_url_temp_,"a+");
$string=fgets($fp_file_base_url_temp, 8096);
$string_arr=explode("&ie=",$string);
$string_arr_unic=explode("dp/",$string_arr[0]);
//echo $string_arr_unic[0]."\r\n";
while (!feof($fp_file_base_url_temp_))
{
$find = FALSE;
$string_ = fgets($fp_file_base_url_temp_, 8096);
echo "Ищем в строке:".$string_." === ".$string_arr_unic[0]."\r\n",
$pos = (strpos($string_arr_unic[0], $string_));
if ($pos === true)
{
$find = true;
}

}

if ($find === true)
{
fputs($fp_file_base_url_temp_,$string_arr[0]."\r\n");
}
fclose($fp_file_base_url_temp_);



}

fclose($fp_file_base_url_temp);

Спустя 5 минут, 4 секунды (24.04.2011 - 18:04) Mirexzpalich написал(а):
Только после записи посоветовал бы поставить маааленькую задержку... а всякий случай...

Спустя 4 минуты, 54 секунды (24.04.2011 - 18:09) sx000 написал(а):
почему задержку?

Спустя 3 минуты, 11 секунд (24.04.2011 - 18:12) sx000 написал(а):

if ($find === true)
{
fputs($fp_file_base_url_temp_,$string_arr[0]."\r\n");
}
fclose($fp_file_base_url_temp_);


А зачем вот эта конструкция дополнительная? почему нельзя в условии
if ($pos === true)
запись сделать в файл?

Спустя 1 минута, 55 секунд (24.04.2011 - 18:14) Mirexzpalich написал(а):
Ну.... видишь ли.... Пока запишется пока откроется.... Время записи-то куда дольше времени чтения.... Может что вдруг и случиться.... Тут-то не знаю... Может и нет.. Просто у меня недавно была ситауция, при разборе лога апача строил графики и одновременно писались файлы с картами для каждой картинки.... так вот без задержки эти карты отваливались... они не успевали записаться чтоли.. и подключались пустые файлы.... Пришлось делать редирект с задержкой на страницу с результатами

Спустя 1 минута, 58 секунд (24.04.2011 - 18:16) Mirexzpalich написал(а):
Так... из base_url.txt в base_url_.txt тебе необходимо записывать только уникальные строки? или повторяющиеся?


Спустя 5 минут, 16 секунд (24.04.2011 - 18:21) sx000 написал(а):
Уникальные, НО по части массива $string_arr_unic[0].
В вашем случае про апач в голову пришла мысль писать с локами быстрее должно быть по сути. Ну так мысль мож я и не прав.

Спустя 8 минут, 8 секунд (24.04.2011 - 18:30) Mirexzpalich написал(а):
Тобишь запись идет если часть $string_arr_unic[0]. невстречается в файле base_url_.txt?

Спустя 16 минут, 7 секунд (24.04.2011 - 18:46) sx000 написал(а):
да все верно
Ну по сути идет перебор одного файла в другой, но в файл который записываем должны писать только те у которых $string_arr_unic[0] уникальная по сравнению с строками файла base_url_.txt

Спустя 4 минуты, 49 секунд (24.04.2011 - 18:51) Mirexzpalich написал(а):

while (!feof($fp_file_base_url_temp_))
{

$string_ = fgets($fp_file_base_url_temp_, 8096);
echo "Ищем в строке:".$string_." === ".$string_arr_unic[0]."\r\n",
$pos = (strpos($string_arr_unic[0], $string_));
if ($pos === true) break; //Если нашли совпадание, то значит записывать строчку не надо и
// дальше просматривать файл тоже не стоит.... выходим из while - break;


}
if ($pos === false) // Если ни что не найдено, то запишем...
{
fputs($fp_file_base_url_temp_,$string_arr[0]."\r\n");
}
fclose($fp_file_base_url_temp_);


Спустя 8 минут, 55 секунд (24.04.2011 - 18:59) sx000 написал(а):
$file_base_url_temp="base_url.txt";
$file_base_url_temp_="base_url_.txt";
$fp_file_base_url_temp=fopen($file_base_url_temp,"a+");
while (!feof($fp_file_base_url_temp))
{
$fp_file_base_url_temp_=fopen($file_base_url_temp_,"a+");
$string=fgets($fp_file_base_url_temp, 8096);
$string_arr=explode("&ie=",$string);
$string_arr_unic=explode("dp/",$string_arr[0]);
//echo $string_arr_unic[0]."\r\n";
while (!feof($fp_file_base_url_temp_))
{

$string_ = fgets($fp_file_base_url_temp_, 8096);
echo "Ищем в строке:".$string_." === ".$string_arr_unic[0]."\r\n",
$pos = (strpos($string_arr_unic[0], $string_));
if ($pos === true) break; //если нашли то выход

}
if ($pos === false) // Если ни что не найдено, то запишем...
{
fputs($fp_file_base_url_temp_,$string_arr[0]."\r\n");
}
fclose($fp_file_base_url_temp_);



}
fclose($fp_file_base_url_temp);



Итого код получился такой. Но он складывает в файл НЕ уники $string_arr_unic[0] а не должен же.
Короче че то я запутываться стал :)

Спустя 4 минуты, 37 секунд (24.04.2011 - 19:04) Mirexzpalich написал(а):
$pos = strpos($string_,$string_arr_unic[0]);

Спустя 6 минут, 11 секунд (24.04.2011 - 19:10) sx000 написал(а):
$pos = strpos($string_,$string_arr_unic[0]); 

Так нам же надо $string_arr_unic[0] искать в каждой строке $string_ а у вас получается наоброт. Первое же пишется "что ищем, где ищем" Да и в таком варианте оно тоже не пишет уникальные

Спустя 6 минут, 9 секунд (24.04.2011 - 19:16) Mirexzpalich написал(а):
sx000
Да ты прав.... Извини.... твой вариант был верен... Давай посмторим....
В строке $string_ мы ищем $string_arr_unic[0].... Причем... $string_arr_unic[0] может быть начале строки.... да?... тогда strpos($string_arr_unic[0],$string_), вернет значене 0... мол строка $string_arr_unic[0] встречается в строке $string_ с 0 позиции...
а у нас стоит условие

if ($pos === true) break;

$pos === true что означет что не только то, что $pos должно быть отлично от нуля и равно по ТИПУ .... Условие будет всегда пролетать.. Надо так:

if ($pos !== false) break;

Спустя 29 минут, 28 секунд (24.04.2011 - 19:46) sx000 написал(а):
$file_base_url_temp="base_url.txt";
$file_base_url_temp_="base_url_.txt";
$fp_file_base_url_temp=fopen($file_base_url_temp,"a+");
while (!feof($fp_file_base_url_temp))
{
$fp_file_base_url_temp_=fopen($file_base_url_temp_,"a+");
$string=fgets($fp_file_base_url_temp, 8096);
$string_arr=explode("&ie=",$string);
$string_arr_unic=explode("dp/",$string_arr[0]);
//echo $string_arr_unic[0]."\r\n";
while (!feof($fp_file_base_url_temp_))
{

$string_ = fgets($fp_file_base_url_temp_, 8096);
echo "Ищем в строке:".$string_." === ".$string_arr_unic[0]."\r\n",
$pos = (strpos($string_arr_unic[0], $string_));
if ($pos !== false) break;

}
if ($pos === false) // Если ни что не найдено, то запишем...
{
fputs($fp_file_base_url_temp_,$string_arr[0]."\r\n");
}
fclose($fp_file_base_url_temp_);



}
fclose($fp_file_base_url_temp);


почему

  if ($pos === false) // Если ни что не найдено, то запишем...
{
fputs($fp_file_base_url_temp_,$string_arr[0]."\r\n");
}
fclose($fp_file_base_url_temp_);


вынесен из основного цикла построчного сравнения? Он же не вернется, однус троку первую сравнит и уйдет на запись. А надо искать в каждой строке $string_ искать $string_arr_unic[0].

Спустя 6 минут, 40 секунд (24.04.2011 - 19:53) Mirexzpalich написал(а):

while (!feof($fp_file_base_url_temp_)) // Будем читать пока не дойдем до конца
// нам ведь это надо... просмотреть все строки

//Этот цикл будет идти от СИХ

{

$string_ = fgets($fp_file_base_url_temp_, 8096); // Считываем строку
$pos = (strpos($string_arr_unic[0], $string_)); // cмотрим, встречается ли в ней $string_arr_unic[0]
if ($pos !== false) break; // Если встречается... то дальше сравнивать смысла нет.... и мы тупо выходим из цикла
// Если же такой подстроки во всем файле нет, то после окончания цикла $pos будет равен false....


}
// ДО СИХ

            
if ($pos === false) // Если ни что не найдено, то запишем...
fputs($fp_file_base_url_temp_,$string_arr[0]."\r\n");
fclose($fp_file_base_url_temp_);// закроем файл


Понятнее?

Спустя 13 часов, 22 минуты, 33 секунды (25.04.2011 - 09:15) sx000 написал(а):
не работает этот код.

Спустя 3 часа, 49 секунд (25.04.2011 - 12:16) Mirexzpalich написал(а):
Скинь содержимое base_url.txt..... и покажи что должно получиться в base_url_.txt Может я чего-то не понимаю.....
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.