За последние 24 часа нас посетили 16462 программиста и 1677 роботов. Сейчас ищут 869 программистов ...

Найти и удалить строку из файла

Тема в разделе "PHP для новичков", создана пользователем SV4, 28 окт 2011.

  1. SV4

    SV4 Активный пользователь

    С нами с:
    24 сен 2011
    Сообщения:
    59
    Симпатии:
    0
    Адрес:
    Красноярск
    Добрых суток!
    У меня возник очередной вопрос по работе с текстовым файлом, но не стал писать
    здесь, а решил создать новую тему.
    Хотелось бы посоветоваться, как лучше организовать работу скрипта:
    Есть текстовый файл, в котором находится некоторая информация вот в таком виде
    data|headline|description\n где data - это дата записи, headline - это заголовок, description - это описание.
    Цель скрипта:
    Удалить из текстового файла те строки, в которых дата недельной давности (другими словами строка в файле живет неделю, а потом бесследно удаляется ).
    Я не могу понять, как мне вытащить значение data, что бы сравнить его с текущей датой.
    Если делать так, считать весь текстовый файл построчно в массив, а потом каждую строку тоже в массив и уже в этом массиве найти дату и вычислить, не устарела ли она (помоему - это топорно)
    Пока в Гугле искал, что то промелькнуло насчет частичного считывания строки из файла, но я так и не понял как применить это в моем случае.
    Ищу совета, как лучше сделать!
     
  2. siiXth

    siiXth Активный пользователь

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    PHP:
    1. <?
    2. $string="data|headline|description\ndata2|headline2|description2\n";
    3. $string=explode("\n",$string);
    4. foreach($string as $key=>$value)
    5. {
    6. $line=explode("|",$value);
    7. #$line[0]="data"; её и сравниваем.
    8. if($line[0]!="24-10-11") #если она нам не подходит
    9. unset($string[$key]); #то удаляем всю строку массива
    10. }
    11. $string=implode("\n",$string); #Соединяем массив заново в строку
    12. ?>
    писал на коленке, могут быть ошибки
    люблю построение на explode =)
     
  3. Михаил

    Михаил Активный пользователь

    С нами с:
    12 июл 2009
    Сообщения:
    545
    Симпатии:
    0
    Адрес:
    Bielarus
    я бы писал каждую новую неделю в новый файл, и удалял бы старый
    но в прошлом вопросе вроде же выташ,или дату ['datetim'] это и сравнивай, там насколько я помню был массив вида:
    $ar = array(
    0 => array('datetime' => , ...),
    1 => array('datetime' => , ...),
    ....
    N => array('datetime' => , ...)

    );
    сравнивая даты удаляй индекс новый массив снова в строчку и записывай в файл.
     
  4. SV4

    SV4 Активный пользователь

    С нами с:
    24 сен 2011
    Сообщения:
    59
    Симпатии:
    0
    Адрес:
    Красноярск
    Хорошо сейчас буду пробовать!
     
  5. SV4

    SV4 Активный пользователь

    С нами с:
    24 сен 2011
    Сообщения:
    59
    Симпатии:
    0
    Адрес:
    Красноярск
    Ну вот спасибо еще раз!
    Все оказалось "проще пареной репы"
    Следуя вашим советам, сделал следующее:
    PHP:
    1. <?
    2. $y=date("y");
    3. $m=date("m");
    4. $d=date("d");
    5. $dt=$d-7;
    6. if($dt<1){$dt=1;}
    7. $string=file_get_contents($adres);
    8. $string=explode("\n",$string);
    9. foreach($string as $key=>$value)
    10. {
    11. $line=explode("|",$value);
    12. if($line[0]<=$dt)
    13. {unset($string[$key]);}}
    14. $string=implode("\n",$string);
    15.  
    Только немного файл на запись поправлю.
     
  6. SV4

    SV4 Активный пользователь

    С нами с:
    24 сен 2011
    Сообщения:
    59
    Симпатии:
    0
    Адрес:
    Красноярск
    Еще один вопрос! (мне это так, для расширения кругозора)
    Если взять часть скрипта:
    PHP:
    1. <?
    2. foreach (массив as $ключ=>$значение)
    3. {
    4. ...тут выполняется..
    5. ...какой...то цикл...
    6. if (какое то условие)
    7. {ели true то ..........
    8. }
    9. }
    Вопрос, что первое закрывается цикл или условие?
     
  7. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    SV4
    Смотря как расставишь оступы

    PHP:
    1.  <?
    2. foreach (массив as $ключ=>$значение)
    3. {
    4.  ...тут выполняется..
    5.  ...какой...то цикл...
    6. if (какое то условие)
    7.     {ели true то ..........
    8. } // Первым закроется while
    9.     }
    10.  
    и
    PHP:
    1.  <?
    2. foreach (массив as $ключ=>$значение)
    3. {
    4.  ...тут выполняется..
    5.  ...какой...то цикл...
    6.    if (какое то условие)
    7.    {ели true то ..........
    8.    }
    9. }
    разные вещи
     
  8. SV4

    SV4 Активный пользователь

    С нами с:
    24 сен 2011
    Сообщения:
    59
    Симпатии:
    0
    Адрес:
    Красноярск
    Все понял. Буду иметь в виду!
     
  9. krow7

    krow7 Активный пользователь

    С нами с:
    12 авг 2009
    Сообщения:
    398
    Симпатии:
    0
    Адрес:
    из Азии
    topas
    от отступов же не зависит.
    сначала всегда закрывается внутренняя конструкция, затем внешняя.
     
  10. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    krow7
    быть такого не можете, вы меня разыгрываете
     
  11. siiXth

    siiXth Активный пользователь

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    как по мне - одинаковость на лицо =)

    закрывается то что последним открывали
     
  12. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    siiXth
    Зануда, я не говорил про то "что первым закрывается". Я сказал что это "разные вещи".

    И вообще, вы ходите сказать что фигурные скобочки можно ставить "как попало"?
     
  13. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    [​IMG]
    krow7,
    topas шутит
     
  14. siiXth

    siiXth Активный пользователь

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    topas
    поговоришь со мной в реале - осознаешь насколько ты сам зануда , окей ? ;)
    какие ещё отступы ? слева большим пробелом ? они на чтото когда-то влияли ? =D
     
  15. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    siiXth
    влияли
     
  16. siiXth

    siiXth Активный пользователь

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    Окей, а в плане выполнения скрипта ? =D
    Уверен что можно абсолютно рандомно пихать скобки (не проводить форматирование ставя открывающие и закрывающие скобки друг-под другом с иерархическим отступом) и ничего не будет. Это всёго-лишь для нашего глаза ;)
     
  17. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    а это уже не важно и незначительно?

    вы совсем ничего не слышали о диагональном программировании, увы
     
  18. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Только хотел написать о параллельном программировании для многоядерных процессоров :)))
     
  19. siiXth

    siiXth Активный пользователь

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    возможно я немного прогадал , но автор разве спрашивал про оформление ? вот я и счёл что к оформлению это никаким боком.
    пхааа
    во-первых
    в 3ем классе на паскале ляпал
    во-вторых - то что вы имеете в виду, называется стандартом оформления кода , диагональное программирование - это блин перл всея сети
    чао
    толстый юмор для тонких дядек ;)
     
  20. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    siiXth
    то что я имею ввиду называется "диагональное программирование", я кажется, ясно выразился
     
  21. siiXth

    siiXth Активный пользователь

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    Ты смотри , нубы будут читать тему - сам будешь отвечать на 20 тем в день "научите программировать диагонально"
    [​IMG]
    уууууууииииииииии


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

    krow7 Активный пользователь

    С нами с:
    12 авг 2009
    Сообщения:
    398
    Симпатии:
    0
    Адрес:
    из Азии
    sobachnik
    странные у него шуточки.

    даже Notepad++ всегда все верно тебе подсвечивает, что и где нужно закрыть.
    расстановка пробелов никак не повлияет.
    развели на пустом месте :(
     
  23. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    krow7
    Ты не в теме ;)
     
  24. krow7

    krow7 Активный пользователь

    С нами с:
    12 авг 2009
    Сообщения:
    398
    Симпатии:
    0
    Адрес:
    из Азии
    tommyangelo
    тогда уж объясните, в чем соль :)
     
  25. SV4

    SV4 Активный пользователь

    С нами с:
    24 сен 2011
    Сообщения:
    59
    Симпатии:
    0
    Адрес:
    Красноярск
    Сегодня решил почитать насчет отступов и их "влияние" на выполнение функций.
    Результат поисков полный ноль.
    Если отступы, как то действуют на выполнение кода, не мешало бы ссылку на руководство оставить,
    а то ощущение такое складывается, что пробел он и в Африке пробел.