Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Tietyn kohdan poistaminen

Pallo [09.03.2008 13:48:36]

#

Minulla on tekstitiedostossa rivejä tyyliin

|tekstiä|tekstiä|tekstiä|458761

Kuinka olisi mahdollista poistaa tiedostosta rivi luvun perusteella?
(Eli kun annetaan luku 55, niin poistetaan se rivi, jonka viimeisen erottimen jälkeen oleva luku on 55)

Metabolix [09.03.2008 16:09:46]

#

Tätä kyllä kysytään aivan liian usein. -.-

Tiedosto on mahdollista katkaista tietystä kohti, jolloin siis kaikki loppu data häviää, tai siihen on mahdollista kirjoittaa tiettyyn kohti vanhan datan päälle. Kuitenkin kyseessä on vain yhtenäinen jono tavuja, jotka sijaitsevat väistämättä tietyssä kohti tiedostoa, eikä niitä voi varsinaisesti siirtää. Tiedostoa voi siis ajatella paperina, jolla on tekstiä: jos yksi rivi täytyy saada pois eikä yliviivaus kelpaa ratkaisuksi, täytyy ottaa uusi paperi. Alkupuoliskon vanhasta paperista voi leikata ja liimata uuden alkuun, mutta loput täytyy kirjoittaa uudestaan.

<?php
# Vanha muistiin
$rivit = file($tiedostonimi);

# Kirjoitetaan tiedosto uudestaan
$f = fopen($tiedostonimi, "w");
foreach ($rivit as $s) {
  if (poistetaan($s)) {
    continue; # Hypätään yli
  } else {
    fwrite($f, $s); # Kirjoitetaan
  }
}
fclose($f);
unset($rivit);
?>
<?php
function poistetaan($s)
{
  $t = explode('|', trim($s));
  if ($t[count($t) - 1] == '55') {
    # Jos rivi loppuu 55:een, se kuuluu poistaa
    return true;
  }
  # Muuten ei
  return false;
}
?>

Ehdon ei tietenkään tarvitse olla omassa funktiossaan, ja muutenkin järjestelmän voi toteuttaa monella tavalla, mutta tästä selvinnee ajatus. Alkuosan ohittaminen kirjoittamatta uudestaan on mutkikkaampaa, joten en selitä sitä tässä lainkaan.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta