Zmiana jednej linii w pliku txt

0

Chciałbym się dowiedzieć w jaki sposób zmienić jedną linię w pliku txt mającym kilkaset linii. W tym pliku znajduję się prosta baza danych. Próbowałem z fpusts() ale to zmienia cały plik.

0

Ładujesz cały plik do tablicy. Każda linia to element w tablicy, usuwasz linię, zapisujesz tablicę do pliku. To chyba najprostszy sposób.

0

A wiesz która to linijka bez otwierania pliku? Może każdy rekord powinien być w osobnym pliku?

1

@Ktoś Nieznany: Pytanie jest inne, czy nie lepiej zamienić plik tekstowy na bazę SQLite (wspomniałeś coś w swoim poście o MySQL - SQLite jest o wiele prostsze, żadnej konfiguracji, po prostu tworzysz plik z bazą i do niego zapisujesz). Roboty wcale dużo więcej nie będziesz z tym miał (osoba średnio wtajemniczona w pół godziny ogarnie temat), a wiele rzeczy i problemów Ci odpadnie. Przykładowo - zamiast kombinować z plikiem, wczytywać go, szukać odpowiedniej linii, zamieniać, zapisywać ponownie itp, dałbyś jedno polecenie SQL typu UPDATE (https://www.w3schools.com/sql/sql_update.asp) i po sprawie.

0

A nie lepiej pobrać linijkę po linijce cały plik (pętla) i porównywać każdą linijkę po kolei. Jeżeli jest taka sama, którą chcesz podmienić to podmieniasz i tyle.

0
Ktoś Nieznany napisał(a):

Chciałbym się dowiedzieć w jaki sposób zmienić jedną linię w pliku txt mającym kilkaset linii. W tym pliku znajduję się prosta baza danych. Próbowałem z fpusts() ale to zmienia cały plik.

Najpierw musisz wiedziec ktora linie chcesz zastapic nowa trescia. Azeby to wiedziec [w przypadku kiedy nie wiesz ile jest tych linii] musisz wstawic caly plik w petle. W tym przykladzie podalem konkretna linie.

<?php

$linia = '7'; // która linia do zamiany. należy pamietac ze indeksy w tablicy licza sie od 0 nie od 1.
$nowa_tresc = 'Ala ma kota'; // nowa tresc do zapisu
$plik = 'data.txt'; // to chyba wiadomo



function podmien_linie($ktora, $gdzie, $co)

{

$tab = file($gdzie);

$tab[$ktora] = $co . "\r\n"; 

$f = fopen($gdzie,'w');
   flock($f, LOCK_EX);
  fwrite($f,str_replace("","\r\n",join('',$tab)));
   flock($f ,LOCK_UN);
   fclose($f);
	
}

podmien_linie($linia, $plik, $nowa_tresc);

#######################
# to ponizej tylko zeby wyswietlic zawartosc pliku

$t = file($plik);

for($i=0; $i<count($t); $i++)
{
    print @$t[$i] . '<br />';
}
	
#######################
?>

Tutaj przyklad ktory zczyta Ci caly plik i podstawi wartosci w pole wyboru select. Obok masz pole text do wpisania nowej wartosci.

<?php

function wyswietl_formularz()
{
print "<form action=" . $_SERVER['SCRIPT_NAME'] . " method=post>";
print "Wybierz linie do podmiany:<select name=\"linia\">";

$tt = file('data.txt');

for($n=0; $n<count($tt); $n++)
{
print '<option value=' . $n . '>' . $tt[$n] . ' [linia =>' . $n . ']</option>';
}
print '</select>';
print "Wpisz nowa tresc: <input type=\"text\" name=\"nowatresc\" />";
print "<input type=\"submit\" value=\"Podmien dane\" name=\"sub\"/></form>";

};





$plik = 'data.txt'; // to chyba wiadomo



function podmien_linie($ktora, $gdzie, $co)

{

$tab = file($gdzie);

$tab[$ktora] = $co . "\r\n"; 

$f = fopen($gdzie,'w');
   flock($f, LOCK_EX);
  fwrite($f,str_replace("","\r\n",join('',$tab)));
   flock($f ,LOCK_UN);
   fclose($f);
	header('location: ' . $_SERVER['SCRIPT_NAME']);
}

((!@$_POST['sub'])||(!$_POST['nowatresc'])) ? wyswietl_formularz() : podmien_linie(@$_POST['linia'], $plik, @$_POST['nowatresc']);

$t = file($plik);

for($i=0; $i<count($t); $i++)
{
    print 'Index tablicy: ' . $i . ' ' . @$t[$i] . '<br />';
}



?>

Mam nadzieje ze o to chodzilo ??

0
KrisKros123 napisał(a):

A nie lepiej pobrać linijkę po linijce cały plik (pętla) i porównywać każdą linijkę po kolei. Jeżeli jest taka sama, którą chcesz podmienić to podmieniasz i tyle.

A zes wymyslil

1 użytkowników online, w tym zalogowanych: 0, gości: 1