Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с чтением файла, Чтение файлов средствами PHP 
:(
    Опции темы
SEVKA
Дата 10.10.2008, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 10.10.2008

Репутация: нет
Всего: нет



Столкнулся вот с какой проблемой ... при чтениии и распечатке содержимого текстового файла 

код 

Код

$log_file = "log.txt";
$log_list = file($log_file);
$log_count = count($log_list); 
$log_fp = fopen($log_file, "r");
for($i=0; $i<$log_count ; $i++)
{
$log_str = $log_list[$i];
$log_str_t = trim($log_str);
$n_log_array = explode("\t", $log_str_t);
if($n_log_array[6] == 0)

echo "{$log_list[$i]} and $i <br>";
}
}
fclose($log_fp);

работает совершенно корректно 


а если пробую читать строки снизу вверх 
Код

$log_file = "log.txt";
$log_list = file($log_file);
$log_count = count($log_list); 
$log_fp = fopen($log_file, "r");
for($i=$log_count-1; $i>=0 ; $i--)
{
$log_str = $log_list[$i];
$log_str_t = trim($log_str);
$n_log_array = explode("\t", $log_str_t);
if($n_log_array[6] == 0)

echo "{$log_list[$i]} and $i <br>";
}
}
fclose($log_fp);


работает некорректно 

помогите разобраться в чем проблема 

заранее благодарен 


Это сообщение отредактировал(а) SEVKA - 10.10.2008, 02:02
PM MAIL   Вверх
teroni
Дата 10.10.2008, 00:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 15.5.2007
Где: Днепропетровск

Репутация: 8
Всего: 22



Да что-то Вы сами себе жизнь усложняете.. Столько переменных, лишнее функции fopen, fclose..
Если первое переписать покороче выйдет:
Код

foreach (file('log.txt') as $i => $line)
   {
   $p = explode("\t", trim($line));
   if ($p[6] == 0)
      echo "$line and $i <br>";
   }

А что Вы хотите от второго куска кода и чем он не корректен - я не понял.
PM MAIL   Вверх
SEVKA
Дата 10.10.2008, 01:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 10.10.2008

Репутация: нет
Всего: нет



Ну  это  на самом  деле  моя  первая  попытка  программированья  на  пхп  от того   такой  корявый  код  .  но  дело  не  в  отсутствии  стиля  .  
второй  кусок  кода  просто  не  фильтрует  по  заданному  критерию
 
Код
 if($n_log_array[6] == 0) 
  

и  я  сам  не  могу  понять  почему  

Это сообщение отредактировал(а) SEVKA - 10.10.2008, 02:04
PM MAIL   Вверх
teroni
Дата 10.10.2008, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 15.5.2007
Где: Днепропетровск

Репутация: 8
Всего: 22



Странно, если первый работает, то должен и второй работать...
Если мой первый модифицировать - то будет что-то такое.
Код

foreach (array_reverse(file('log.txt')) as $i => $line)
   {
   $p = explode("\t", trim($line));
   if ($p[6] == 0)
      echo "$line and $i <br>";
   }


Это сообщение отредактировал(а) teroni - 10.10.2008, 12:25
PM MAIL   Вверх
unicross
Дата 10.10.2008, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 422
Регистрация: 15.6.2008

Репутация: 21
Всего: 53



SEVKA, ваши коды на моем компе работают. И тот и другой при таком содержании файла "log.txt"

Код

а1    а2    а3    а4    а5    а6    0
б1    б2    б3    б4    б5    б6    0
в1    в2    в3    в4    в5    в6    1
г1    г2    г3    г4    г5    г6    0
д1    д2    д3    д4    д5    д6    0



Я немного модифицировал ваш код (убрал явно лишние элементы)

Код

$log_list = file("log.txt");
$log_count = count($log_list);
for ($i=0; $i<$log_count ; $i++)
//for ($i=$log_count-1; $i>=0; $i--)
{
   $log_str_t = trim($log_list[$i]);
   $n_log_array = explode("\t", $log_str_t);
   if ($n_log_array[6]  === "0") echo "{$log_list[$i]} and $i <br>";
   //if ($n_log_array[5] == 0) echo "{$log_list[$i]} and $i <br>";
}


При строке 

Код

for ($i=0; $i<$log_count ; $i++)


выводит 

Код

а1 а2 а3 а4 а5 а6 0 and 0 
б1 б2 б3 б4 б5 б6 0 and 1 
г1 г2 г3 г4 г5 г6 0 and 3 
д1 д2 д3 д4 д5 д6 0 and 4


а при 

Код

for ($i=$log_count-1; $i>=0; $i--)


выводит

Код

д1 д2 д3 д4 д5 д6 0 and 4 
г1 г2 г3 г4 г5 г6 0 and 3 
б1 б2 б3 б4 б5 б6 0 and 1 
а1 а2 а3 а4 а5 а6 0 and 0


Единственная проблема находится в строке 

Код

if ($n_log_array[6] == 0)


Все дело в том, что при использовании оператора == интерпретатор пытается преобразовать данные к одному типу. Если строку невозможно преобразовать в число, то она приравнивается к 0. Попробуйте использовать строку

Код

if ($n_log_array[5] == 0) echo "{$log_list[$i]} and $i <br>";


и получите все элементы файла. Поэтому это выражение будет истинным если значение 0 или встретится просто строка. В этом случае лучше использовать оператор ===. Приведение типов здесь не производится.

Код

if ($n_log_array[6]  === "0") echo "{$log_list[$i]} and $i <br>";

PM MAIL WWW   Вверх
MoLeX
Дата 10.10.2008, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



Цитата(unicross @  10.10.2008,  14:31 Найти цитируемый пост)
Все дело в том, что при использовании оператора == интерпретатор пытается преобразовать данные к одному типу. Если строку невозможно преобразовать в число, то она приравнивается к 0. Попробуйте использовать строку

smile

Добавлено через 15 секунд
а случайно не сравнивает?

Добавлено через 1 минуту и 20 секунд
Цитата(unicross @  10.10.2008,  14:31 Найти цитируемый пост)
оператор ===.

а этот оператор вроде не только проверяет подходят ли данные но и смотрит что это (int, string, bool ...)


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
SEVKA
Дата 10.10.2008, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 10.10.2008

Репутация: нет
Всего: нет



Большое  спасибо  всем  .  Дело  было  действительно  не  в  циклах  ,  а  в  записи  в  файл  log  .  Уже  исправляю   ошибки  .
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1310 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.