Moi,
miten voin tehdä taulukon HTML:llä alla olevasta kokoajan muuttuvasta tiedostosta, kuitenkin vain 69-bussi. Eli miten saan koodin poimimaan vain ne 69-bussit ja tehdä taulukon HTMLllä?
kello-bussi-päätepysäkki----
8589|Malmin asema tulo|Kirkonkyläntie|Helsinki
1829|77A|Siltamäki|1077A 2
1832|76A|Malmi|1076A 1
1835|69|Elielinaukio|1069 2
1838|70T|Suutarila|1070T 1
1849|77A|Siltamäki|1077A 2
1852|76A|Malmi|1076A 1
1855|69|Elielinaukio|1069 2
1858|70T|Suutarila|1070T 1
1909|77A|Siltamäki|1077A 2
1912|76A|Malmi|1076A 1
1915|69|Elielinaukio|1069 2
1919|70T|Suutarila|1070T 1
1929|77A|Siltamäki|1077A 2
1932|76A|Malmi|1076A 1
1935|69|Elielinaukio|1069 2
1940|70T|Suutarila|1070T 1
1949|77A|Siltamäki|1077A 2
1951|76A|Malmi|1076A 1
1955|69|Elielinaukio|1069 2
2002|70T|Suutarila|1070T 1
Lue tiedosto file-funktiolla, käy rivit läpi foreach-silmukalla, katkaise riviltä eri osat explode-funktiolla ja tarkista, että toinen osa on 69.
<?php //Testaamaton $rivit = file('bussit.txt'); $t = ""; foreach ($rivit as $rivi) { $e = explode("|", $rivi); if($e[1] == "69") { $t .= '<tr><td>' . implode("</td><td>", $e) . '</td></tr>'; } } if(!empty($t)) { print '<table border="1"> ' . $t . ' </table>'; } ?>
Ei kovin kaunis..
Kiitoksia!
Miten sitten saan tuon koodin toimimaan kun lähdetiedosto on eri palvelimella?
masiaro kirjoitti:
Kiitoksia!
Miten sitten saan tuon koodin toimimaan kun lähdetiedosto on eri palvelimella?
$rivit = file('http://jossainmuualla.fi/bussit.txt');
Ei noin toiminut, joutuuko siitä ettei toisella palvelimella olevalla tiedostolla ole mitään päätettä osoitteessa?
http://api.reittiopas.fi/public-ytv/fi/api/?stop=1382127&user=user&pass=pass&time=
masiaro kirjoitti:
Ei noin toiminut, joutuuko siitä ettei toisella palvelimella olevalla tiedostolla ole mitään päätettä osoitteessa?
Onko kyse tiedostosta vai dynaamisesti luodusta sisällöstä?
Laita virheilmoitukset käyttöön, niin saatat saada lisätietoa:
qeijo kirjoitti:
Onko kyse tiedostosta vai dynaamisesti luodusta sisällöstä?
Mitä väliä sillä muka on?
Kyse on siis dynaamisesti luodusta sisällöstä.
Herjaa nämä
Warning: file() [function.file]: URL file-access is disabled in the server configuration in /var/www/customers/viparofi/public_html/testi.
Warning: file(http://api.reittiopas.fi/public-ytv/fi/api/?stop=1382127&user=xxx&pass=xxx) [function.file]: failed to open stream: no suitable wrapper could be found in /var/www/customers/viparofi/public_html/testi.
Warning: Invalid argument supplied for foreach() in /var/www/customers/viparofi/public_html/testi.
Web-hotellissasi on siis estetty tiedostojen lataaminen toisesta URL:sta. Jos palvelin olisi omasi, voisit muuttaa PHP:n asetuksia, mutta tuosta hakemiston nimessä olevasta "customers"-sanasta päättelisin, että asia ei ole näin.
Ei siis onnistu ilman asetusten vaihtoa.
Palvelimesi asetuksista on estetty tiedostojen haku netistä. Paras vaihtoehto olisi säätää palvelimen asetuksia; luultavasti nyt täytyisi siis asettaa PHP:n asetuksista (tiedostosta php.ini) asetuksen "allow_url_fopen" arvoksi "On". Jos kyseessä on webhotelli, voit varmaankin kääntyä asiassa ylläpidon puoleen. Toinen mahdollisuus on hakea tiedosto netistä jotenkin paljon mutkikkaammin, esimerkiksi cURL-kirjastolla tai socketeilla.
Ihan pakko oli vielä tehdä lyhyempi versio tästä.
<?php $data = file_get_contents('bussit.txt'); preg_match_all('/^\d{4}\|69\|.+$/m', $data, $matches); print "<table>\n"; foreach ($matches[0] as $row) printf("<tr><td>%s</td></tr>\n", implode('</td><td>', explode('|', $row))); print "</table>\n"; ?>
Ihan pakko oli tehdä vielä lyhyempi:
<?php echo "<table>\n", implode(str_replace("|", "</td><td>", preg_filter('/^[^|]*\\|69\\|.*/', '<tr><td>$0</td></tr>', file("bussit.txt")))), "</table>\n";
Tai välivaiheiden kera:
<?php $f = file("bussit.txt"); $f = preg_filter('/^[^|]*\\|69\\|.*/', '<tr><td>$0</td></tr>', $f); $f = str_replace("|", "</td><td>", $f); echo "<table>\n", implode($f), "</table>\n";
Metabolix kirjoitti:
Mitä väliä sillä muka on?
Esimerkiksi jos tieto luodaan/esitetään js:llä niin file():hän ei sitä tuo..
qeijo kirjoitti:
Metabolix kirjoitti:
Mitä väliä sillä muka on?
Esimerkiksi jos tieto luodaan/esitetään js:llä niin file():hän ei sitä tuo..
Et sinä tuota kysynyt. Ja vaikka käytettäisiin vbscriptiä, niin ei silläkään olisi mitään väliä. Näkeehän sen nyt jo korvalla tuosta avausviestistä, ettei sinun kysymykset olleet millään tavalla relevantteja.
masiaro: Jos URL File Access on kielletty, kannattaa tarkastaa onko CURL:n disablointi unohtunut ;-)
Tuossa on esimerkkiä, jolla varmaan saat selville onko CURL sallittu: https://www.php.net/manual/en/function.curl-exec.php
LaNu kirjoitti:
Et sinä tuota kysynyt. Ja vaikka käytettäisiin vbscriptiä, niin ei silläkään olisi mitään väliä.
En ymmärrä.. Missä vaiheessa vbscript liittyi keskusteluun?
LaNu kirjoitti:
Näkeehän sen nyt jo korvalla tuosta avausviestistä, ettei sinun kysymykset olleet millään tavalla relevantteja.
:(
Asia vain kuitenkin on niin että.. Jos sivustoon haetaan osa, esim div:iin sisältöä ajax pyynnöillä. Niin yllä mainittu ratkaisu ei toimisi. Siksi kysyin, siksi relevantti.
"Dynaaminen sisältö" tarkoittaa paljon muutakin kuin JS-kikkailuja. Esimerkiksi PHP:llä tuotetaan "dynaamista sisältöä", koska sisältöä ei ole suoraan kirjoitettu sivun lähdekoodiin.
JS-kikkailu toki estäisi näin yksinkertaisen lähestymistavan, mutta millä todennäköisyydellä joku käyttäisi JS:ää noin ruman tekstisisällön tuottamiseen, ja mitä ihmettä JS-kikkare tekisi HSL:n reittioppaan kehittäjärajapinnassa, josta selvästikin on tarkoitus hakea dataa koneellisesti?
Metabolix kirjoitti:
"Dynaaminen sisältö" tarkoittaa paljon muutakin kuin JS-kikkailuja. Esimerkiksi PHP:llä tuotetaan "dynaamista sisältöä", koska sisältöä ei ole suoraan kirjoitettu sivun lähdekoodiin.
Daa.
Metabolix kirjoitti:
JS-kikkailu toki estäisi näin yksinkertaisen lähestymistavan..
Pointtini.
Metabolix kirjoitti:
.. mutta millä todennäköisyydellä joku käyttäisi JS:ää noin ruman tekstisisällön tuottamiseen, ja mitä ihmettä JS-kikkare tekisi HSL:n reittioppaan kehittäjärajapinnassa, josta selvästikin on tarkoitus hakea dataa koneellisesti?
Aivan totta. <3
Aihe on jo aika vanha, joten et voi enää vastata siihen.