Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP: Lukuja tiedostosta taulukkoon

mercier [14.09.2018 21:23:23]

#

Ohjelma toimii hienosti kovakoodatulla muuttujalla

$X = array(0, 0, 10, 0, 10, 10, 5, 15, 0, 10);

Nyt pitäisi tuohon muuttujaan saada pisteet tiedostosta data.txt, jonka sisältö on muotoa

0, 0, 100, 0, 100, 100, 50, 150, 0, 100

eli pelkät arvot pilkuilla eriteltuna.
Mutta osaaminen tuntuu loppuvan.

Arvasit oikein! Ovat pisteitä, jotka muodostavat kuvion kaksiulotteisessa koordinaatistossa.

Tarkennuksena vielä

$X = array(320,508,311,594,422,605,428,516); # Toimii
$X = file ("teksti.txt"); # Ei toimi.
$X = include ("teksti.txt"); # Ei toimi, antaa virheen: Warning: sizeof(): Parameter must be an array or ...

The Alchemist [14.09.2018 22:50:42]

#

Dumppaa (var_dump) muuttujat ja katso, että mitä vikaa niissä on. Eiköhän se homma ala ratketa, kun pikkuisen debuggaat. Include-komento ei voi aiheuttaa herjaa sizeof-funktion väärinkäytöstä; se tulee sizeof-funktion kutsumisesta.

P.S. Älä käytä jotain ihmeellistä count-funktion aliasta vaan käytä aina funktiota count. Se tekee koodista selkeämpää.

mercier [15.09.2018 00:02:01]

#

$X = file ("teksti.txt");
string(39) "320,508,315,599,311,594,422,605,428,516"

$X = array(320,508,315,599,311,594,422,605,428,516);
int(320)
int(508) jne

Eli tuo string pitäisi pystyä muuttamaan kokoelmaksi int-muotoisia lukuja.

PS. sizeof ja count osaavat laskea alkioiden määrän 10 oikein. Mutta käytän count.

Metabolix [15.09.2018 07:34:26]

#

$X = json_decode("[".file_get_contents("teksti.txt")."]");

mercier [15.09.2018 23:48:56]

#

Metabolixin ohjeen mukaan lopulta (melkein) toimii. Tuo edellyttää, että jokainen alkio (luku) on omalla rivillään ja rivin lopussa pilkku, mutta ei viimeisen luvn jälkeen. Todellinen data on rivitetty, mutta myös viimeisen luvun perässä on aina pilkku.
Hain ratkaisua tiedoston lukemisvaiheesta. Muuttujaan luetaan esim "320,", mutta se ei kelpaa, koska mukana on tuo pilkku, on string eikä int.
Lienee joku kaava, jolla string "320," saadaan muotoon int (320).
Tai sitten tiedoston viimeinen pilkku saadaan pois.

Metabolix [16.09.2018 00:00:28]

#

Varma purkkaratkaisu on se, että säännöllisellä lausekkeella haetaan kaikki luvut tiedostosta, olipa välissä mitä tahansa.

$text = file_get_contents("teksti.txt");
preg_match_all("/[0-9]+/", $text, $matches);
$X = array_map("intval", $matches[0]);

Vastaus

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

Tietoa sivustosta