Neptoon никак. только сначала загрузить файл в память, похерить первые сто строк и записать новый файл. PHP: <?php $lines = file("C:\\Documents and Settings\\myfile.txt"); foreach($lines as $line) { echo($line); } ?> думаю, тут все ясно. остальное можно найти на php.net с примерами.
Нашел вот такой код Код (Text): $filename = 'test.txt'; // файл $delete = array(0, 2, 5); // номера строк, которые удаляем $file = file($filename, FILE_IGNORE_NEW_LINES); while(list($line, $data) = each($file)) { if(in_array($line, $delete)) unset($file[$line]); } $file = array_filter($file); file_put_contents($filename, implode("\n", $file), LOCK_EX); unset($file); Однако работает не правильно. Строки удаляет, но вот вместо перехода на новую строку появляется квадратик. Может кто-нибудь исправить код?
Спасибо, уже лучше. Еще заметил косяк. Как сделать, чтобы удалялась только нужная мне строка? Сейчас код удаляет все пустые строки, расположенные выше выбранной строки
Ну это понятно. Вот только если в файле есть пустые строки (а они у меня есть, и они необходимы), то все равноони удаляются, несмотря на указанные к удалению номера строк
сейчас код без $file = array_filter($file); Расскажу подробнее что мне надо. У меня есть форма. записывающая пользовательские данные в файл каждый раз с новой строки. Естественно, файл постоянно увеличивается. Так вот, надо удалять первую строку каждый раз, когда записывается новая (т.е. кол-во строк в файле всегда будет одинаковым). А выше представленный код удаляет верхние строки и одновременно удаляет с последней строки переход на новую строку. Таким образом получается, что новые данные записываются не с новой строки, а на последнюю. Мне надо с новой. Можете помочь? Даже заплачу, если поможете Косяк этого кода в том, что после открытия текстового файла все переходы на новую строку выглядят в виде квадратиков
Код тривиален PHP: <?php $file = file('fuck.txt'); $result = array_slice($file, 100); // 100 это количество удаляемых строк file_put_contents('fuck.txt', implode($result), LOCK_EX); ?> Но тебе нужно не совсем это. Всё гениальное просто !!! (принцип KISS) PHP: <?php // Читаем файл $file = file('fuck.txt'); // Добавляем новую строку $file[] = "новая строка которую мы пишем.\r\n"; // Удаляем первую unset($file[0]); // Пишем файл file_put_contents('fuck.txt', implode($file), LOCK_EX); // В результате количество строк в файле всегда будет одинаково. ?>
igordata В этом топике да. Однако многое не учтено в этом коде, в частности проверки на то если "что-то пошло не так" Я бы не перезаписывал подопытный файл, а делал новый (временный) и только если он записался, то удалял бы старый и переименовывал новый (опять-же перед записью удостоверился что временного файла нет, т.е что кто-то другой в этот момент не пишет файл) И элегантнее (с точки зрения педанта) вместо unset сделать array_shift а так-же array_push вместо $file[] Опять же имя скрипта лучше сделать настраиваемым в начале файла... PHP: <?php // Имя файла $filename = 'fuck.txt'; // Читаем файл $file = file($filename); // Добавляем новую строку array_push($array, "новая строка которую мы пишем.\r\n"); // Удаляем первую array_shift($array); // Пишем файл $ok = file_put_contents($filename, implode($file), LOCK_EX); ?>