Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Tiedostojen uudelleennimeäminen

Sivun loppuun

SysRq868 [02.09.2007 18:56:22]

#

Millainen (rekursiivinen varmaankin) funktio pitäisi rakentaa, jotta voisin saada tiedostolle uudelleennimeämisvaiheessa uniikin nimen? Eli jos "erkki.jpg" on jo olemassa, kokeillaan "erkki1.jpg". Jos se on jo olemassa, kokeillaan "erkki2.jpg", jne. Tummemman harmaat aivosolut jumittavat tänään hieman yli.

jlaire [02.09.2007 19:05:45]

#

Ei tuossa rekursiota tarvitse, vaikka saisihan sen niinkin tehtyä.

Yksinkertainen silmukka riittää (kielestä riippuen pitää luultavasti tehdä jonkin verran muutoksia):

sub tiedoston_nimi($) {
    my $nimi = shift;
    my ($alku, $loppu) = split /\./, $nimi;
    my $laskuri = "";

    while (-e "$alku$laskuri.$loppu") {
        $laskuri++;
    }

    return "$alku$laskuri.$loppu";
}

Tuossa $nimi on parametri, joka funktiolle annettiin ja -e funktio joka tarkistaa, onko tiedosto olemassa.

SysRq868 [02.09.2007 19:20:15]

#

Eli PHP:llä niinkuin näinkö?

<?php
function tiedostonnimi($nimi){
  list($alku, $loppu) = explode(".", $nimi);
  $laskuri = "";

  while(file_exists("kansio/$alku$laskuri.$loppu")){
    $laskuri++;
  }
  return "$alku$laskuri.$loppu";
}
?>

jlaire [02.09.2007 19:25:27]

#

Varmaankin joo, en tosin pahemmin osaa PHP:tä. Tuo explode:n ensimmäinen parametri pitäisi ehkä olla "\.", koska pisteellä on oma merkitys säännöllisissä lausekkeissa.

Antti Laaksonen [02.09.2007 19:26:04]

#

Rekursiolla saa kieltämättä hienon ratkaisun:

<?php

function etsinimi($alku, $keski, $loppu) {
    if (file_exists($alku . $keski . $loppu))
        return etsinimi($alku, ++$keski, $loppu);
    return $alku . $keski . $loppu;
}

echo etsinimi("erkki", "", ".jpg");

?>

SysRq868 [02.09.2007 19:28:00]

#

Iso kiitos teille molemmille!

Meitzi [02.09.2007 20:12:19]

#

Hmm php:ssä ++"" antaa järkevän tuloksen?

SysRq868 [02.09.2007 20:19:44]

#

Itsekin vähän samaa mietin... mutta eikö $keski+1 ole vähän sama, kuin mitä ajettiin tässä takaa?

Antti Laaksonen [02.09.2007 21:51:44]

#

Tyhjä merkkijono tulkitaan nollaksi, kun sitä yritetään kasvattaa yhdellä. Merkintä ++"" ei tunnu kelpaavan PHP:lle, mutta jos muuttujassa $a on tyhjä merkkijono, ++$a palauttaa arvon 1. Oikeastaan ++$a ja $a+1 ovat yhtä "väärin", koska molemmissa on merkkijono, jota kohdellaan kuin lukua.


Sivun alkuun

Vastaus

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

Tietoa sivustosta