Удаление из файла с помощью PHP

Алекс_Q

Новичок
Удаление из файла с помощью PHP

Доброго вам здоровья!
Имееться файл data.txt в котором расположена информация в виде масива, а именно:
имя|мыло|город|IP|сообщение|имя|мыло|город|IP|сообщение|имя|мыло|город|IP|сообщение|имя|мыло|город|IP|сообщение|
Значения разделяються дешем"|" причем где нет информации вид имееться такой имя||город||сообщение| тоесть деш деш.

Мне нужно удалить из файла. Удаляю с помощью этого кода:
PHP:
$file = file("data.txt");
  $fnew = '';
  foreach($file as $row) $fnew.=trim($row);
  $file = explode("|",$fnew);

  if (isset($id)) {  
    for ($i=($id*5);$i<=($id*5+4);$i++) $file[$i]='';
    for ($i=0;$i<count($file);$i++) {
     if ($file[$i]!='') $ff[]=$file[$i];
    }

$ff[]='';
    $file=$ff;
    $e=fopen("data.txt","w+");
    $s=implode("|",$file);
    fputs($e,$s);
    fclose($e);
   }
Все работает отлично кроме тех случаев когда когда в файле есть несколько деш ||||| Тоесть информация отсуствует. Так этот код удаляет абсолютно всю пустую информацию, тоесть где было 2 и более деша становиться один деш |
Почему он трогает пустую информацию? И как оставить ее в покое?
 

Фанат

oncle terrible
Команда форума
Учись отлаживать
разберись, как работает этот код
что он делает и где в нем ошибка.
 

ps2007

Новичок
лучше использовать базу данных, геморроя будет в несколько раз меньше.

Нехорошо использовать код, не понимания как он работает :)
Тебе поможет отладка http://phpfaq.ru/debug
Смотришь на содержимое переменных в различных местах скрипта и сравниваешь с тем, что должно быть.
Если у тебя что-то не получится в процессе отладки - пиши, будем вместе разбираться.
 

Sigorma

Новичок
Удалять лишние (вовсе они не лишние, они формируют таблицу данных) делиметры не стоит, нарушиться структура твоей таблицы (имеется ввиду не только таблицы в БД) в которой хранятся данные в результате чего при выводе данных поля начнут смещаться из своих колонок.
 

Фанат

oncle terrible
Команда форума
Sigorma
ты вопрос читал?

-~{}~ 29.01.10 10:02:

а первый ответ?
 

Алекс_Q

Новичок
Мне нужен ответ, почему мой код удаляет пустую информацию? И как сделать что бы он не удалял ее?
А как карабли бороздят космические просторы меня сегодня не интересует
 

nerezus

Вселенский отказник
Алекс_Q интересуйся в другом месте, если не понимаешь прямых ответов, которые тебе уже дали.
Вот наверное тебе понравится: http://phpclub.ru/faq/WhyForum
 

Sigorma

Новичок
Алекс_Q
раздели скрипт на 3 части
1. открыть файл исходник и прочитать данные
2. преобразовать данные в нужный вид
3. открыть файл БД для записи и записать результат п.2
каждый этап заканчиваем функциями [m]print_r[/m] и [m]var_dump[/m] с целью поиска ошибок в результате обработки данных.

Автор оригинала: Алекс_Q
А как карабли бороздят космические просторы меня сегодня не интересует
Алекс меня вот больше интересует вопрос. Почему вы отвечаете в стиле будто вам кто то что то тут должен и в ответ на свои вопросы вы хотите видеть только конкретные решения лишенных попыток показать как можно самостоятельно отлаживать скрипты?
 

Алекс_Q

Новичок
Автор оригинала: Sigorma


Алекс меня вот больше интересует вопрос. Почему вы отвечаете в стиле будто вам кто то что то тут должен и в ответ на свои вопросы вы хотите видеть только конкретные решения лишенных попыток показать как можно самостоятельно отлаживать скрипты?
Для професионала в английском языке найти ошибку в таком количестве текста составит 5 сек. Я думаю для професионала в PHP языке найти ошибку в данном коде составит не более времени. Я же в данном коде ломаю голову уже вторуй день..
 

ps2007

Новичок
Я думаю для професионала в PHP языке найти ошибку в данном коде составит не более времени
Понимаешь, форум предназначен для обмена опытом. Профессионалы этого форума готовы помочь в решении проблемы, но это не значит, что они будут решать твою проблему.
Когда ты решил проблему с помощью чужого совета, ты понял суть проблемы и у тебя прибавилось опыта. Это хорошо.
Когда кто-то решил твою проблему за тебя, у тебя опыта не прибавилось, и в следующий раз ты опять придешь на форум просить готовое решение. Это плохо.

Я же в данном коде ломаю голову уже вторуй день..
Вот это уже ближе к делу. Расскажи, что делал, что ожидал увидеть и что получилось в итоге.
Я не ожидаю ответа "не получилось" или "не работает". Любую задачу можно разбить на более мелкие задачи. Если что-то не работает, нужно проверить, как выполняется каждая мелкая задача, разделяй и властвуй.

Рассказывай, что и как делал.
 

Фанат

oncle terrible
Команда форума
Я думаю для професионала в PHP языке найти ошибку в данном коде составит не более времени.
Это заблуждение.
Код не предназначен для чтения. Код предназначен для выполнения. Только выполняя код, можно найти в нем ошибку.
Это называется словом "отладка" и ей занимаются на своей работе все здесь присутствующие.

Почему они долны отложить свою работу и заняться твоей - непонятно.

Чтобы не было заблуждений. В этом - в поиске ошибок - и состоит работа программиста. Поэтому ули учись искать ошибки сам, или бросай.

-~{}~ 29.01.10 13:05:

В отличие от текста, ПРОГРАММА меняет свое СОСТОЯНИЕ с каждым выполненным оператором. То есть, надо следовать за каждым оператором и разщбираться, что он делает.
А у читающих этот топик в голове нету встроенного пхп интерпретатора.
Следовательно, найти логическую ошибку в коде сложнее, чем в тексте.

Понятно?
 

Фанат

oncle terrible
Команда форума
Структура файла изначально дурацкая.
строки-то тоже надо было бы разделять
Тогда логика скрипта была бы намного проще.
А здесь у тебя смещение надо вычислять.

-~{}~ 29.01.10 13:21:

if ($file[$i]!='') $ff[]=$file[$i];
собственно, вот эта строчка и убивает пустые элементы
 

ps2007

Новичок
Кроме того будут ошибки при удалении в два потока, нужно будет ставить lock на файл или разгребать как-нибудь по другому. Поэтому лучше использовать базу данных.
 
Сверху