Работа с файлами

Статус
В этой теме нельзя размещать новые ответы.

LEXAlForpostl

Мой дом здесь!
Регистрация
21 Май 2008
Сообщения
766
Реакции
228
Здравствуйте, уважаемые форумчане.
Подскажите пожалуйста, как удалить первые 10 строк в тхт файле.
Есть две идеи:
1).
Первые 11 строк кода заменить одиннадцатой строкой

2).
Считываем построчно и записываем в другой файл.
Пропускаем ненужную строку.
Закрываем оба файла, удаляем старый, переименовываем новый в старый.

Как реализовать первый вариант?
Как удалить один, и второй файл переименовать?


Всех с Новым 2009 Годом :)
 
Попробуй вот так

Код:
$name_file_text = 'secret.txt';
$count_del_line = 9;
 
$array_file_text = explode ("\n", file_get_contents($name_file_text));
 
for($i=0; $i <= $count_del_line; $i++) {
    unset($array_file_text[$i]);
}
 
file_put_contents($name_file_text, implode("\n", $array_file_text));
 
  • Заблокирован
  • #3
а не легче сделать это через file() ? Эта же функция сразу возвращает массив строк в файле и не нужно использовать explode()

Код:
<?php
$name_file_text = 'secret.txt';
$count_del_line = 9;

$array_file_text = file($name_file_text);

for($i=0; $i <= $count_del_line; $i++) {
    unset($array_file_text[$i]);
}

file_put_contents($name_file_text, implode("\n", $array_file_text));
?>

Добавлено через 4 минуты
Как удалить один, и второй файл переименовать?

Переименование: rename("oldfile", "newsfile");
Например
Код:
rename("/somdir/doc.txt", "/somdir/newdoc.txt);

Удаление: unlink(filename);
Например:
Код:
unlink("/somedir/somefile.txt");
 
Вариант для больших файлов (предложенные выше могут не сработать из-за нехватки памяти)
PHP:
<?php
$file='file.txt';
$skip=array(0,1,2,3,4,5,6,7,8,9); //массив с номерами строк для пропуска
$fp=fopen($file,'r');
$fp1=fopen('tmp.txt','w');
$a=0;
while(!feof($fp)) {
  $data=trim(fgets($fp,4096));
  if(!in_array($a,$skip)) fwrite($fp1,$data."\r\n");
  $a++;
}
fclose($fp1)
fclose($fp);
unlink($file);
rename('tmp.txt',$file);
exit;
?>
 
а лучше так:
Код:
<?php
$file = "file.txt";
$skip = 10;

$fp1 = fopen($file,"r");
$fp2 = fopen("tmp.txt","w");
$a = 0;
while(!feof($fp1))
{
  $line= fgets($fp1,4096);
  if ($a >= $skip) fwrite($fp2,$line);
  $a++;
}
fclose($fp1);
fclose($fp2);
unlink($file);
rename("tmp.txt",$file);
?>
 
а лучше так:
Код:
<?php
$file = "file.txt";
$skip = 10;

$fp1 = fopen($file,"r");
$fp2 = fopen("tmp.txt","w");
$a = 0;
while(!feof($fp1))
{
  $line= fgets($fp1,4096);
  if ($a >= $skip) fwrite($fp2,$line);
  $a++;
}
fclose($fp1);
fclose($fp2);
unlink($file);
rename("tmp.txt",$file);
?>

И чем же этот код лучше кода Yaggi Jah?
 
Ни чем, они практически одинаковы, хотя мне кажется через массив строк будет медленнее...
 
Ни чем, они практически одинаковы, хотя мне кажется через массив строк будет медленнее...

Но за то функциональность улучшается: таким образом мы можем пропустить не только 10 первых строк, а вообще любые строки из файла.
 
А так

<?php

$general_file = "file.txt";
$messages=@file($general_file);
$ln = count($messages);
$fp = @fopen("$general_file","w");

for($i=0; $i < $ln; $i++)
{
if(i < 11)
@fwrite ($fp,"");
else
@fwrite($fp,"$messages[$i]");
}

?>
 
файл

надёжно делаеься так
переписываешь в др файл (backup)

и исх Файл пишешь начиная с 11 строки

Добавлено через 1 минуту
доп файл надо создавать тк если по какми то причинам перезапись прервётся есть всегда backup
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху