Jooh, tulee liikaa ketjuja... Mutta asiaan: Koska en voi lukea manuaalia(englanniksi), niin pitää kysy asiat täältä. Olen katsonut muiden koodivinkkejä, mutta en oiken tajua mitenkä saisi tehtyä tämmöisen jutun:
Eli tiedostossa lukee "Late|Hyvät sivut"
Mitenkä saisi eroteltua nuo tekstit. Eli "Late" olisi muuttuja $nimi ja "Hyvät sivut" olisi muuttuja $kommentti.
Kiitos kaikille etukäteen(jos neuvotte).
$muuttuja="Late|Hyvät sivut"; $homma=explode("|", $muuttuja); echo 'nimi: '. $homma[0] .'<br>'; echo 'viesti: '. $homma[1];
en oo ihan varma pitääkö exploden eteen pistää $ jos ei toimi, nii pistä.
ja opettele englantia.
Opetellaan koko ajan...
Mutta ongelma(alan kyllästyä ongelmiin). Eli tuo "Late|Hyvät sivut" lukee tiedostossa. Kokeilin fopenilla ja freadella mutta ei toiminut. Apua?
lainaus:
Eli tuo "Late|Hyvät sivut" lukee tiedostossa. Kokeilin fopenilla ja freadella mutta ei toiminut. Apua?
Lue koko tiedosto taulukkoon file():llä. Tällöin taulukon yksi solu vastaa yhtä riviä tiedostosta (eli solu 0 = 1. rivi tiedostosta, solu 1 = 2. rivi tiedostosta jne).
Seuraavassa esimerkissä luetaan tiedosto $tiedosto taulukkoon file():llä, erotellaan ensimmäisestä rivistä tekstit explode:lla $tekstit taulukkoon ja tulostetaan se:
<?php $tiedosto = file("tiedoston_nimi"); $tekstit = explode("|", $tiedosto[0]); echo "Nimi: " . $tekstit[0] . "<br>"; echo "Kommentti: " . $tekstit[1]; ?>
Kiitos! Nyt toimii! Ehkä joskus saatte nähdä tuon tekemäni kommentti jutun.
En jaksa perustaa tälle ongelmalle uutta ketjua. Noin, eli mitenkä saisi tämän lukemaan niin monta kommenttia kun tiedostossa on(yritin monin keinoin mutta ei taaskaan onnistunut):
<table width="600" border="0" cellspacing="1" cellpadding="1"> <tr> <td width="100%" bgcolor="#ffcc00"><?php $tiedosto = file("viestit.dat"); $tekstit = explode("|", $tiedosto[0]); echo "Nimi: " . $tekstit[0] . "<br>"; ?> </td> </tr> <tr> <td width="100%" bgcolor="#ffffff"></td> </tr> </table> <?php echo "<br>Kommentti: $tekstit[1] <hr>"; ?>
lainaus:
mitenkä saisi tämän lukemaan niin monta kommenttia kun tiedostossa on
Jahas, ettei vain onnistuisi jollakin silmukalla ;) ?
Korvaa tuo kirjoittamasi koodi kokonaan tällä:
<?php $tiedosto = file("viestit.dat"); for ($i = 0; $i < count($tiedosto); $i++) { $tekstit = explode("|", $tiedosto[$i]); echo "<table width='600' border=0 cellspacing=1 cellpadding=1>\n"; echo " <tr>\n"; echo " <td width='100%' bgcolor='#ffcc00'>\n"; echo " Nimi: " . $tekstit[0] . "<br>\n"; echo " </td>\n"; echo " </tr>\n"; echo " <tr>\n"; echo " <td width='100%' bgcolor='#ffffff'></td>\n"; echo " </tr>\n"; echo "</table>\n"; echo "<br>Kommentti: " . $tekstit[1] . "<hr>"; } ?>
PS. Koodilistauksissa voisit käyttää myös sisennyksiä.
edit: Oleellinen virhe korjattu listauksesta
Kiitos. Ja anteeksi tietämättömyyttäni, mutta mikä on sisennys?
Ei toimi! Tulostaa vain ensimmäisen viestin.
lainaus:
Ja anteeksi tietämättömyyttäni, mutta mikä on sisennys?
Sisentäminen on koodin muotoilua, jossa lauserakenteiden välisten rivien alkuun jätetään muutama merkki tyhjää verrattuna edelliseen tasoon. Tämä parantaa huomattavasti koodin luettavuutta. Esimerkki:
//sisentämätön koodi for ($i=1;$i<100;$i++) { if ($i % 4 = 0) { echo $i; } } //sisennetty koodi for ($i=1;$i<100;$i++) { if ($i % 4 = 0) { echo $i; } }
lainaus:
Ei toimi! Tulostaa vain ensimmäisen viestin.
Ja miten niin? Juuri äsken sen testasin ja ihan hyvin toimi. Testasin sitä tällaisella viestit.dat tiedostolla:
Nimi 1|Kommentti 1 Nimi 2|Kommentti 2 Nimi 3|Kommentti 3 Nimi 4|Kommentti 4
Oletko nyt ihan varma, että siellä omassasi viestit.dat tiedostossa on useampi rivi kuin se yksi ensimmäinen viesti?
Hetkinen, kun ohjelma tallentaa tiedostoa, niin mitenkä se voisi tehdä rivinvaihdon.
Minun viestit.dat on tällainen:
Nimi 1|Kommentti 1|Nimi 2|Kommentti 2 jne...
Sain itse toimimaan. Kiitos kuitenkin avusta.
Eikun en saanutkaan. Kokeilin \n juttua mutta silti ne tulee samalle riville. Olisiko apua?
$uusirivi="\n";
eli uuden rivin saat \nllä.
Jos notepadillä katselet niin se voi tosiaan näyttää että ne olisivat samalla rivillä, koska PHP tunkee (ainakin unix-pohjaisilla) sinne unix-rivinvaihdon, jota notepad ei syystä tai toisesta osaa näyttää.
Ja koeta nyt hyvä ihminen jotain opetella ja kokeilla omin konstein, ei täällä nyt sentään mitään koodipalvelua pidetä.
lainaus:
Kokeilin \n juttua mutta silti ne tulee samalle riville. Olisiko apua?
Apua tietenkin löytyisi PHP:n manuaaleista, mutta... vastataan nyt vielä. \n on pelkkä "linefeed" joka ei yksinään tee rivinvaihtoa vaan se tarvitsee kaverikseen "carriage return" merkin \r. Kyseisten merkkien ASCII koodit ovat 10 ja 13 (linefeed, carriage return) joten saman asian voisi ilmaista myös näin: chr(13) . chr(10)
Eli, muutat sitä riviä joka tallentaa nimen ja kommentin tiedostoon niin, että rivien kaksi viimeistä merkkiä ovat chr(13) ja chr(10). Esimerkki:
... fwrite($ff, $nimi . "|" . $kommentti . chr(13) . chr(10)); ...
Riippuu miten sen ajattelee, unix-koneissa pelkkä \n riittää rivinvaihdoksi, mutta Windows (tai DOS) -koneissa ei. PHP:n kanssa kumpaisenkin rivinvaihtotyypin pitäisi olla yhteensopivia.
lainaus:
Riippuu miten sen ajattelee, unix-koneissa pelkkä \n riittää rivinvaihdoksi, mutta Windows (tai DOS) -koneissa ei. PHP:n kanssa kumpaisenkin rivinvaihtotyypin pitäisi olla yhteensopivia.
No joo, niihän se on. Itse olen aina käyttänyt varmuuden vuoksi CrLf merkkejä kun on pitänyt saada tiedostoon rivinvaihto.
Aihe on jo aika vanha, joten et voi enää vastata siihen.