2015-06-10 2 views
3

Я хочу, чтобы иметь возможность писать в файл и всегда писать на этой строке.Запись на определенную строку в файле

1 Hello 
2 How are you 
3 Good 
4 I see 
5 Banana 
6 End 

Использование функции:

function filewriter($filename, $line, $text,$append) { 
} 

Так добавляемых = добавить без перезаписи строки, и это необязательно, как это будет по умолчанию для добавления

так добавить:

filewriter ("bob.txt", 2, "Bobishere", true) or filewriter ("bob.txt", 2, "Bobishere") 

выход :

1 Hello 
2 Bobishere 
3 How are you 
4 Good 
5 I see 
6 Banana 
7 End 

, но если они не добавить это выглядит следующим образом: FileWriter ("bob.txt", 2 "Bobishere", ложь)

выход:

1 Hello 
2 Bobishere 
3 Good 
4 I see 
5 Banana 
6 End 

Я только удалось выяснить, как перезаписать файл или добавить его в конец документа.

Что функция выглядит в настоящее время:

function filewriter($filename,$line,$text,$append){ 
    $current = file_get_contents($filename); 
    if ($append) 
    $current .= $line; 
    else 
    $current = $line; 
    file_put_contents($file, $current); 
} 
+0

показать нам свой код, и мы можем найти ошибку. – Sablefoste

+0

Сделано! Извините, я просто не думал, что это полезно: x –

+0

почему все теги? там только php здесь –

ответ

0

Давайте переписать функцию:

function filewriter($filename,$line,$text,$append){ 
    $current = file_get_contents($filename); 

    //Get the lines: 
    $lines = preg_split('/\r\n|\n|\r/', trim($current)); 

    if ($append) 
    { 
     //We need to append: 
     for ($i = count($lines); $i > $line; $i--) 
     { 
      //Replace all lines so we get an empty spot at the line we want 
      $lines[$i] = $lines[i-1]; 
     } 

     //Fill in the empty spot: 
     $lines[$line] = $text; 
    } 
    else 
     $lines[$line] = $text; 

    //Write back to the file. 
    file_put_contents($file, $lines); 
} 

псевдокод

Логика позади этой системы:

Мы получили список:

[apple, crocodile, door, echo] 

Мы хотим, чтобы вставить bee в строке 2. То, что мы сначала сделать, это переместить все элементы ПОСЛЕ линии 2:

1: apple 
2: crocodile 
3: door 
4: echo 
5: echo //==> We moved 'echo' 1 spot backwards in the array 

Следующая:

1: apple 
2: crocodile 
3: door 
4: door //==> We moved 'door' 1 spot backwards in the array 
5: echo 

Тогда:

1: apple 
2: crocodile //==> This is a useless spot now, so we can put "bee" here. 
3: crocodile //==> We moved 'crocodile' 1 spot backwards in the array 
4: door 
5: echo 

И затем мы помещаем «пчелу» на нужную нам линию:

1: apple 
2: bee //==> TADA! 
3: crocodile 
4: door 
5: echo 

Внимание: массивы в PHP, начиная с нуля, так что первая строка имеет 0. Помните об этом при использовании вышеуказанной функции!

+0

Это может быть хорошей идеей объяснить OP, как он не может вставить байты в файл, только перезаписывать их, не переписывая весь файл сам по причине ограничений ОС и FS. –

Смежные вопросы